Trying to figure out why sometimes disk access on my test machine takes way, way too long -- 1000+ ms -- I wrote some test code. My threads ran a function that looks like this:
write = []
def writer():
while True:
start = time.time()
f = tempfile.TemporaryFile()
f.write('a' * 4000)
end = time.time()
write.append(end - start)
Compare the times for max(write) on a machine with a SATA disk and on one with parallel ATA, where the given number of threads are run for a 10 second period:
threads pata sata 1 6ms 6ms 2 400ms 11ms 4 1300ms 24ms
Ouch.
I admit I'm not a hardware nerd. Quite possibly I'm missing something, because even PATA shouldn't be THAT bad. Right? hdparm -i says for the PATA disk:
/dev/hda:
Model=ST380011A, FwRev=8.01, SerialNo=4JV59KZT
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2:
* signifies the current active mode
Comments
This isn't supported by PATA but a lot of the newer SATA chipsets support this, so a hard disk receives all blocks and can it reorder like it preferes.
Anyway - what you're measuring is maxmum latency. What about throughput?