Низкая производительность iSCSI с дисками SSD и сетью 10 Gbe
Цель iSCSI
Ubuntu 14.04 (Trusty Tahr) с 16 ГБ ОЗУ и 16-ядерным ЦП в качестве цели iSCSI с поддержкой LVM с использованием трех SSD-дисков Samsung, каждый из которых способен выполнять 65 тыс. Операций ввода-вывода в секунду с использованием контроллера LSI 6 Гбит / с со встроенным кешем.
Тест на SSD-диске в целевой программе:
fio --filename=/dev/sdd --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=ssd-max
iops=65514
куда sdd
настроен в аппаратном RAID 0 с использованием трех твердотельных накопителей Samsung 850 EVO.
инициатор
Я экспортировал 500 ГБ LUN на клиент Ubuntu 14.04 с 32 ГБ ОЗУ и 8 ядерными процессорами.
Контрольный показатель по экспортированному LUN
fio --filename=/dev/sdg --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=client-max
iops=2400
При выполнении DAS и по сети происходит значительное снижение производительности, я ожидал не менее 10 тыс. Операций ввода-вывода в секунду.
Связь между целью и инициатором составляет менее 1 мс, а iperf показывает пропускную способность сети 9,2 Гбит / с.
Я понимаю, что при записи 4k будет иметь место снижение производительности, поскольку перед записью на диск все данные должны пройти через сетевой стек как инициатора, так и цели, но это недопустимое падение с 65k до 2k.
Где может быть проблема? У меня есть сетевой адаптер Ethernet 10 Гбит / с между целью и инициатором. Есть идеи?
1 ответ
Краткий ответ: это результаты задержки в сети и последовательной нагрузки (как вы наложили, используя direct=1
, sync=1
а также iodepth=1
).
Длинный ответ: с помощью direct=1
, sync=1
а также iodepth=1
вы создали последовательную рабочую нагрузку, поскольку новые записи не могут быть поставлены в очередь до того, как предыдущая запись была зафиксирована и подтверждена. Другими словами, скорость отправки записей строго зависит от задержки в сети. Просто ping
между двумя машинами вполне может превышать 0,2 мс, особенно при использовании протокола более высокого уровня в качестве TCP (и iSCSI поверх него). Предполагая, что общая задержка в сети составляет около 0,33 мс, максимальное значение IOPS составляет около 3000. Это без учета других источников задержки (например, самих дисков), поэтому оно соответствует тому, что вы записали.
Попробуйте это: выполнить первый тест без --direct=1 --sync=1
и еще один с этими опциями на месте, но увеличение iodepth
до 32 запросов. Тогда сообщите здесь результаты.