10G дома: Infiniband, Linux, Samba, iSCSI, SRP

Для начала картинка. Это SRP (SCSI RDMA Protocol), поднятый на Linux, клиент - Windows 7.

Если сравнивать с картинкой для iSCSI поверх Myricom (вторая картинка в этом посте), то выросла скорость на мелких блоках и нет падения на блоках больше 256к.

Но по порядку.

Гружу линукс, запускаю Samba, меряю. Хреново как-то, сильно хуже (на мелких файлах) чем было на Myricom, кардинально хуже. На iSCSI то же самое, причем видно что при копировании большого файла он уезжает в кэш (на гигабайт где-то), после чего все встает колом и скорости плохие.

Единственная настройка, которую менял относительно defaults - это включал connected mode (т.е. IP-пакеты по 65k). Отключаю, становится кардинально лучше. Даже Win7 ("сервер") загрузил, увидел что скорость копирования файлов Qt вернулась, стали те же примерно 1:15 (у IB - чуть медленнее), что были с Myricom.

Новая бенчмарка

Большие файлы проблемы не представляют, во всех тестах скорость работы с ними разумная и в реальной жизни упрешься в производительность дисков скорее всего. Даже если упрусь в интерфейс, те 800Mb/sec которые я вижу - меня устраивают полностью.

С мелкими файлами хуже, упор явно идет в RTT. При этом бенчмарка с копированием 65k файлов мне не нравится, хотя я продолжаю ея мерять. Но гораздо интереснее - чтение большого количества мелких файлов, типичный паттерн - компиляция или рассмотрение каталога с превьюшками.

Вторая бенчмарка, которую я стал пускать - это подсчет md5-сумм того же каталога с Qt (65k файлов, 3.1Gb) с помощью md5deep. Так как клиентская машина может кэшировать часть данных, бенчмарка пускается два раза, на свежескопированный каталог с Qt и еще раз без перерыва и запуска других программ.

Результаты новой бенчмарки

Время выполнения md5deep -r . на каталоге с 65k файлов общим объемом 3.1Gb (mm:ss)
Описание окружения1-й запуск2-й запуск
Локальный RAM-drive0:200:20
Локальный SSD (OCZ Vertex 2)0:510:38
Локальный RAID6 (6x1Tb 7200 rpm, Adaptec 5805)2:141:20
Win7 SMB-сервер (RAM storage)2:302:35
Linux, Samba (RAM storage)5:045:00
Linux, iSCSI (RAM storage)1:401:00
Linux, SRP (RAM storage)0:590:40
В качестве базовой величины: 3.5Gb одним файлом md5deep офигачивает за 7 секунд. Т.е. дополнительные 13 секунд на Ramdrive (и еще большие секунды на других носителях) - это оверхед на открытие/чтение файлов.

Как видим:

  • SRP работает почти так же хорошо, как локальный SSD (а это - очень хорошо)
  • iSCSI работает похуже, но (имея стораджем RAM-диск) - серьезно быстрее, чем локальный 6-дисковый массив, а это тоже хорошо
  • SMB работает нехорошо (Samba - особенно нехорошо), для работы с мелкими файлами лучше не использовать.
В процессе экспериментов у винды было всего 3Gb свободной памяти (остальное занято Ramdrive), поэтому кэшировалось не все. Если Ramdrive убрать, то второй запуск на SSD проходит за те же 20 секунд (что и у рамдрайва), на других локальных носителях не пробовал, но скорее всего будет та же хрень. Т.е. Ramdrive оказался полезен (c точки зрения тестирования) еще и в этом месте, тестировать производительность кэшей неинтересно, надо не забывать его включать при повторных экспериментах.

Бенчмарка копирования

Все то же копирование Qt, но в качестве источника Ramdrive:
СерверВремя, mm:ss
Win71:25
Linux, Samba3:13
Linux, iSCSI1:00
Linux, SRP0:32

Итого

Новая бенчмарка не применялась к Myricom, кроме того у бенчмарки копированием поменялся источник, что должно быть видно на самом быстром варианте (Myricom+iSCSI), следовательно Myricom-тесты надо переделывать.

Но и без переделывания почти очевидно, что скорости SRP и, скорее всего, скорости iSCSI будет хватать т.к. узким местом станет дисковый массив с физическими дисками (пачка SSD - другой разговор).

Про настройку SRP

Настройку SRP я делал по этой инструкции, благо у меня тоже Ubuntu 11.10.

Оно не вполне получилось. Вот эта вот команда:

scstadmin -add_lun 0 -driver ib_srpt -target ib_srpt_target_0 -group HOST01 -device DISK01 -attributes read_only=0
выругалась на read_only и я ее выполнил без -attributes:
scstadmin -add_lun 0 -driver ib_srpt -target ib_srpt_target_0 -group HOST01 -device DISK01

Более того, подготовленный конфиг не завелся и я его упростил примерно до такого вот (взяв за основу пример отсюда):

HANDLER vdisk_blockio {
        DEVICE disk01 {
                filename /dev/ram0
                nv_cache 1
        }
}

TARGET_DRIVER ib_srpt {
        enabled 1
        TARGET iqn.2006-10.net.vlnb:tgt {
                LUN 0 disk01
                enabled 1
        }
}
С таким конфигом, после нескольких enable-disable device на стороне Windows, все завелось и поехало. Настраивать в "Computer Manager - iSCSI" - ничего не нужно.

К сожалению, SRP есть только для Linux (точно) и Солярки (кажется, т.е. народ что-то настраивает, но не факт что это работает везде и всегда). С FreeBSD - облом. Но см. выше про производительность реальных дисков, скорее всего просто iSCSI по 10G не будет совсем уж узким местом.

Comments

Я правильно понимаю, что SRP работает поверх iSCSI?

Нет, поверх infiniband. IP в деле вовсе не участвует.

Спасибо.

на nfs бенчмарки не прогняли?

Прогонял на Myricom-е, получил ужасное какое-то говно. Не помню результат, в разы медленнее самбы.

Но у меня виндовый клиент (Win7) и никакие другие клиенты на практике не интересуют т.е. Linux-Linux не стал тестировать.

Подскажите пожалуйста , реально ли поднять аналогичный сервак на 2008R2 ?
Просто в связи с доступностью Infiniband оборудования , хочу поднять что то подобное,
Но вынужден юзать 200R2 как iSCSI хост для Hyper-v R2 .
В данный момент на нем стоят OCZ Vertex 2, а 2х1Gbit/s катастрофически мало .
Но вот не могу найти инфу можно ли поверх SRP пускать iSCSI ?
И есть ли вообще драйвер SRP под винду ....

про SRP target на винде ничего не знаю совсем. То есть вовсе.
Гугление находит только солярку и Linux.

SRP initiator (клиент) входит в поставку драйверов (OFED).

А если нужно не iSCSI, а быстрый доступ по сети?
Только вариант с 10G Ethernet, IP, и всяческими связанными с этим задержками?

Быстрый доступ по сети к чему?

Если это какое-то ваше собственное приложение - можно к нему и по RDMA ходить (поверх IB), будет быстро.

Имеем, скажем, 10ТБ дисковую стойку.
В сети есть 2-3 клиента, которым надо к этой стойке ходить.
На сторадже лежат достаточно большие файлы фотографий (десятки и сотни тысяч штук) и маленькие xml файлы.
На этом же сторадже лежат файлы с видео под последующий монтаж.
Задача - организовать быстрый доступ этих 2-3х клиентов к всем этим файлам.
На клиентах - Mac OSX и Windows 7.
На сторадже - что нам лучше подойдет. Может быть Linux, может быть Windows 2012 Server.

Это можно только с IP сетью сделать?

Если это разделяемый доступ (т.е. клиенты ходят к одному и тому же набору файлов), то у вас выбор между какими-то "сетевыми файловыми протоколами": SMB, Apple FS, NFS.

SMB в Win2012-сервер вроде умеет работать поверх чистого Infiniband (RDMA), но что должно быть для этого на клиенте - я не знаю.
NFS умеет работать поверх RDMA, как я быстро нагуглил. Но что должно быть на клиенте - опять не знаю.

IP - совместимый вариант, но оверхед будет больше.

Короче, пробовать надо :-)
Спасибо!