Почему кешированные чтения медленнее, чем чтение дисков в hdparm -direct?

Я пытаюсь интерпретировать этот результат hdparm:

janus@behemoth ~ $ sudo hdparm -Tt --direct /dev/nvme0n1 /dev/nvme0n1: Timing O_DIRECT cached reads: 2548 MB in 2.00 seconds = 1273.69 MB/sec Timing O_DIRECT disk reads: 4188 MB in 3.00 seconds = 1395.36 MB/sec 

Я не понимаю, как кэшированные чтения могут быть медленнее чтения прямого диска. Если я опустил -direct, я получаю то, что я ожидал бы: диски будут медленнее кэшированных:

 janus@behemoth ~ $ sudo hdparm -Tt /dev/nvme0n1 /dev/nvme0n1: Timing cached reads: 22064 MB in 2.00 seconds = 11042.86 MB/sec Timing buffered disk reads: 2330 MB in 3.00 seconds = 776.06 MB/sec 

(Хотя он говорит, что «буферизованный диск читает» сейчас).

Может кто-нибудь объяснить мне, что происходит?

One Solution collect form web for “Почему кешированные чтения медленнее, чем чтение дисков в hdparm -direct?”

На странице man hdparm :

 --direct Use the kernel´s "O_DIRECT" flag when performing a -t timing test. This bypasses the page cache, causing the reads to go directly from the drive into hdparm's buffers, using so-called "raw" I/O. In many cases, this can produce results that appear much faster than the usual page cache method, giving a better indication of raw device and driver performance. 

Это объясняет, почему hdparm -t --direct может быть быстрее hdparm -t . В нем также говорится, что --direct применяется только к тесту -t , а не к тесту -T который не должен включать диск (см. Ниже).

 -T Perform timings of cache reads for benchmark and comparison pur‐ poses. For meaningful results, this operation should be repeated 2-3 times on an otherwise inactive system (no other active processes) with at least a couple of megabytes of free memory. This displays the speed of reading directly from the Linux buffer cache without disk access. This measurement is essentially an indication of the throughput of the processor, cache, and memory of the system under test. 

Я думаю, что -T работает, читая ту же кешированную часть диска. Но ваш --direct предотвращает это. Итак, логически, вы должны иметь те же результаты с -t --direct что и с -T --direct .

  • Создайте двоичный файл ввода из hdparm -read-сектора
  • Жесткий диск игнорирует настройки hdparm
  • Есть ли hpdarm -Y, чтобы остановить IO на моем жестком диске?
  • Отключение DMA в Linux по-прежнему поддерживается
  • Проблема с HDD spindown
  • Принудительная перечитание таблицы разделов: разница между BLKRRPART и BLKPG ioctl? (Linux)
  • Как проверить, является ли диск SSHD (гибридный диск), используя команды ATA
  • Ubuntu DMA Auto Активирует флаг оптимизации
  • Можно ли использовать флаги -y и -Y для hdparm?
  • График Gnome не может запускать hdparm
  • hdparm не показывает раздел «безопасность»
  • Linux и Unix - лучшая ОС в мире.