Jag kan för lite om praktisk filsystemsteknik om detta, annat än att jag aldrig varit med om ett operativsystem där man måste förallokera sin datafil innan man kan göra snabba sekventiella skrivningar till detta, rent empiriskt. Det skulle betyda att t.ex. ett filkopieringsprogram skulle bli mycket snabbare av att förallokera sin data (vilket jag inte alltid ser att ett sådant program gör), och att det skulle vara supersegt att t.ex. pipa data utan känd storlek ut till en fil. Och det har jag aldrig hört talas om att en sådan begränsning skulle finnas. Men det betyder ju inte att du har fel, bara att jag inte vet till 100%.
Sen ett förtydligande, det blir ju inte 100% sekventiellt just eftersom du måste skriva filsystemsmetadata, och särskilt inte eftersom replay-funktionen skriver till 2 olika filer samtidigt (det kanske är det som är skillnaden?) men det kan ju bli "nära nog".
Det är ju rätt enkelt att skriva ett enkelt program som skriver 1 GB slumpdata till en fil, en gång till en ny fil, och en gång till till ene existerande fil och mäta skillnaden, men just nu så sitter jag på en laptop utan snurrdisk. (Eller tja, det sitter en Firecuda i den, men det räknas inte för att det är en hybrid.) Kanske t.o.m. köra 2 sådana processer parallellt och se vad som händer. Men det får vänta tills imorgon kväll tills att jag bytt ut moderkortet i min primära PC (där jag faktiskt har en ren snurrdisk) för att validera detta.
Fick inte ihop datorn förrän nu, så nu följer jag upp detta som utlovat.
Kan tillägga att jag validerat detta. Använde dd under cygwin för att testa detta. Började med att skapa en testfil på min NVMe.
pvz@DESKTOP-OTTHA70 ~
$ dd if=/dev/urandom of=/cygdrive/c/Users/pvz/testfil.dat count=1000 bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.551772 s, 1.9 GB/s
Kopierade då över denna testfil till min d-disk (hårddisk) med olika blockstorlekar och fick dessa resultat:
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=4096
256000+0 records in
256000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.7396 s, 603 MB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.440075 s, 2.4 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.44087 s, 2.4 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.606634 s, 1.7 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=4096 256000+0 records in
256000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.33651 s, 785 MB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=4096
256000+0 records in
256000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.92036 s, 546 MB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.450041 s, 2.3 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=65536
16000+0 records in
16000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.502324 s, 2.1 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil1.dat bs=65536
16000+0 records in
16000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.498018 s, 2.1 GB/s
pvz@DESKTOP-OTTHA70 ~
$ dd if=/cygdrive/c/Users/pvz/testfil.dat of=/cygdrive/d/testfil2.dat bs=65536
16000+0 records in
16000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.561651 s, 1.9 GB/s
Slutsatsen verkar vara att så länge blockstorleken är minst 64 kB så blir det inte snabbare av större block, och att det inte verkar finnas någon tydlig prestandavinst i att skriva till en förallokerad fil (ungefär som jag trodde alltså).
Om det nu är så att Shadowplay funkar dåligt på en hårddisk i vissa scenarion (vilket jag inte tänker säga emot, jag har personligen inte sett det hända själv) så är detta snarare något slags problem med Nvidias implementation, eller med att hårddisken har för mycket att göra med annat, snarare än ett fundamentalt problem med att använda en (icke-SMR) hårddisk som cache för Instant Replay.