Низкая производительность сети между хранилищем Citrix XenServer и Linux iSCSI
У меня есть два сервера SuperMicro, напрямую соединенные (без коммутатора) с двумя 10-гигабитными сетевыми платами Intel X540-T2. На одном сервере работает Citrix XenServer 6.2, на другом - Debian 7.
Затем я установил open-iscsi и iscsitarget в системе Debian, настроил диск RAM объемом 12 ГБ, установил его в качестве хранилища iSCSI на XenServer и предоставил виртуальный диск объемом 12 ГБ одной из виртуальных машин, работающих на этом XenServer.
Оказывается, я не могу получить больше, чем около 290 МБайт / с:
root@s1002:~# dd if=/dev/zero of=/dev/xvdb bs=16M
dd: writing `/dev/xvdb': No space left on device
737+0 records in
736+0 records out
12348030976 bytes (12 GB) copied, 42.6216 s, 290 MB/s
root@s1002:~# dd if=/dev/xvdb of=/dev/null bs=16M
736+0 records in
736+0 records out
12348030976 bytes (12 GB) copied, 46.0591 s, 268 MB/s
Затем я повторил тот же тест с коммерческим хранилищем и получил скорость передачи приблизительно 450 МБ / с даже при использовании физических дисков.
Я ожидал такой же или даже лучшей скорости при использовании моего Linux-сервера с виртуальным диском, но кажется, что либо моя конфигурация iscsitarget, либо моя сетевая конфигурация не оптимальны. Сеть настроена с большими кадрами (протестировано с ping -M do -s 8972 ipaddr
на обоих концах). Настройка targetcli в значительной степени является конфигурацией по умолчанию:
/> ls
o- / ....................................................................................................................... [...]
o- backstores ............................................................................................................ [...]
| o- fileio ................................................................................................. [0 Storage Object]
| o- iblock ................................................................................................. [0 Storage Object]
| o- pscsi .................................................................................................. [0 Storage Object]
| o- rd_dr .................................................................................................. [0 Storage Object]
| o- rd_mcp ................................................................................................. [1 Storage Object]
| o- ramdisk ............................................................................................. [ramdisk activated]
o- iscsi ........................................................................................................... [1 Targets]
| o- iqn.2003-01.org.linux-iscsi.server85.x8664:sn.f63360d26dd2 ........................................................ [1 TPG]
| o- tpgt1 ......................................................................................................... [enabled]
| o- acls .......................................................................................................... [0 ACL]
| o- luns .......................................................................................................... [1 LUN]
| | o- lun0 ..................................................................................... [rd_mcp/ramdisk (ramdisk)]
| o- portals .................................................................................................... [1 Portal]
| o- 10.0.12.85:3260 ................................................................................................ [OK]
o- loopback ......................................................................................................... [0 Target]
o- tcm_fc ........................................................................................................... [0 Target]
/>
Как я могу настроить iscsitarget и / или сетевой адаптер для улучшения производительности сети, чтобы она соответствовала коммерческому хранилищу?
1 ответ
Во-первых, даже если он называется виртуальным диском, он может использовать вращающиеся диски. Оказывается, в настоящее время существует много типов RamDisk, и тип tmpfs может использовать как жесткий диск, так и RAM. Хотелось бы увидеть ваш тест в отношении хранилища файлов с вращающимися дисками на 12 ГБ. Может быть, с той же скоростью.
Во-вторых, возможно, вы переписали конец диска и записали гораздо больше, чем 12 ГБ. Это был мой опыт. В отличие от обычных дисков, dd (или, скорее, ядро) не останавливается, когда достигает конца виртуального диска. Установите ограничение на количество написанного dd, добавив bs=1GB count=12
,
Протестируйте перезапись, создав резервную копию 4GiB RamDisk с помощью targetcli
на localhost и инициируйте соединение с ним, используя iscsiadm
, Затем проверьте запись гораздо больше, чем 4 ГБ с dd
:
# targetcli ls backstores/ramdisk/
o- ramdisk.................................................................................................... [Объекты хранения: 1]
o- RamDisk4GB............................................................................................... [(4.0GiB) активирован]
Безопасно писать 3 ГБ:
время dd if=/dev/zero = = mnt / sdd bs = 1GB count = 3 #
3+0 записей в 3+0 записей, скопировано 3000000000 байт (3,0 ГБ), 4,41983 с, 679 МБ / с
real 0m6.692s
user 0m0.000s
sys 0m4.333s
Но шокирован, когда нет ошибок при записи 5 ГБ, 6 ГБ, 8 ГБ, 16 ГБ, даже 32 ГБ только на 4 ГБ пространства:
время dd если = / dev / ноль = / mnt / sdd bs = 1ГБ счетчик =16
16+0 records in
16+0 records out
16000000000 bytes (16 GB) copied, 36.671 s, 436 MB/s
real 0m38.301s
user 0m0.002s
sys 0m13.591s
Об ошибках не сообщалось до тех пор, пока 64 ГБ не попытались записать на 4 ГБ RamDisk. Казалось, ошибка примерно в размере моего / раздела, который составляет 50G.
время dd if=/dev/zero of = / mnt / sdd bs = 1GB count = 64
dd: ошибка записи '/ mnt / sdd': на устройстве не осталось места
49+0 записей в
48+0 записей
48838684672 байт (49 ГБ) скопировано, 122,821 с, 398 МБ / с
real 2m4.682s
user 0m0.002s
sys 0m38.257s
Хотелось бы, чтобы http://datera.io/ и / или http://linux-iscsi.org/ предупреждали об этом и предоставили tmpfs или один из более новых вариантов типа ramdisk. Моя установка - CentOS7, поэтому я использую бесплатную ветку от http://github.com/open-iscsi/.