Re: [PNG] New tool to identify decode speed targets

Also, whoa. I was not expecting this (coloring to highlight comments):

Your E drive...
Open delay: 92800ns <- This is how long it took to just tell Windows we're
opening the file
Open to read delay: 740200ns <- This is time between the open and starting
to issue reads. Right now it is slow because I spawn the worker threads in
this time. I need to do that before.
Buffer 0 - Read issue delay: 100ns - Issue to completion delay: 86554400ns

                         ^- THIS ONE (more below)
                                              ^- This is from start of read
issue to *this* buffer's read issue


0.86s from issuing the read to when the data came back seems weird. And
that's on the first buffer.
Maybe the drive was in a low power state? And Windows didn't wake the drive
when we opened the file, just when we actually read.

On Mon, Sep 29, 2025 at 12:04 AM Chris Blume (ProgramMax) <
programmax@gmail.com> wrote:

> Yeah, I was able to confirm that I was doing read buffer sizes incorrectly.
>
> I was using FILE_STORAGE_INFO.PhysicalBytesPerSectorForPerformance
> <https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_storage_info>
> .
> At first, I checked that I am indeed able to use any multiple of that
> buffer size. Then I confirmed I can use any buffer size (including
> non-multiples), even when using unbuffered IO (not using OS buffering, that
> is). Then I saw in the docs that value is specifically for writes??
>
> I meant to push a bit on this but got sick today.
> I'll follow up soon. Once I can match CrystalDisk speeds on large files,
> I'll feel confident it is working correctly. Right now, I'm confident it
> isn't.
>
> On Sun, Sep 28, 2025 at 10:31 AM Chris Lilley <chris@w3.org> wrote:
>
>> I tested on my laptop, which is a couple of years old now:
>>
>> Dell XPS 9720, 12th Gen i9-12900HK, 64Gb DDR5 ram.
>> Two SSD disks.
>>
>> Drive C: (1Tb NVMe PM9A1 Samsung (stock drive from Dell))
>>
>> PS C:\Users\chris\Documents\GitHub\FileReadSpeedTest\Test Data>
>> FileReadSpeedTest '.\crystaldiskmark nvme ssd.png'
>> Worker thread count: 6
>> Clock is steady
>> Buffer size: 512
>> Open delay: 229400ns
>> Open to read delay: 1009100ns
>> Buffer 0 - Read issue delay: 100ns - Issue to completion delay: 142000ns
>> Buffer 1 - Read issue delay: 46700ns - Issue to completion delay: 108800ns
>> Buffer 2 - Read issue delay: 62900ns - Issue to completion delay: 100500ns
>> Buffer 3 - Read issue delay: 75000ns - Issue to completion delay: 152500ns
>> Buffer 4 - Read issue delay: 147700ns - Issue to completion delay: 93500ns
>> Buffer 5 - Read issue delay: 159200ns - Issue to completion delay:
>> 106000ns
>> Buffer 6 - Read issue delay: 169600ns - Issue to completion delay:
>> 117900ns
>> Buffer 7 - Read issue delay: 180200ns - Issue to completion delay:
>> 128900ns
>> Buffer 8 - Read issue delay: 212300ns - Issue to completion delay:
>> 226900ns
>> Buffer 9 - Read issue delay: 233900ns - Issue to completion delay:
>> 101100ns
>> Buffer 10 - Read issue delay: 256300ns - Issue to completion delay:
>> 113500ns
>> Buffer 11 - Read issue delay: 299200ns - Issue to completion delay:
>> 102400ns
>> Buffer 12 - Read issue delay: 321800ns - Issue to completion delay:
>> 106400ns
>> Buffer 13 - Read issue delay: 332900ns - Issue to completion delay:
>> 119000ns
>> Buffer 14 - Read issue delay: 353500ns - Issue to completion delay:
>> 117400ns
>> Buffer 15 - Read issue delay: 367500ns - Issue to completion delay:
>> 122200ns
>> Buffer 16 - Read issue delay: 408800ns - Issue to completion delay:
>> 105600ns
>> Buffer 17 - Read issue delay: 433600ns - Issue to completion delay:
>> 103200ns
>> Buffer 18 - Read issue delay: 456100ns - Issue to completion delay:
>> 101400ns
>> Buffer 19 - Read issue delay: 477300ns - Issue to completion delay:
>> 103200ns
>> Buffer 20 - Read issue delay: 498200ns - Issue to completion delay:
>> 103100ns
>> Buffer 21 - Read issue delay: 508900ns - Issue to completion delay:
>> 119500ns
>> Buffer 22 - Read issue delay: 531200ns - Issue to completion delay:
>> 118800ns
>> Buffer 23 - Read issue delay: 551500ns - Issue to completion delay:
>> 118600ns
>> Buffer 24 - Read issue delay: 573100ns - Issue to completion delay:
>> 120800ns
>> Buffer 25 - Read issue delay: 593900ns - Issue to completion delay:
>> 123900ns
>> Buffer 26 - Read issue delay: 615200ns - Issue to completion delay:
>> 181900ns
>> Buffer 27 - Read issue delay: 637200ns - Issue to completion delay:
>> 124500ns
>> Buffer 28 - Read issue delay: 658500ns - Issue to completion delay:
>> 126200ns
>> Buffer 29 - Read issue delay: 679200ns - Issue to completion delay:
>> 130600ns
>> Buffer 30 - Read issue delay: 701900ns - Issue to completion delay:
>> 128600ns
>> Buffer 31 - Read issue delay: 723600ns - Issue to completion delay:
>> 129100ns
>> Buffer 32 - Read issue delay: 735300ns - Issue to completion delay:
>> 144500ns
>> Buffer 33 - Read issue delay: 758100ns - Issue to completion delay:
>> 230300ns
>> Buffer 34 - Read issue delay: 779600ns - Issue to completion delay:
>> 141600ns
>> Buffer 35 - Read issue delay: 802500ns - Issue to completion delay:
>> 139800ns
>> Buffer 36 - Read issue delay: 824100ns - Issue to completion delay:
>> 214400ns
>> Buffer 37 - Read issue delay: 844600ns - Issue to completion delay:
>> 287700ns
>> Buffer 38 - Read issue delay: 865300ns - Issue to completion delay:
>> 147300ns
>> Buffer 39 - Read issue delay: 886100ns - Issue to completion delay:
>> 149400ns
>> Buffer 40 - Read issue delay: 910900ns - Issue to completion delay:
>> 151600ns
>> Buffer 41 - Read issue delay: 932600ns - Issue to completion delay:
>> 149100ns
>> Buffer 42 - Read issue delay: 953000ns - Issue to completion delay:
>> 152400ns
>> Buffer 43 - Read issue delay: 976600ns - Issue to completion delay:
>> 156600ns
>> Buffer 44 - Read issue delay: 999200ns - Issue to completion delay:
>> 156100ns
>> Buffer 45 - Read issue delay: 1024100ns - Issue to completion delay:
>> 352400ns
>> Buffer 46 - Read issue delay: 1045400ns - Issue to completion delay:
>> 421000ns
>> Buffer 47 - Read issue delay: 1066200ns - Issue to completion delay:
>> 300400ns
>> Buffer 48 - Read issue delay: 1087700ns - Issue to completion delay:
>> 296800ns
>> Buffer 49 - Read issue delay: 1099100ns - Issue to completion delay:
>> 308100ns
>> Buffer 50 - Read issue delay: 1120500ns - Issue to completion delay:
>> 445400ns
>> Buffer 51 - Read issue delay: 1141000ns - Issue to completion delay:
>> 311500ns
>> Buffer 52 - Read issue delay: 1154200ns - Issue to completion delay:
>> 320200ns
>> Buffer 53 - Read issue delay: 1166100ns - Issue to completion delay:
>> 330100ns
>> Buffer 54 - Read issue delay: 1183400ns - Issue to completion delay:
>> 334300ns
>> Buffer 55 - Read issue delay: 1204900ns - Issue to completion delay:
>> 413600ns
>> Buffer 56 - Read issue delay: 1219900ns - Issue to completion delay:
>> 326200ns
>> Buffer 57 - Read issue delay: 1236000ns - Issue to completion delay:
>> 332100ns
>> Buffer 58 - Read issue delay: 1253600ns - Issue to completion delay:
>> 335800ns
>> Buffer 59 - Read issue delay: 1269900ns - Issue to completion delay:
>> 343100ns
>> Buffer 60 - Read issue delay: 1285800ns - Issue to completion delay:
>> 355100ns
>> Buffer 61 - Read issue delay: 1351100ns - Issue to completion delay:
>> 313600ns
>> Buffer 62 - Read issue delay: 1371300ns - Issue to completion delay:
>> 311600ns
>> Buffer 63 - Read issue delay: 1382400ns - Issue to completion delay:
>> 323800ns
>> Buffer 64 - Read issue delay: 1400500ns - Issue to completion delay:
>> 332800ns
>> Buffer 65 - Read issue delay: 1419600ns - Issue to completion delay:
>> 337500ns
>> Buffer 66 - Read issue delay: 1438200ns - Issue to completion delay:
>> 340900ns
>> Buffer 67 - Read issue delay: 1460600ns - Issue to completion delay:
>> 358600ns
>> Buffer 68 - Read issue delay: 1470800ns - Issue to completion delay:
>> 347100ns
>> Buffer 69 - Read issue delay: 1489000ns - Issue to completion delay:
>> 343600ns
>> Buffer 70 - Read issue delay: 1507100ns - Issue to completion delay:
>> 357600ns
>> Buffer 71 - Read issue delay: 1534100ns - Issue to completion delay:
>> 349400ns
>> Buffer 72 - Read issue delay: 1553200ns - Issue to completion delay:
>> 84400ns
>> Buffer 73 - Read issue delay: 1563600ns - Issue to completion delay:
>> 172800ns
>> Buffer 74 - Read issue delay: 1582300ns - Issue to completion delay:
>> 108200ns
>> Buffer 75 - Read issue delay: 1600700ns - Issue to completion delay:
>> 110900ns
>> Buffer 76 - Read issue delay: 1610200ns - Issue to completion delay:
>> 116100ns
>> Buffer 77 - Read issue delay: 1633900ns - Issue to completion delay:
>> 110500ns
>> Buffer 78 - Read issue delay: 1672400ns - Issue to completion delay:
>> 101600ns
>> Buffer 79 - Read issue delay: 1698600ns - Issue to completion delay:
>> 95600ns
>> Buffer 80 - Read issue delay: 1723600ns - Issue to completion delay:
>> 122200ns
>> Buffer 81 - Read issue delay: 1762500ns - Issue to completion delay:
>> 94400ns
>> Buffer 82 - Read issue delay: 1787300ns - Issue to completion delay:
>> 99900ns
>> Buffer 83 - Read issue delay: 1810200ns - Issue to completion delay:
>> 102900ns
>> Buffer 84 - Read issue delay: 1828300ns - Issue to completion delay:
>> 95400ns
>> Buffer 85 - Read issue delay: 1854200ns - Issue to completion delay:
>> 93000ns
>> Buffer 86 - Read issue delay: 1878400ns - Issue to completion delay:
>> 88200ns
>> Buffer 87 - Read issue delay: 1897100ns - Issue to completion delay:
>> 100200ns
>> Buffer 88 - Read issue delay: 1914900ns - Issue to completion delay:
>> 101800ns
>> Buffer 89 - Read issue delay: 1933600ns - Issue to completion delay:
>> 104800ns
>> Buffer 90 - Read issue delay: 1943800ns - Issue to completion delay:
>> 116100ns
>> Buffer 91 - Read issue delay: 1962200ns - Issue to completion delay:
>> 120500ns
>> Buffer 92 - Read issue delay: 1980300ns - Issue to completion delay:
>> 124200ns
>> Buffer 93 - Read issue delay: 1990000ns - Issue to completion delay:
>> 136500ns
>> Buffer 94 - Read issue delay: 2008800ns - Issue to completion delay:
>> 141600ns
>> Buffer 95 - Read issue delay: 2028200ns - Issue to completion delay:
>> 143100ns
>> Buffer 96 - Read issue delay: 2044900ns - Issue to completion delay:
>> 148900ns
>> Buffer 97 - Read issue delay: 2054900ns - Issue to completion delay:
>> 162300ns
>> Buffer 98 - Read issue delay: 2072800ns - Issue to completion delay:
>> 165600ns
>> Buffer 99 - Read issue delay: 2094000ns - Issue to completion delay:
>> 167500ns
>> Buffer 100 - Read issue delay: 2103600ns - Issue to completion delay:
>> 179000ns
>> Buffer 101 - Read issue delay: 2126300ns - Issue to completion delay:
>> 211400ns
>> Buffer 102 - Read issue delay: 2145300ns - Issue to completion delay:
>> 183400ns
>> Buffer 103 - Read issue delay: 2163400ns - Issue to completion delay:
>> 213400ns
>> Buffer 104 - Read issue delay: 2183300ns - Issue to completion delay:
>> 199300ns
>> Buffer 105 - Read issue delay: 2192900ns - Issue to completion delay:
>> 162900ns
>> Buffer 106 - Read issue delay: 2215500ns - Issue to completion delay:
>> 204700ns
>> Buffer 107 - Read issue delay: 2233500ns - Issue to completion delay:
>> 208700ns
>> Buffer 108 - Read issue delay: 2252500ns - Issue to completion delay:
>> 209000ns
>> Buffer 109 - Read issue delay: 2271200ns - Issue to completion delay:
>> 335600ns
>> Buffer 110 - Read issue delay: 2281500ns - Issue to completion delay:
>> 318400ns
>> Buffer 111 - Read issue delay: 2301400ns - Issue to completion delay:
>> 502400ns
>> Buffer 112 - Read issue delay: 2320300ns - Issue to completion delay:
>> 95200ns
>> Buffer 113 - Read issue delay: 2339600ns - Issue to completion delay:
>> 118700ns
>>
>> Disk E: (D: and E: are partitions on a 2Tb NVMe Seagate FireCuda
>> ZP2000GM30013)
>>
>> PS E:\Test Data> FileReadSpeedTest '.\crystaldiskmark nvme ssd.png'
>> Worker thread count: 6
>> Clock is steady
>> Buffer size: 512
>> Open delay: 92800ns
>> Open to read delay: 740200ns
>> Buffer 0 - Read issue delay: 100ns - Issue to completion delay: 86554400ns
>> Buffer 1 - Read issue delay: 73300ns - Issue to completion delay:
>> 86443200ns
>> Buffer 2 - Read issue delay: 89700ns - Issue to completion delay:
>> 86286500ns
>> Buffer 3 - Read issue delay: 101900ns - Issue to completion delay:
>> 86296000ns
>> Buffer 4 - Read issue delay: 131300ns - Issue to completion delay:
>> 86413500ns
>> Buffer 5 - Read issue delay: 145300ns - Issue to completion delay:
>> 86577300ns
>> Buffer 6 - Read issue delay: 160900ns - Issue to completion delay:
>> 86331200ns
>> Buffer 7 - Read issue delay: 177700ns - Issue to completion delay:
>> 86872200ns
>> Buffer 8 - Read issue delay: 190200ns - Issue to completion delay:
>> 86602100ns
>> Buffer 9 - Read issue delay: 208000ns - Issue to completion delay:
>> 86819800ns
>> Buffer 10 - Read issue delay: 224900ns - Issue to completion delay:
>> 87068600ns
>> Buffer 11 - Read issue delay: 237300ns - Issue to completion delay:
>> 87051700ns
>> Buffer 12 - Read issue delay: 255100ns - Issue to completion delay:
>> 86892800ns
>> Buffer 13 - Read issue delay: 269700ns - Issue to completion delay:
>> 87075200ns
>> Buffer 14 - Read issue delay: 280400ns - Issue to completion delay:
>> 87179800ns
>> Buffer 15 - Read issue delay: 293600ns - Issue to completion delay:
>> 87354800ns
>> Buffer 16 - Read issue delay: 306200ns - Issue to completion delay:
>> 87297400ns
>> Buffer 17 - Read issue delay: 317300ns - Issue to completion delay:
>> 87524800ns
>> Buffer 18 - Read issue delay: 329900ns - Issue to completion delay:
>> 87433600ns
>> Buffer 19 - Read issue delay: 343200ns - Issue to completion delay:
>> 87455000ns
>> Buffer 20 - Read issue delay: 355200ns - Issue to completion delay:
>> 87613800ns
>> Buffer 21 - Read issue delay: 368800ns - Issue to completion delay:
>> 88039000ns
>> Buffer 22 - Read issue delay: 380800ns - Issue to completion delay:
>> 87908000ns
>> Buffer 23 - Read issue delay: 391100ns - Issue to completion delay:
>> 87971200ns
>> Buffer 24 - Read issue delay: 403300ns - Issue to completion delay:
>> 87870800ns
>> Buffer 25 - Read issue delay: 416200ns - Issue to completion delay:
>> 87816700ns
>> Buffer 26 - Read issue delay: 427800ns - Issue to completion delay:
>> 87685300ns
>> Buffer 27 - Read issue delay: 443200ns - Issue to completion delay:
>> 87811100ns
>> Buffer 28 - Read issue delay: 456700ns - Issue to completion delay:
>> 87682600ns
>> Buffer 29 - Read issue delay: 467800ns - Issue to completion delay:
>> 87583500ns
>> Buffer 30 - Read issue delay: 480100ns - Issue to completion delay:
>> 87518600ns
>> Buffer 31 - Read issue delay: 493500ns - Issue to completion delay:
>> 87727200ns
>> Buffer 32 - Read issue delay: 503800ns - Issue to completion delay:
>> 89320200ns
>> Buffer 33 - Read issue delay: 518100ns - Issue to completion delay:
>> 89303900ns
>> Buffer 34 - Read issue delay: 533700ns - Issue to completion delay:
>> 89251700ns
>> Buffer 35 - Read issue delay: 549600ns - Issue to completion delay:
>> 89216900ns
>> Buffer 36 - Read issue delay: 566600ns - Issue to completion delay:
>> 89181200ns
>> Buffer 37 - Read issue delay: 579400ns - Issue to completion delay:
>> 89148600ns
>> Buffer 38 - Read issue delay: 590900ns - Issue to completion delay:
>> 89204900ns
>> Buffer 39 - Read issue delay: 604700ns - Issue to completion delay:
>> 89104600ns
>> Buffer 40 - Read issue delay: 616600ns - Issue to completion delay:
>> 89069300ns
>> Buffer 41 - Read issue delay: 627600ns - Issue to completion delay:
>> 89065400ns
>> Buffer 42 - Read issue delay: 779700ns - Issue to completion delay:
>> 88885200ns
>> Buffer 43 - Read issue delay: 793400ns - Issue to completion delay:
>> 88855500ns
>> Buffer 44 - Read issue delay: 804600ns - Issue to completion delay:
>> 88833200ns
>> Buffer 45 - Read issue delay: 817900ns - Issue to completion delay:
>> 88821600ns
>> Buffer 46 - Read issue delay: 831400ns - Issue to completion delay:
>> 88780400ns
>> Buffer 47 - Read issue delay: 842900ns - Issue to completion delay:
>> 88775600ns
>> Buffer 48 - Read issue delay: 854700ns - Issue to completion delay:
>> 88733300ns
>> Buffer 49 - Read issue delay: 866800ns - Issue to completion delay:
>> 88715100ns
>> Buffer 50 - Read issue delay: 878100ns - Issue to completion delay:
>> 88684100ns
>> Buffer 51 - Read issue delay: 891300ns - Issue to completion delay:
>> 88642600ns
>> Buffer 52 - Read issue delay: 903400ns - Issue to completion delay:
>> 88554400ns
>> Buffer 53 - Read issue delay: 915000ns - Issue to completion delay:
>> 88520300ns
>> Buffer 54 - Read issue delay: 927400ns - Issue to completion delay:
>> 88488900ns
>> Buffer 55 - Read issue delay: 1544000ns - Issue to completion delay:
>> 87853500ns
>> Buffer 56 - Read issue delay: 1556400ns - Issue to completion delay:
>> 87822400ns
>> Buffer 57 - Read issue delay: 1571200ns - Issue to completion delay:
>> 87787800ns
>> Buffer 58 - Read issue delay: 1583900ns - Issue to completion delay:
>> 87755400ns
>> Buffer 59 - Read issue delay: 1595800ns - Issue to completion delay:
>> 87724500ns
>> Buffer 60 - Read issue delay: 1608900ns - Issue to completion delay:
>> 87692300ns
>> Buffer 61 - Read issue delay: 1621800ns - Issue to completion delay:
>> 87661000ns
>> Buffer 62 - Read issue delay: 1633300ns - Issue to completion delay:
>> 87862100ns
>> Buffer 63 - Read issue delay: 1647100ns - Issue to completion delay:
>> 87604000ns
>> Buffer 64 - Read issue delay: 1659400ns - Issue to completion delay:
>> 87585700ns
>> Buffer 65 - Read issue delay: 1671600ns - Issue to completion delay:
>> 87597300ns
>> Buffer 66 - Read issue delay: 1684800ns - Issue to completion delay:
>> 87535600ns
>> Buffer 67 - Read issue delay: 1697100ns - Issue to completion delay:
>> 87508500ns
>> Buffer 68 - Read issue delay: 1709000ns - Issue to completion delay:
>> 87474400ns
>> Buffer 69 - Read issue delay: 1721500ns - Issue to completion delay:
>> 87491700ns
>> Buffer 70 - Read issue delay: 1733300ns - Issue to completion delay:
>> 87426200ns
>> Buffer 71 - Read issue delay: 1744800ns - Issue to completion delay:
>> 87393300ns
>> Buffer 72 - Read issue delay: 1756200ns - Issue to completion delay:
>> 87347800ns
>> Buffer 73 - Read issue delay: 1768100ns - Issue to completion delay:
>> 87315800ns
>> Buffer 74 - Read issue delay: 1779900ns - Issue to completion delay:
>> 87285300ns
>> Buffer 75 - Read issue delay: 1792400ns - Issue to completion delay:
>> 87444300ns
>> Buffer 76 - Read issue delay: 1804000ns - Issue to completion delay:
>> 87267700ns
>> Buffer 77 - Read issue delay: 1815100ns - Issue to completion delay:
>> 87228600ns
>> Buffer 78 - Read issue delay: 1826700ns - Issue to completion delay:
>> 87190800ns
>> Buffer 79 - Read issue delay: 1839800ns - Issue to completion delay:
>> 87187400ns
>> Buffer 80 - Read issue delay: 1851400ns - Issue to completion delay:
>> 87135400ns
>> Buffer 81 - Read issue delay: 1863700ns - Issue to completion delay:
>> 87041800ns
>> Buffer 82 - Read issue delay: 1876400ns - Issue to completion delay:
>> 86996700ns
>> Buffer 83 - Read issue delay: 1887600ns - Issue to completion delay:
>> 86999400ns
>> Buffer 84 - Read issue delay: 1899800ns - Issue to completion delay:
>> 86946600ns
>> Buffer 85 - Read issue delay: 1911600ns - Issue to completion delay:
>> 86923800ns
>> Buffer 86 - Read issue delay: 1922000ns - Issue to completion delay:
>> 86816700ns
>> Buffer 87 - Read issue delay: 1934200ns - Issue to completion delay:
>> 86750400ns
>> Buffer 88 - Read issue delay: 1946000ns - Issue to completion delay:
>> 84927600ns
>> Buffer 89 - Read issue delay: 1956500ns - Issue to completion delay:
>> 84811300ns
>> Buffer 90 - Read issue delay: 1968200ns - Issue to completion delay:
>> 84941500ns
>> Buffer 91 - Read issue delay: 1979500ns - Issue to completion delay:
>> 85109100ns
>> Buffer 92 - Read issue delay: 1990100ns - Issue to completion delay:
>> 85260200ns
>> Buffer 93 - Read issue delay: 2002400ns - Issue to completion delay:
>> 85266500ns
>> Buffer 94 - Read issue delay: 2015100ns - Issue to completion delay:
>> 85142900ns
>> Buffer 95 - Read issue delay: 2029500ns - Issue to completion delay:
>> 85384900ns
>> Buffer 96 - Read issue delay: 2042000ns - Issue to completion delay:
>> 85487900ns
>> Buffer 97 - Read issue delay: 2054300ns - Issue to completion delay:
>> 85668700ns
>> Buffer 98 - Read issue delay: 2255700ns - Issue to completion delay:
>> 85606800ns
>> Buffer 99 - Read issue delay: 2269400ns - Issue to completion delay:
>> 85515700ns
>> Buffer 100 - Read issue delay: 2281200ns - Issue to completion delay:
>> 85704100ns
>> Buffer 101 - Read issue delay: 2292000ns - Issue to completion delay:
>> 85765900ns
>> Buffer 102 - Read issue delay: 2306100ns - Issue to completion delay:
>> 86201500ns
>> Buffer 103 - Read issue delay: 2318800ns - Issue to completion delay:
>> 86170400ns
>> Buffer 104 - Read issue delay: 2329100ns - Issue to completion delay:
>> 86079800ns
>> Buffer 105 - Read issue delay: 2340600ns - Issue to completion delay:
>> 85972700ns
>> Buffer 106 - Read issue delay: 2353100ns - Issue to completion delay:
>> 85594300ns
>> Buffer 107 - Read issue delay: 2365000ns - Issue to completion delay:
>> 86082600ns
>> Buffer 108 - Read issue delay: 2377500ns - Issue to completion delay:
>> 86156500ns
>> Buffer 109 - Read issue delay: 2390200ns - Issue to completion delay:
>> 86272000ns
>> Buffer 110 - Read issue delay: 2400300ns - Issue to completion delay:
>> 86392800ns
>> Buffer 111 - Read issue delay: 2412200ns - Issue to completion delay:
>> 86181900ns
>> Buffer 112 - Read issue delay: 2423800ns - Issue to completion delay:
>> 86238900ns
>> Buffer 113 - Read issue delay: 2434200ns - Issue to completion delay:
>> 86123900ns
>> On 2025-09-25 03:44, Chris Blume (ProgramMax) wrote:
>>
>> Hello everyone,
>>
>> I just uploaded a first pass at a new tool to help us in our effort to
>> improve PNG decoding,  FileReadSpeedTest
>> <https://github.com/ProgramMax/FileReadSpeedTest>.
>>
>> It works by finding the optimal buffer size for a given drive & file
>> system, then loads a file buffer-by-buffer. It reports the time each buffer
>> arrives. This allows us to "replay" file loading for performance testing.
>> (The drive and OS will cache data, changing the load speeds & performance
>> results. We can instead feed the buffers to the test rig at known good
>> intervals to keep tests consistent.)
>>
>> This is how the hardware works under the hood. It does not load an entire
>> file in one go. This also gives us a target for our decode speeds. In an
>> ideal world, we can decode a buffer faster than the next buffer arrives.
>> That would mean the decode speed is limited by the drive, not the
>> format/algorithm.
>>
>> I tested on my laptop, which has a WD_BLACK SN770 2TB drive. That is a
>> seriously fast drive. Advertised speeds are "up to 5,150 MB/s". I was able
>> to reach 5,259 MB/s. It is formatted with NTFS (BitLocker encrypted).
>> Windows reports the ideal buffer size is 4096 bytes.
>>
>> A buffer load took ~10 microseconds. So a simple, not-quite-accurate
>> reaction is "Our format should decode 4096 bytes in ~10 microseconds for
>> this machine".
>> For a machine with a more normal drive, we'll have even more time.
>>
>> (In order to be more accurate, I'll need to also measure IO command
>> queuing and OS call overhead. That'll come soon.)
>>
>> An important thing to note is this is a moving target. CPU speeds have
>> leveled out, but drive speeds are still increasing. If we want to target
>> crazy fast server hardware, that's a different target. Additionally, that
>> 4096 bytes in ~10 microseconds assumes a single-threaded workload. If we
>> were able to spread the work across 8 threads, we would have ~80
>> microseconds. But with command queuing, multiple threads worth of buffered
>> data might arrive at nearly the same time, reducing the available
>> per-thread decode time back down.
>>
>> I'll work on improving the tool and gathering more sample data for us to
>> replay under various conditions. I'll also add Linux and Mac support when I
>> can.
>>
>> --
>> Chris Lilley
>> @svgeesus@mastodon.scot
>> W3C Distinguished Expert, Color, Graphics & Fonts
>> W3C Technical Programming Team, Core Web Design
>>
>>

Received on Monday, 29 September 2025 04:26:35 UTC