КЛАСТЕР 

Содержание: назначение, особенности реализации, методика, сборка, запуск, параметры, выдача, другие тесты и ссылки. Описание соответствует версии теста от 4 июля 2003 года.


Назначение

NFSTEST/MPI - тест производительности общей файловой системы с точки зрения параллельных MPI-программ. Тест также может использоваться для проверки корректности функционирования файл-сервера при больших нагрузках.

Тест свободно доступен в рамках системы тестов производительности для параллельных компьютеров, разработанной в НИВЦ МГУ.

Особенности реализации

Данный тест не является тестом производительности MPI, но использует некоторые возможности MPI, такие как: синхронизация (MPI_Barrier) и пересылка данных от головного всем процессам (MPI_Bcast). Требуется доступ на запись к некоторой директории на общем файловом сервере (как правило, NFS), видимой одинаковым образом со всех узлов параллельной ВС (кластера).

Тест реализован в виде одного файла nfstest-mpi.c, снабженного комментариями на русском языке (в кодировке КОИ-8 для UNIX). В процессе работы программы все сообщения на терминал и все результаты выдаются только на английском языке с использованием сокращений, описанных в этом файле.

Методика тестирования

Алгоритм тестирования производительности общего доступа к файл-серверу состоит в следующем. На узлах кластера запускается некоторое количество (np) MPI-процессов. Возможен и "вырожденный" вариант, когда тест запускается на одном узле.

Каждый отдельный тест проводится в два этапа: запись и чтение. Перед и после окончания каждого этапа все процессы синхронизируются.

Для записи и чтения файлов в памяти каждого процесса выделяется буфер определенного размера, причем файлы записываются и читаются порциями, равными размеру буфера. Безусловно, размер буфера влияет на производительность чтения и записи. По умолчанию выбирается размер буфера, равный размеру файла.

Для целей проверки перед началом записи каждый из процессов заполняет буфер байтами с номером этого процесса (myid). На этапе записи каждый из процессов последовательно записывает на файл-сервер определенное число (n) файлов определенного размера (FS). Таким образом, на файл-сервере создается n*np файлов общего размера TFS = FS*n*np. Измеряется время (WTT), затраченное на проведение операций записи (вместе с закрытием) файлов на всех процессорах. Вычисляется общая пропускная способность файл-сервера на тесте записи как TWT = TFS/WTT.

На этапе чтения каждый из процессов последовательно прочитывает с файл-сервера n ранее записанных файлов размера FS. С целью исключить эффект кэширования, тест реализован так, что все или большинство из этих файлов будут файлами, созданными другими процессорами. Это условие будет невыполнено, только при работе теста на 1 или 2 узлах. Измеряется время (RTT), затраченное на проведение операций чтения всех файлов на всех процессорах. Вычисляется общая пропускная способность файл-сервера на тесте чтения как TRT = TFS/RTT.

Вся процедура тестирования, как правило, состоит из нескольких итераций, в рамках каждой из которых размер файлов (FS) изменяется от наименьшего до наибольшего. После окончания всей процедуры выдается наилучшая достигнутая производительность отдельно на операциях записи и чтения.

Сборка теста

Компиляция и сборка теста производится на хост-компьютере кластера с установленной реализацией MPI, обычно достаточно следующей команды:

	mpicc -o nfstest nfstest-mpi.c

Для включения режима отладки можно задать при компиляции ключ -DDEBUG. Тест, откомпилированный таким образом, выдает на терминал массу дополнительной информации о ходе работы, что может использоваться для отладки в случаях, если тест подвисает в неизвестном месте.

Запуск теста

Запуск обычно производится командой:

	mpirun -np <число узлов> nfstest <параметры>

Если стоит задача получить "чистые" результаты, то рекомендуется убедиться в том, что на каждом узле запускается только по одному MPI-процессу и что на кластере не работают другие программы, активно использующие файл-сервер. Также, если стоит задача протестировать производительность сетевого доступа к файл-серверу, то надо убедиться, что на нем самом процессы не запускаются.

В процессе работы теста результаты измеряет и выдает только один процесс (головной, с номером 0). Но перед замером времени производится барьерная синхронизация, поэтому результат относится к выполнению операций В/В всеми процессами.

Возможен запуск теста и на одном узле, в частности, на самом файл-сервере.

Параметры теста

Объяснение значений параметров теста:

Пример запуска и его объяснение

mpirun -np 4 nfstest n3 uK m256 M1024 b256 K2 f/home/tmp onfstest.res d1 c1 v1 R3 

В данном случае будут запущены четыре MPI-процесса. Каждый из них будет создавать по три файла (т.е. получится, что каждый процесс читает только файлы, созданные другими процессами, что хорошо для "чистоты" тестирования). Единица измерения размера файлов - килобайт (К). Размер файлов будет изменяться от 256Кб до 1024Кб (m256 и M1024), каждый раз будет увеличиваться в два раза (K2). Тестовые файлы будут создаваться в директории /home/tmp, а результаты теста будут печататься в файл nfstest.res в текущей директории. Будет включен режим проверки содержимого (т.е. после каждой операции чтения читающий процесс будет проверять, что в буфере оказались именно такие значения байтов, которые туда записывались). Операции записи и чтения будут выполняться функциями write() и read(). Выдача будет включать не только результаты тестов, но и некоторую сопроводительную информацию. Весь тест целиком будет повторен три раза.

Выдача теста

Объяснение значения чисел, выдаваемых тестом:

Между этими значениями и параметрами теста существуют такие соотношения:

	TFS = FS * n * np
	AWT = WTT / n
	ART = RTT / n
	LWR = (n * FS) / WTT
	LRR = (n * FS) / RTT
	TWT = TFS / WTT
	TRT = TFS / RTT

Вот пример выдачи теста с параметрами, указанными в примере запуска выше:

FILETEST/NFS/MPI of 2003/07/04 is running with following parameters:
        Unit is 1Kb = 1024 bytes
        File size: 256Kb to 1024Kb, buffer size: 256Kb
        Number of processes: 4, number of files: 3, total: 12
        Checking correctness of read buffer.
        Using direct I/O calls (read/write).
        Number of iterations for whole test: 2
        Testing file system: /home/tmp
        Nodes: aqua1-1.the.net aqua1-2.the.net aqua1-3.the.net aqua2-1.the.net
Starting test iteration = 0 for FS = 256Kb.
--- TFS=3072Kb  WTT= 0.1s AWT= 0.0s     LWR=5996.3Kb/s TWR=23985.4Kb/s
--- TFS=3072Kb  RTT= 0.1s ART= 0.0s     LRR=9118.8Kb/s TRR=36475.0Kb/s
Starting test iteration = 0 for FS = 512Kb.
--- TFS=6144Kb  WTT= 0.2s AWT= 0.0s     LWR=6249.4Kb/s TWR=24997.8Kb/s
--- TFS=6144Kb  RTT= 0.2s ART= 0.0s     LRR=10179.9Kb/s TRR=40719.8Kb/s
  ...часть выдачи опущена....
Starting test iteration = 1 for FS = 1024Kb.
--- TFS=12288Kb WTT= 0.5s AWT= 0.0s     LWR=6286.2Kb/s TWR=25144.6Kb/s
--- TFS=12288Kb RTT= 0.3s ART= 0.0s     LRR=10739.9Kb/s TRR=42959.5Kb/s
Testing complete in   3.0 seconds
--- Best writing rate achieved: TWR=25144.6 Kb/s (at TFS=12288Kb)
--- Best reading rate achieved: TRR=43103.2 Kb/s (at TFS=12288Kb)

В заголовке выдается версия теста, потом параметры данного запуска, имена узлов, потом последовательно выдаются результаты для отдельных тестов (для различных значений размера файла на различных итерациях). В конце выдается общее время работы всех итераций теста.

Если опустить флаг "подробной" выдачи (v1), то получим выдачу, включающую только строки с результатами тестов.

--- TFS=3072Kb  WTT= 0.1s AWT= 0.0s     LWR=6073.8Kb/s TWR=24295.1Kb/s
--- TFS=3072Kb  RTT= 0.1s ART= 0.0s     LRR=9151.4Kb/s TRR=36605.4Kb/s
  ...часть выдачи опущена....
--- TFS=12288Kb WTT= 0.5s AWT= 0.0s     LWR=6272.1Kb/s TWR=25088.5Kb/s
--- TFS=12288Kb RTT= 0.3s ART= 0.0s     LRR=10738.4Kb/s TRR=42953.5Kb/s
--- Best writing rate achieved: TWR=25088.5 Kb/s (at TFS=12288Kb)
--- Best reading rate achieved: TRR=43064.4 Kb/s (at TFS=12288Kb)

Таким образом, мы получаем, что наилучшая достигнутая пропускная способность файл-сервера составляет примерно 25 Мб/сек для операций записи и 43 Мб/сек для операций чтения. Оба этих значения достигнуты при суммарном объеме файлов в 12 Мбайт (т.е. наибольшем объеме в данном запуске).

Замечание. Имеет смысл сравнить результаты этого теста с результатами теста NETTEST (для логической топологии "звезда"), при запуске головного процесса этого теста на файл-сервере.

Ссылки, другие тесты

Тест SPEC SFS97.

Тест IOzone.

См. подраздел тесты производительности файловой системы на сервере PARALLEL.RU.

Алексей Лацис. Как построить и использовать суперкомпьютер. Москва, изд-во "Бестселлер", 2003 г. См. раздел 4.3 ("Способы управления ресурсом внешней памяти"), раздел 8.2 ("проблема сетевой перегрузки") и приложение 4 ("нагрузочный тест NFS"). (Реализованный нами тест в каком-то смысле является развитием этого нагрузочного теста, созданного А.Лацисом, дополенным средствами оценки производительности).