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

Чрезвычайно низкая производительность произвольного чтения / записи на (выровненных 4096) дисках расширенного формата

На SATA 3.0, 6.0 Гбит / с

*-disk:0
       description: ATA Disk
       product: WDC WD20EFRX-68E
       vendor: Western Digital
       physical id: 0
       bus info: scsi@1:0.0.0

hw_sector_size: 512
logical_block_size: 512
physical_block_size: 4096

# parted /dev/sda print
Model: ATA WDC WD20EFRX-68E (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B

У меня есть следующие результаты fio на пустой / dev / sda3 (ext4):

fio --name=seqread --rw=read --direct=1 --ioengine=libaio --bs=8k --numjobs=8 --size=1G --runtime=600  --group_reporting
seqread IOPS=8960, BW=70.0MiB/s (73.4MB/s)(8192MiB/117028msec)

fio --name=seqwrite --rw=write --direct=1 --ioengine=libaio --bs=32k --numjobs=4 --size=2G --runtime=600 --group_reporting
seqwrite IOPS=1538, BW=48.1MiB/s (50.4MB/s)(8192MiB/170345msec); 0 zone resets

fio --name=randread --rw=randread --direct=1 --ioengine=libaio --bs=8k --numjobs=16 --size=1G --runtime=600 --group_reporting
randread IOPS=163, BW=1305KiB/s (1337kB/s)(765MiB/600078msec)

fio --name=randwrite --rw=randwrite --direct=1 --ioengine=libaio --bs=64k --numjobs=8 --size=512m --runtime=600 --group_reporting
randwrite IOPS=165, BW=10.3MiB/s (10.8MB/s)(4096MiB/395912msec); 0 zone resets

fio --name=randrw --rw=randrw --direct=1 --ioengine=libaio --bs=16k --numjobs=8 --rwmixread=90 --size=1G --runtime=600 --group_reporting
randrw read IOPS=141, BW=2258KiB/s (2313kB/s)(1324MiB/600086msec)
randrw write IOPS=15, BW=253KiB/s (259kB/s)(148MiB/600086msec); 0 zone resets

Сначала я подумал, что у меня неправильное выравнивание сектора,

Number  Start          End             Size            File system  Name              Flags
 1      1048576B       511705087B      510656512B      fat32                          boot, esp
 2      511705088B     54198796287B    53687091200B                                   raid
 3      54198796288B   215260069887B   161061273600B   ext4         Linux filesystem
 4      215260069888B  2000398917119B  1785138847232B               Linux RAID        raid

но все начальные сектора делятся на 4096, а parted говорит мне, что

(parted) align-check opt 1
1 aligned
(parted) align-check opt 2
2 aligned
(parted) align-check opt 3
3 aligned
(parted) align-check opt 4
4 aligned

SMART выглядит хорошо:

Эти результаты fio аналогичны системе, работающей на Debian 10 и Компакт-диск Arch Linux Live. Это не самые быстрые спиннеры, поэтому я могу жить с последовательными результатами (хотя они должны быть выше), но случайные результаты R, W и RW неприемлемы.

Ядро - 5.0.x (5.2.x на live CD), а планировщик - по умолчанию (и рекомендуемые)

# cat /sys/block/sda/queue/scheduler
[mq-deadline] none

Изменение планировщика на BFQ не помогло.

AFAIK выравнивание секторов в порядке, но либо мне чего-то не хватает, либо у меня есть неисправные диски (новые и на гарантии). <200 IOPS и <2,5 МБ / с временами выводят систему из строя.

Я здесь в растерянности. Как это исправить? Или у меня неисправные диски (маловероятно, поскольку это два одинаковых диска с одинаковыми результатами)?

Кажется, что вы выполняете ввод-вывод в файловой системе с вашими заданиями fio. Если так, это добавляет еще один фактор, мешающий вашим результатам. ПРЕДУПРЕЖДЕНИЕ - выполнение ввода-вывода непосредственно на дисковый узел может УНИЧТОЖИТЬ файловую систему и данные, которые уже там находятся. так что будьте осторожны, если вы решите перейти непосредственно к /dev/sda!

Вы собираетесь работать напрямую, используя максимум 8 незавершенных операций ввода-вывода. Вероятно, это слишком мало, чтобы обеспечить максимальную производительность вашего диска (диски SATA обычно могут стоять в очереди около 32 невыполненных операций ввода-вывода). Вы также используете несколько процессов для отправки ввода-вывода, что, вероятно, повлечет за собой некоторые накладные расходы по сравнению с отправкой ввода-вывода асинхронно.

Резюме: не могу сказать, неисправны ли диски, потому что ваши задания fio выглядят странно. Возможно, отправлено недостаточно операций ввода-вывода (fio упоминает статистику диска, которую вы здесь не указали - проверьте, как выглядит использование вашего диска). Кроме того, такие вещи, как кеши на самом диске, могут означать, что вы в конечном итоге получите искаженный результат из-за того, что область, в которой вы работаете, настолько мала, и несколько заданий работают на одной и той же области диска, поэтому будьте осторожны (я бы предположил это было бы более вероятно в «последовательных» случаях).