abbra: (Default)
abbra ([personal profile] abbra) wrote2008-10-27 04:37 pm
Entry tags:

(no subject)

Для завтрашнего мероприятия в Мариотт Гранд, гоняли сегодня тестики по кластерной самбе. Простейший кластер из двух узлов, (2х1Гбит/с, один в пользовательскую сеть, один -- служебный), полка с десятью 15К RPM дисками. Внутре -- GPFS, поверх которой крутится кластерная Самба 3.2.3 в рамках IBM Scale out File Services. Все это воткнуто в Active Directory на базе Windows 2003 Server, так что с системой могут работать в принципе любые клиенты -- от линуксовых до самых распоследних вист.

Берем четыре клиентских машины, каждая с 1Гбит/с, запускаем на них smbtorture из Samba4 с тестом BENCH-NBENCH, который имитирует "отраслевой стандарт" NetBench. Сам скрипт для теста -- чтение блоками по 64Кб из файлов размером в 1Гб. Строка запуска:
bin/smbtorture //filer/test -UПользователь%Пароль BENCH-NBENCH \
     --loadfile=loadfiles/read_1G_64k_at_a_time.load \
     -t 100 --num-progs 4 --option=torture:readonly=yes

То есть, запускаем на каждом клиенте по 4 параллельных процесса, которые читают блоками по 64Кб из файлов рамером в 1Гб и даем 100 секунд на выполнение. BENCH-NBENCH грузит скрипт, форкается и запускает четыре процесса обработки скрипта. Через некоторое время "прогрева" (пока процессы соединятся с серверами...), начинают идти результаты. Указанный адрес сервера (//filer) на самом деле представляет собой "имя сервера" в CIFS. Ему соответствуют разные IP узлов нашего кластера в DNS, так что клиенты получают их при разрешении имени в режиме round-robin.

Поскольку запускал я тесты руками, то между запусками были временные разрывы. Так что какой-то из клиентов успел "отъесть" больше полосы пропускания, чем другие. У нас теоретически 4Гбит/с от клиентов (1Гбит/с от каждого) и 2Гбит/с от кластера. Между коммутаторами настроено объединение каналов -- по 4 1Гбит/с порта с каждой стороны, то есть теоретически мы могли бы "прокинуть" 4Гбит/с, если бы со стороны кластера они были. Каждый клиент мог "съесть" свой 1Гбит/с, если бы получилось.

Тест воспроизводит типичную картину "голода" в офисе, когда возможностей файлового сервера не хватает на всех клиентов из-за ограничений полосы пропускания. В данном случае важным становится эффективное распределение нагрузки между узлами кластера. То есть, в обычном офисном случае у нас файловый сервер на самом деле один и максимум, что мы можем сделать -- это "съесть" его сетевые возможности. С кластерной самбой становится возможным "размазать" этот поток запросов и ответов между несколькими серверами одновременно, а не помещать все сетевые карты в один сервер. Когда-нибудь возможности одного сервера закончатся -- либо по пропускной способности его сетевой подсистемы, либо по затратам на память при обслуживании клиентов (Самба 3.2 требует приблизительно 500-700Кб служебных данных на клиента и порядка 5-7Мб кода на процесс, что транслируется в реальности в 400-500 одновременных пользователей на 1Гб ОЗУ сервера). И если память нарастить еще можно, то слоты для сетевых карт закончатся довольно быстро, пусть и с многопортовками.

В результате, мы получаем приблизительно следующую картину для четырех клиентов:
$ cat client?-1.log|grep Throughput
Throughput 38.7363 MB/sec
Throughput 38.8454 MB/sec
Throughput 100.868 MB/sec
Throughput 40.1211 MB/sec


Видно, что один из клиентов "сообразил" раньше и захватил всю доступную себе полосу пропускания -- из 1Гбит/с ему было доступно 100.868 МБайт/с, или 80.69% канальной емкости. Остальные запустились более-менее одновременно и потому распределили между собой оставшийся объем канала. Суммарно вышло 218.5708МБайт/с из доступных 2Гбит/с, которые кластер мог отдать. Или 87.42% канальной емкости.

Забавно посмотреть, что творилось в это время в кластере:
# smbstatus
Samba version 3.2.3
PID     Username      Group         Machine                        
-------------------------------------------------------------------
1:29854   SOFSDEMO\administrator  SOFSDEMO\domain users  n2           (10.222.25.12)
1:29855   SOFSDEMO\administrator  SOFSDEMO\domain users  n2           (10.222.25.12)
1:29403   SOFSDEMO\administrator  SOFSDEMO\domain users  n1           (10.222.25.11)
1:29606   SOFSDEMO\administrator  SOFSDEMO\domain users  n3           (10.222.25.13)
1:29406   SOFSDEMO\administrator  SOFSDEMO\domain users  n1           (10.222.25.11)
1:29609   SOFSDEMO\administrator  SOFSDEMO\domain users  n3           (10.222.25.13)
0:25719   SOFSDEMO\administrator  SOFSDEMO\domain users  mgmtx        (10.222.25.1)
0:25740   SOFSDEMO\administrator  SOFSDEMO\domain users  mgmtx        (10.222.25.1)
0:25741   SOFSDEMO\administrator  SOFSDEMO\domain users  mgmtx        (10.222.25.1)
0:25742   SOFSDEMO\administrator  SOFSDEMO\domain users  mgmtx        (10.222.25.1)
0:25745   SOFSDEMO\administrator  SOFSDEMO\domain users  mgmtx        (10.222.25.1)
1:29856   SOFSDEMO\administrator  SOFSDEMO\domain users  n2           (10.222.25.12)
1:29404   SOFSDEMO\administrator  SOFSDEMO\domain users  n1           (10.222.25.11)
1:29607   SOFSDEMO\administrator  SOFSDEMO\domain users  n3           (10.222.25.13)
1:29407   SOFSDEMO\administrator  SOFSDEMO\domain users  n1           (10.222.25.11)
1:29853   SOFSDEMO\administrator  SOFSDEMO\domain users  n2           (10.222.25.12)
1:29573   SOFSDEMO\administrator  SOFSDEMO\domain users  n3           (10.222.25.13)
1:29605   SOFSDEMO\administrator  SOFSDEMO\domain users  n3           (10.222.25.13)
1:29405   SOFSDEMO\administrator  SOFSDEMO\domain users  n1           (10.222.25.11)
1:29851   SOFSDEMO\administrator  SOFSDEMO\domain users  n2           (10.222.25.12)

Service      pid     machine       Connected at
-------------------------------------------------------
test         0:25740   mgmtx         Mon Oct 27 15:35:50 2008
test         1:29606   n3            Mon Oct 27 15:35:56 2008
test         1:29854   n2            Mon Oct 27 15:35:59 2008
test         1:29573   n3            Mon Oct 27 15:35:55 2008
test         1:29851   n2            Mon Oct 27 15:35:59 2008
test         1:29404   n1            Mon Oct 27 15:35:52 2008
test         0:25742   mgmtx         Mon Oct 27 15:35:50 2008
test         1:29605   n3            Mon Oct 27 15:35:56 2008
test         1:29406   n1            Mon Oct 27 15:35:52 2008
test         1:29607   n3            Mon Oct 27 15:35:56 2008
test         1:29856   n2            Mon Oct 27 15:35:59 2008
test         1:29853   n2            Mon Oct 27 15:35:59 2008
test         1:29403   n1            Mon Oct 27 15:35:52 2008
test         1:29855   n2            Mon Oct 27 15:35:59 2008
test         0:25741   mgmtx         Mon Oct 27 15:35:50 2008
test         1:29609   n3            Mon Oct 27 15:35:56 2008
test         0:25719   mgmtx         Mon Oct 27 15:35:50 2008
test         1:29405   n1            Mon Oct 27 15:35:52 2008
test         1:29407   n1            Mon Oct 27 15:35:52 2008
test         0:25745   mgmtx         Mon Oct 27 15:35:50 2008

Locked files:
Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time
--------------------------------------------------------------------------------------------------
0:25740      10000000   DENY_NONE  0x183       RDWR       LEVEL_II         /gpfs/shared/test   clients/client1/file.dat   Mon Oct 27 15:36:31 2008
1:29405      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client1/file.dat   Mon Oct 27 15:35:52 2008
1:29605      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client1/file.dat   Mon Oct 27 15:35:56 2008
1:29853      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client1/file.dat   Mon Oct 27 15:35:59 2008
0:25741      10000000   DENY_NONE  0x183       RDWR       LEVEL_II         /gpfs/shared/test   clients/client2/file.dat   Mon Oct 27 15:36:31 2008
1:29404      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client2/file.dat   Mon Oct 27 15:35:52 2008
1:29606      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client2/file.dat   Mon Oct 27 15:35:56 2008
1:29854      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client2/file.dat   Mon Oct 27 15:35:59 2008
0:25745      10000000   DENY_NONE  0x183       RDWR       LEVEL_II         /gpfs/shared/test   clients/client4/file.dat   Mon Oct 27 15:36:28 2008
1:29407      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client4/file.dat   Mon Oct 27 15:35:52 2008
1:29607      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client4/file.dat   Mon Oct 27 15:35:56 2008
1:29856      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client4/file.dat   Mon Oct 27 15:35:59 2008
0:25742      10000000   DENY_NONE  0x183       RDWR       LEVEL_II         /gpfs/shared/test   clients/client3/file.dat   Mon Oct 27 15:36:31 2008
1:29406      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client3/file.dat   Mon Oct 27 15:35:52 2008
1:29609      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client3/file.dat   Mon Oct 27 15:35:56 2008
1:29855      10000000   DENY_NONE  0x183       RDWR       NONE             /gpfs/shared/test   clients/client3/file.dat   Mon Oct 27 15:35:59 2008


Видно, что процессы smbd запущены на разных узлах (0: и 1: в колонке Pid -- виртуальные номера узлов в кластере), а информация о блокировках файлов доступна всем процессам smbd на всех узлах. Оно просто работает. Правда, нагрузка распределилась между узлами неравномерно, но это скорее вопрос к настройке коммутаторов, где было включено хэширование соединений по IP-адресам.

Увеличивая количество узлов в кластере мы можем добиться более оптимальной утилизации канала для текущего количества клиентов. В нашем случае дисковая полка, очевидно, вытягивает и больше, а не хватает именно канальной емкости. В случае если не будет хватать шпинделей, достаточно добавить их и GPFS "размажет" данные по добавочной емкости.

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

Да, с августа 2008 в GPFS появилась поддержка Windows -- теперь тома GPFS можно монтировать по ее родному протоколу. Выиграем ли мы, используя родной протокол GPFS против CIFS? Наверное, где-нибудь процентов 5, а может и проиграем, я не сравнивал производительность GPFS и CIFS. Есть еще расходы на TCP/IP, а 87% реальной утилизации уже довольно близки к тому, что можно достичь с Gigabit Ethernet.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org