Very slow random read/write on HDD

Solution 1:

That is perfectly normal for random I/O performance on a 5400 rpm disk. A 5400 rpm disk can manage about 90 IOPS because the required sector will only go under the head 90 times per second (5400 times per minute).

So with 4KB blocks, that is 4KB * 90 = 360KB/s.

This is broadly in line with what you are seeing.

Solution 2:

Your HDD is WD5000LPVT, a 2.5" 500GB 5400rpm model.

Looking at UserBenchmark your results are not abnormal. Random read results should be between 0.1-0.5 MB/s, yours are pretty good. UserBenchmark random writes are 0.76-2.3 MB/s, yours ~0.85 is on the low side but not out of range.

These values seem to be normal for this disk model. HDDs usually have terrible random access results, especially 5400rpm ones.

Solution 3:

A hard disk drive is made of platters that turn at the specified speed, and read-write heads which move along the radius of the platter.

To read a random block on the disk, two things need to happen:

  • The head needs to be moved to the right "track" along the radius of the platter (seek time).

  • The platter needs to rotate until the right "sector" or block is under the read/write head (rotational latency).

Average random seek times are usually somewhere between 9 and 15 ms, depending on the disk. For this specific disk, it's 12 ms.

Average random rotational latency is directly dependent on drive rotation speed. Disks come in a variety of speeds, from 5400 RPM (revolutions per minute), which is quite standard for the smaller consumer 2.5" disks, up to 15000 RPM for high-end enterprise-grade disks.

At 5400 RPM (which means 90 revolutions per second), it takes on average 5.6 ms for the right block to be under the read-write head.

That means that on average, reading a random block will take 17.6 ms (not counting command processing and the data transfer itself, but that's usually peanuts in comparison).

Which in turn means a bit under 57 reads per second. With 4K blocks as used by the benchmark, that's 228 KB/s, or 0.228 MB/s. So the results of the benchmark are actually slightly better than theory!

That's for the RND4K Q1T1 read test (bottom left of your first screenshot), which is the ultimate random read test, with each read waiting for its results before getting to the next one.

The Q32T1 test leverages queuing: multiple read commands (up to 32) are sent to the drive before waiting for the results (and as soon as a result comes back, a new read is requested, maintaining a queue of 32 pending reads).

This enables the drive to reorder the reads so they're less random. For instance, the seek time is shorter when going from track 1 to track 2 than from the first to the last, so ordering the reads on increasing tracks saves time. It also helps if several blocks are read from the same track (no seeking, and you can read the first block coming under the read/write head).

The write tests are usually flawed, because disks will cache writes and say "yes yes I got it" even if it's not been written to disk yet, so they're a lot more difficult to judge accurately.

So:

  • Your disk seems to operate within specs
  • Your disk, like all consumer-grade laptop HDDs, is slow. No surprise here.
  • If you want better seek (random) performance, nothing beats an SSD.