Почему кешированные чтения медленнее, чем чтение дисков в 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 при загрузке с помощью правила udev не работает
  • Есть ли hpdarm -Y, чтобы остановить IO на моем жестком диске?
  • Диски (в корпусе USB) продолжают просыпаться, даже если они не установлены
  • Ubuntu DMA Auto Активирует флаг оптимизации
  • CentOS 5 - hdparm - как установить режим DMA
  • График Gnome не может запускать hdparm
  • Флэш-память и набор только для чтения, это вирус?
  • Отключение DMA в Linux по-прежнему поддерживается
  • Можно ли использовать флаги -y и -Y для hdparm?
  • hdparm -S60 / dev / sda (работает нормально, но каждые 30 минут HDD просыпается и вращается, хотя и не используется).
  • Linux и Unix - лучшая ОС в мире.