Por que as leituras em cache são mais lentas do que as leituras de disco em hdparm --direct?

1

Estou tentando interpretar esse resultado do 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

Eu não entendo como as leituras em cache podem ser mais lentas que as leituras diretas do disco. Se eu derrubar o --direct, recebo o que eu esperaria: as leituras de disco são mais lentas do que as armazenadas em cache:

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

(Embora já esteja escrito "leituras de disco em buffer").

Alguém pode me explicar o que está acontecendo?

    
por Alejandro DC 03.08.2017 / 16:55

1 resposta

2

Por hdparm man page:

--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.

Isso explica por que hdparm -t --direct pode ser mais rápido que hdparm -t . Ele também diz que --direct se aplica apenas ao teste -t , não ao teste -T que não deve envolver o disco (veja abaixo).

-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.

Eu acho que -T funciona lendo a mesma parte em cache do disco. Mas o seu --direct impede isso. Então, logicamente, você deve ter os mesmos resultados com -t --direct com -T --direct .

    
por 03.08.2017 / 18:48

Tags