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