.net - Windows Xperf diskio-handling viser mig ikke en fil, som et program læser under præstationssporingssessionen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kører xperf for at få sporoplysninger til et program, når jeg kører det. Programmet læser en fil. Det er et .NET program skrevet i F #, filen læses her:


System.IO.File.ReadAllLines("MyReadFile.txt")


Godt. Jeg kører xperf:


xperf -on DiagEasy


Jeg stopper xperf og fletter i en fil:


xperf -d myfile.etl


OKAY.


Nu skriver jeg:


xperf -i myfile.etl -o myfile\_stat.txt -a diskio -detail


Jeg gør dette, så jeg kan få en fil med alle oplysninger om filer. Den viste fil er en tekstfil formateret for at lade mig se diskstatistikker efter fil. Hver fil, der er blevet manipuleret under sporingssessionen, vises med meget data om processen, som læsede/skrev filen og så videre ...


Men MyReadFile.txt vises ikke der.


Hvorfor?????
Er det fordi cpu-prøveudtagningsfrekvensen er for lav? Hvordan kan jeg ændre det?


Men mit program læser filen, jeg er sikker på, programmet starter og udskriver indholdet ...


Tak

Bedste reference


Fil I/O-overvågning er ikke baseret på prøveudtagning. I stedet rejser den relevante ETW-udbyder begivenheder for hver overvåget I/O. Det bør ikke gå glip af noget.


Hvis dette var min kode, tror jeg det havde ikke rigtig læst filen. ERROR\_FILE\_NOT\_FOUND, måske?


Også dette flag skal være DiagEasy, ikke EasyDiag.


FWIW, her er hvordan jeg gør filovervågning, med stakspor aktiveret:


xperf -on PROC\_THREAD + LOADER + FILE\_IO + FILE\_IO\_INIT + FILENAME -stablerwalk FileCreate + FileRead + FileWrite + FileFlush + FileQueryInformation + FileSetinformation + FileDelete


Hilsen,
Gary

Andre referencer 1


DiagEasy tænder ETW instrumentation for IO til/fra disken. Hvis filen allerede er i hukommelsen, vil der ikke være nogen IO. Du skal aktivere FILE\_IO- og FILE\_IO\_INIT-hændelserne som beskrevet af Gary ovenfor for at indhente alle filtilgange, selv til filer i øjeblikket i hukommelsen.


Du kan måske spørge, hvorfor filen er i hukommelse dog. Der er to måder, filen kan være i hukommelse, når du indsamlede dataene.


Du har fået adgang til filen ældigt siden du startede systemet, enten for at læse det eller for at skrive det. Filen forbliver i hukommelsen, indtil der er tilstrækkelig efterspørgsel efter hukommelse, at disse filsider trykkes fra RAM. Da disse er arkiverede sider, vil alle, der er blevet ændret, blive skrevet til filen (MyReadFile.txt), før siderne udgives og derefter gives til en proces til brug.


Den anden måde filen kunne være i hukommelsen er, at SuperFetch så repetative adgang til denne fil og proaktivt indlæste den til hukommelse, når disken ellers var tomgang. Dette er gjort for at fjerne latent adgang til filen ville have oplevet i læsning af data fra disken.