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

NVME против SSD: проблемы с производительностью чтения / записи

Мы арендовали несколько серверов у 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? Если это так, то почему твердотельные накопители почти отлично работают с программными или аппаратными рейдами?