Мы арендовали несколько серверов у Hetzner.de. Некоторые из них имеют жесткие диски NVMe, а другие - твердотельные накопители. Мы отметили производительность чтения / записи на 4 наших серверах, используя следующие команды:
fio
dd
hdparm
Операционная система - CentOS7, и каждый сервер имеет два жестких диска с программным обеспечением Raid 1. Все серверы размещены в центре обработки данных Hetzner.
Марки дисков:
SSD:
Model Family: Samsung based SSDs
Device Model: SAMSUNG MZ7LM240HCGR-00003
NVMe:
Model Number: THNSN5512GPU7 TOSHIBA
Serial Number: Z62S101OTUHV
Вот результаты тестов:
Server1(NVMe):
Base Board Information
Manufacturer: FUJITSU
Product Name: D3417-B1
Version: S26361-D3417-B1
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Run status group 0 (all jobs):
READ: bw=45.9MiB/s (48.1MB/s), 45.9MiB/s-45.9MiB/s (48.1MB/s-48.1MB/s), io=3070MiB (3219MB), run=66884-66884msec
WRITE: bw=15.3MiB/s (16.1MB/s), 15.3MiB/s-15.3MiB/s (16.1MB/s-16.1MB/s), io=1026MiB (1076MB), run=66884-66884msec
Disk stats (read/write):
md127: ios=785293/276106, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=393078/273876, aggrmerge=3/9643, aggrticks=330689/2134457, aggrin_queue=2467357, aggrutil=63.84%
nvme0n1: ios=410663/273879, merge=7/9640, ticks=257384/2054071, in_queue=2311731, util=55.06%
nvme1n1: ios=375494/273874, merge=0/9647, ticks=403994/2214844, in_queue=2622983, util=63.84%
#dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 14.2603 s, 75.3 MB/s
# hdparm -Tt /dev/nvme0n1
/dev/nvme0n1:
Timing cached reads: 29320 MB in 1.98 seconds = 14818.11 MB/sec
Timing buffered disk reads: 2660 MB in 3.00 seconds = 886.22 MB/sec
------------------------------------------------------------
------------------------------------------------------------
Server2(NVMe):
Base Board Information
Manufacturer: FUJITSU
Product Name: D3417-B1
Version: S26361-D3417-B1
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Run status group 0 (all jobs):
READ: io=3072.2MB, aggrb=40296KB/s, minb=40296KB/s, maxb=40296KB/s, mint=78069msec, maxt=78069msec
WRITE: io=1023.9MB, aggrb=13429KB/s, minb=13429KB/s, maxb=13429KB/s, mint=78069msec, maxt=78069msec
Disk stats (read/write):
md1: ios=786339/298554, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=393673/300844, aggrmerge=0/0, aggrticks=543418/2294840, aggrin_queue=2838462, aggrutil=65.25%
nvme0n1: ios=180052/300844, merge=0/0, ticks=480768/1879827, in_queue=2360788, util=56.22%
nvme1n1: ios=607294/300844, merge=0/0, ticks=606068/2709853, in_queue=3316136, util=65.25%
#dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 33.2734 s, 32.3 MB/s
# hdparm -Tt /dev/nvme0n1
/dev/nvme0n1:
Timing cached reads: 33788 MB in 1.99 seconds = 16977.90 MB/sec
Timing buffered disk reads: 2204 MB in 3.00 seconds = 734.34 MB/sec
------------------------------------------------------------
------------------------------------------------------------
Server3(SSD)
Base Board Information
Manufacturer: ASUSTeK COMPUTER INC.
Product Name: Z10PA-U8 Series
Version: Rev 1.xx
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Run status group 0 (all jobs):
READ: bw=262MiB/s (275MB/s), 262MiB/s-262MiB/s (275MB/s-275MB/s), io=3070MiB (3219MB), run=11718-11718msec
WRITE: bw=87.6MiB/s (91.8MB/s), 87.6MiB/s-87.6MiB/s (91.8MB/s-91.8MB/s), io=1026MiB (1076MB), run=11718-11718msec
Disk stats (read/write):
md2: ios=769518/258504, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=392958/263227, aggrmerge=9/864, aggrticks=219931/33550, aggrin_queue=253441, aggrutil=99.06%
sda: ios=402306/263220, merge=12/871, ticks=222960/35975, in_queue=258904, util=99.04%
sdb: ios=383611/263234, merge=7/857, ticks=216902/31125, in_queue=247978, util=99.06%
#dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 5.19855 s, 207 MB/s
# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 22452 MB in 1.99 seconds = 11258.90 MB/sec
Timing buffered disk reads: 1546 MB in 3.00 seconds = 514.90 MB/sec
------------------------------------------------------------
------------------------------------------------------------
Server4(SSD)
Base Board Information
Manufacturer: FUJITSU
Product Name: D3401-H2
Version: S26361-D3401-H2
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Run status group 0 (all jobs):
READ: io=3073.6MB, aggrb=61065KB/s, minb=61065KB/s, maxb=61065KB/s, mint=51539msec, maxt=51539msec
WRITE: io=1022.5MB, aggrb=20315KB/s, minb=20315KB/s, maxb=20315KB/s, mint=51539msec, maxt=51539msec
Disk stats (read/write):
md2: ios=784514/278548, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=392439/266239, aggrmerge=1246/13570, aggrticks=822829/716748, aggrin_queue=1539532, aggrutil=91.82%
sda: ios=421561/266337, merge=1030/13473, ticks=867321/639461, in_queue=1506738, util=91.82%
sdb: ios=363317/266142, merge=1463/13667, ticks=778338/794035, in_queue=1572326, util=91.76%
# dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=dsync
1073741824 bytes (1.1 GB) copied, 10.6605 s, 101 MB/s
# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 33686 MB in 1.98 seconds = 16985.97 MB/sec
Timing buffered disk reads: 1304 MB in 3.00 seconds = 434.34 MB/sec
Как видно из результатов, команда fio показывает неутешительные результаты чтения / записи для server1 (NVMe). Но он показывает лучшие результаты для server2 (NVMe) по сравнению с SSD. Команда dd показывает неутешительные результаты чтения / записи для обоих серверов NVMe по сравнению с серверами SSD. Команда hdparm также показывает почти одинаковые результаты по производительности чтения / записи для всех серверов.
Все тесты проводились в непиковое время, когда средняя загрузка сервера составляла 0,0.
Еще одна странная проблема, с которой мы сталкиваемся на наших серверах NVMe, - это высокая нагрузка ввода-вывода, когда мы восстанавливаем резервную копию учетной записи или даже восстанавливаем zip-файл. Например, если я восстанавливаю zip-файл размером 150 МБ, средняя нагрузка на сервер превышает 20 после того, как он был полностью разархивирован, и это напрямую связано с ожиданием ввода-вывода (из команды 'top').
Нам интересно узнать, почему у NVM такая неутешительная производительность по сравнению с SSD? Влияет ли создание программных или аппаратных рейдов на производительность NVM, когда скорость чтения / записи хуже, чем у SSD? Если это так, то почему твердотельные накопители почти отлично работают с программными или аппаратными рейдами?