Permalänk
Hedersmedlem
Skrivet av pv2b:

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.

Permalänk
Medlem

@DeFeCT79

Jag satte ihop en guide för att sätta upp Instant Replay med en RAM-disk för framtida bruk.

Du och andra i tråden får gärna läsa och kommentera:
https://www.sweclockers.com/forum/trad/1631556-guide-satta-up...

Jag tror att guiden är så komplett att man kan klara det hela utan förkunskaper.

Permalänk
Medlem
Skrivet av pv2b:

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

Vad är det för hårddisk som klarar över 500 MB/s?

Jag säger att det är något rejält mätfel här. Nu har jag ingen hårddisk längre så att jag kan testa men kör t.ex. AS-SSD (eller något annat benchmarkprogram för lagringsenheter) på en hårddisk så ser du att I/O-prestandan är nere på några få MB/s när man skriver 4 KB-block.

Permalänk
Hedersmedlem
Skrivet av Sveklockarn:

Vad är det för hårddisk som klarar över 500 MB/s?

Jag säger att det är något rejält mätfel här. Nu har jag ingen hårddisk längre så att jag kan testa men kör t.ex. AS-SSD (eller något annat benchmarkprogram för lagringsenheter) på en hårddisk så ser du att I/O-prestandan är nere på några få MB/s när man skriver 4 KB-block.

Syftet med mina mätningar var aldrig att visa på någon absolut prestanda av själva hårddisken, utan snarare att visa på att blockstorlekar på 64 kB eller 1 MB inte spelar någon specifik roll i OS-overhead. Jag kunde varit tydligare när jag förklarade vad syftet med mätningen var. Det du ser här är OS-cache för det mesta, och är ju faktiskt relevant i och med att skrivcachet aldrig kommer ens bli i närheten av fullt. Om jag kan skriva 1 GB på en halv sekund till cache, vilket motsvarar 7 minuter "shadowplay", så kommer i princip alla skrivningar som sker till en disk (så länge den inte är hårt belastad) att ske genom cache, och cachen kommer i sin tur tömmas tillräckligt snabbt för att den aldrig blir full. Det visar också att cachet är tillräckligt stort att det inte spelar någon större roll att förallokera filen eftersom allt ryms i cache ändå.

Ett snabbtest med min hårddisk med AS-SSD visar att vi kan skriva sekventiellt i cirka 107 MB/s, vilket med råge är snabbt nog för att använda Nvidia:s instant-replay-funktion, som kräver 1,9 GB för 5 minuter (eller 6 MB/s). Så klart så kan ju detta bli mer om man ökar bitrate, men aldrig så att det går upp till 100 MB/s.

AS-SSD:s "4k-mätning" är random i/o, inte sekventiell, så den är inte relevant här alls. Det är mer relevant när man ska testa databaser och liknande applikationer, inte när man ska strömma linjärt till en fil.

Alltså, jag vill med detta säga att det finns ingen anledning, utifrån vad hårdvaran klarar av, att påstå att en hårddisk inte ska kunna spela in en video eller användas för Shadowplays "instant replay"-funktion. Är det så att det funkar dåligt ändå så är det något fel i hur programvaran är skriven.

Permalänk
Medlem
Skrivet av pv2b:

inte när man ska strömma linjärt till en fil.

Ja jag får väl ge mig eftersom jag inte hittar någon som helst information om hur det fungerar, men det är ett faktum jag testat fram på flera system att slutresultatet blir jättedåligt (med t.ex. tappade frames) när man använder en hårddisk (t.ex. WD Black) som buffer, och den enda rimliga förklaringen jag kan komma på är att I/O kvävs p.g.a. jättemånga små skrivningar, vilket även ditt första test tyder på med flera tusen läs- och skrivoperationer under 30 sek.

Det är ju sannolikt bara en sabla massa små latenser av att skivorna ska hinna rotera fram till läshuvudet igen som skapar prestandaproblemen.

Permalänk
Hedersmedlem
Skrivet av Sveklockarn:

Ja jag får väl ge mig eftersom jag inte hittar någon som helst information om hur det fungerar, men det är ett faktum jag testat fram på flera system att slutresultatet blir jättedåligt (med t.ex. tappade frames) när man använder en hårddisk (t.ex. WD Black) som buffer, och den enda rimliga förklaringen jag kan komma på är att I/O kvävs p.g.a. jättemånga små skrivningar, vilket även ditt första test tyder på med flera tusen läs- och skrivoperationer under 30 sek.

Det är ju sannolikt bara en sabla massa små latenser av att skivorna ska hinna rotera fram till läshuvudet igen som skapar prestandaproblemen.

... vilket de inte gör eftersom allt stannar i cache och sedan flushas ut därifrån i stora kombinerade skrivningar (vilket var syftet med mina dd-tester), om det inte är så att shadowplay aktivt stänger av cache i sina skrivningar och jag det finns ingen anledning att de ska göra så. Och då kommer vi fram igen till att i såfall så är det Shadowplay som är felprogrammerat.

Permalänk
Medlem
Skrivet av pv2b:

... vilket de inte gör eftersom allt stannar i cache och sedan flushas ut därifrån i stora kombinerade skrivningar (vilket var syftet med mina dd-tester), om det inte är så att shadowplay aktivt stänger av cache i sina skrivningar och jag det finns ingen anledning att de ska göra så. Och då kommer vi fram igen till att i såfall så är det Shadowplay som är felprogrammerat.

Jag har ingen aning. Hårddiskar är ändå hyfsat passé vid det här laget av andra skäl, som t.ex. att det går mycket snabbare att spara filen till en SSD från en RAM-disk. Jag önskar att jag hade något white paper att falla tillbaka på här som förklarar allt, men tyvärr har jag inte det.