c ++ - hvordan man finder kode, der laver I/O

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ser på et præstationsproblem, der viste sig mellem to udgivelser (dette er en Windows-app).
Det jeg bemærker er, at den version, der er langsommere, gør mere I/O end den forrige
(Jeg har observeret dette med procesforsker (se graf nedenfor)), når den anden gør ingen eller meget få, og I/O er korreleret med mindre cpu-aktivitet. Så jeg gætter på, at præstationstabet kommer fra I/O.


Men da koden er ret stor og deles af forskellige hold, er det ikke let at finde ud af hvad som ændret. Endvidere er afstanden mellem de to versioner vigtig.
Fra hvad jeg er bekymret, skal disse to versioner stadig til samme slags arbejde ...
så ved at vide, at denne app laver fil + DB-adgang, ved nogen en måde (eller et værktøj) at finde ud af, hvilken del af kode der kan være involveret i en betydelig I/O-aktivitet?


Jeg har prøvet nogle profiler (ltprof) men uden held og lykke hidtil.
Jeg har forsøgt at lave nogle statistiske fejlfinding (pauser hvert par sekunder) for at se, hvad callstacken er), men da I/O synes at tage en mindre procentdel af processen (sige mindre &15\%),
igen har jeg ikke fundet noget relevant hidtil.


Enhver ide meget værdsat.


Indtast billedbeskrivelse her

Bedste reference


Process Monitor fra Sysinternals (nu en del af Microsoft) vil oprette en logfil over alle I/O-operationer udført af en proces (eller processer). Det kan give dig et fingerpeg om, hvad alle de ekstra I/Os er, selvom det ikke vil vise dig en bestemt del af koden. Du kan sammenligne loggen til en fra den hurtigere version og se, hvad der er anderledes. Du kan også være i stand til at få øje på mønstre (som overflødigt arbejde eller skrive tilbage til front i stedet for front-to-back). [1]


Hvis den samlede I/O er omtrent det samme, så kan problemet være låsebestemmelse snarere end I/O.