- From: Chris Lilley <chris@w3.org>
- Date: Sun, 28 Sep 2025 17:31:32 +0300
- To: public-png@w3.org
- Message-ID: <7aab1891-413b-475e-ac2e-8cdf939dde86@w3.org>
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
Attachments
- image/png attachment: CrystalDiskMark_20250928173054.png
- image/png attachment: CrystalDiskMark_20250928172636.png
Received on Sunday, 28 September 2025 14:31:36 UTC