Производительность Intel NVME в Linux
У меня есть диск Intel 760P NVME, подключенный к Supermicro X11SRM-F с Xeon W-2155 и 64 ГБ оперативной памяти ddr4-2400. Спецификации для этого диска требуют 205K-265K IOPS (независимо от того, что означает диапазон 8 ГБ) с произвольным считыванием около 3 Гбит / с и произвольной записью 1,3 Гбит / с.
Я пытался использовать этот диск под слоем LVM, а также с пустым разделом, и просто не могу найти ничего похожего на заявленную производительность.
Запуск типичного процесса на диске дает (через iostat
) около 75 МБ / с записи, около 5K TPS (IOPS). iostat также показывает использование диска примерно на 20% (графики ниже), поэтому кажется, что-то где-то все еще есть узкое место. Обычный твердотельный накопитель Intel по кабелю SATA превзойдет накопитель на этом этапе. Есть идеи, на что посмотреть?
ОБНОВЛЕНИЕ: Как упомянул @Джон Маховальд - Кажется, узкое место приложения (Руби)!? графики ниже из этого fio
командный сценарий (пришлось увеличить масштабирование графика.. ~700 МБ / с записи и более 50K 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
1 ответ
Гораздо более высокий IOPS с fio по сравнению с исходным тестом предполагает, что есть ограничивающий фактор где-то, кроме системы хранения.
Для планирования емкости оцените, какая производительность хранилища вам действительно нужна. Возьмите свои номера TPS из реальной нагрузки и догадайтесь, какими будут потребности IOPS.
200 тыс. Операций ввода-вывода в секунду - это гораздо больше, чем требуется для большинства отдельных приложений. (Который является хорошей проблемой.) Нетривиально увеличить 100 тыс. Операций ввода-вывода в секунду, даже для генераторов синтетической нагрузки, предназначенных для хранения данных. Для этого обычно требуется несколько параллельных процессов, настройка глубины очереди и, возможно, асинхронный ввод-вывод.