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

Производительность Intel NVME в Linux

У меня есть накопитель Intel 760P NVME, подключенный к Supermicro X11SRM-F с Xeon W-2155 и 64 ГБ оперативной памяти ddr4-2400. В спецификации для этого диска требуется 205–265 тыс. операций ввода-вывода в секунду (независимо от того, что означает диапазон 8 ГБ) со скоростью случайного чтения около 3 Г / с и случайной записью 1,3 ГБ / с.

Я пробовал использовать этот диск под слоем LVM, а также с голым разделом и просто не могу достичь заявленной производительности.

Запуск типичного процесса на диске дает (через iostat) около 75 МБ / с при записи и около 5 тыс. TPS (IOPS). iostat также показывает использование диска около 20% (графики прилагаются ниже), поэтому кажется, что что-то все еще где-то является узким местом. Обычный твердотельный накопитель Intel, подключенный к кабелю SATA, на этом этапе превосходит диск. Есть идеи, на что смотреть?

ОБНОВЛЕНИЕ: Как упоминал @John Mahowald - Кажется, это узкое место приложения (Ruby) !? графики ниже от этого fio командный сценарий (пришлось увеличить масштабирование графика .. ~ 700 МБ / с записывает и более 50 тыс. TPS:

# full write pass
fio --name=writefile --size=10G --filesize=80G \
--filename=disk_test.bin --bs=1M --nrfiles=1 \
--direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
--iodepth=200 --ioengine=libaio

# rand read
fio --time_based --name=benchmark --size=80G --runtime=30 \
--filename=disk_test.bin --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randread --blocksize=4k --group_reporting

# rand write
fio --time_based --name=benchmark --size=80G --runtime=30 \
--filename=disk_test.bin --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randwrite --blocksize=4k --group_reporting

Значительно более высокие показатели IOPS с fio по сравнению с исходным тестом предполагают, что есть ограничивающий фактор где-то еще, кроме системы хранения.

Для планирования емкости оцените, какая производительность хранилища вам действительно нужна. Возьмите числа TPS из реальной нагрузки и угадайте, какие будут требуемые IOPS.

200 тыс. Операций ввода-вывода в секунду - это намного больше, чем может запросить большинство отдельных приложений. (Это хорошая проблема.) Нетривиально подтолкнуть 100 тыс. Операций ввода-вывода в секунду даже для генераторов синтетической нагрузки, предназначенных для использования памяти. Это обычно требует нескольких параллельных процессов, настройки глубины очереди и, возможно, асинхронного ввода-вывода.