Назад | Перейти на главную страницу

Низкая производительность iSCSI с SSD-дисками и сетью 10 Gbe

iSCSI Target

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.

Инициатор

Я экспортировал LUN на 500 ГБ на клиент 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 000 IOPS.

Связь между целью и инициатором составляет менее 1 мс, а iperf показывает пропускную способность сети 9,2 Гбит / с.

Я понимаю, что запись 4 КБ может повлиять на производительность, поскольку перед записью на диск все данные должны пройти через сетевой стек как инициатора, так и целевого объекта, но это недопустимое падение с 65 КБ до 2 КБ.

Где может быть проблема? у меня есть 10 Гбит / с Ethernet Сетевая карта между целью и инициатором. Любые идеи?

Короткий ответ: Это результат задержки сети и последовательная рабочая нагрузка (как вы наложили, используя 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 запросов. Тогда сообщите здесь о результатах.