Низкая производительность 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 запросов. Тогда сообщите здесь результаты.

Другие вопросы по тегам