2016-06-08 3 views
3

J'ai donc un pipeline basé io-streams que je viens de rencontrer (interprété) et largué les statistiques avec -s:Quelle est la signification de cette sortie de statistiques?

123,680 bytes allocated in the heap 
     3,464 bytes copied during GC 
     68,912 bytes maximum residency (1 sample(s)) 
     13,008 bytes maximum slop 
      1 MB total memory in use (0 MB lost due to fragmentation) 

           Tot time (elapsed) Avg pause Max pause 
Gen 0   0 colls,  0 par 0.000s 0.000s  0.0000s 0.0000s 
Gen 1   1 colls,  0 par 0.000s 0.000s  0.0002s 0.0002s 

INIT time 0.000s ( 0.000s elapsed) 
MUT  time 0.001s (299.935s elapsed) 
GC  time 0.000s ( 0.000s elapsed) 
EXIT time 0.000s ( 0.000s elapsed) 
Total time 0.134s (299.936s elapsed) 

%GC  time  0.2% (0.0% elapsed) 

Alloc rate 106,371,724 bytes per MUT second 

Productivity 99.7% of total user, 0.0% of total elapsed 

Donc, fondamentalement, aucun moment passer la collecte des ordures. Mais ce que je suis confus est le temps entre parenthèses. De the docs il n'est pas évident quelle est la différence entre les temps et les temps entre parenthèses. Quelqu'un peut-il faire la lumière sur cela?

+1

il est temps CPU vs horloge murale (ce que vous appelleriez le temps) - le premier est le temps de passer * réchauffement * le CPU - l'autre est-vous attendre le résultat – Carsten

+0

dans ce cas, il semble que vous avez fait – Carsten

+0

btw: il est là dans les docs: "Ensuite, il y a l'heure du processeur et l'heure de l'horloge murale" – Carsten

Répondre

1

L'heure entre parenthèses est l'heure de l'horloge murale. C'est le moment où un humain (vous) vit pendant que le programme fonctionne si vous regardez une horloge au mur. Le temps CPU est le temps Vos expériences de programme:

Si vous utilisez alors le drapeau -s, lorsque votre programme se termine, vous verrez quelque chose comme ceci (les détails exacts varient en fonction de quel type de RTS que vous avez, par exemple, vous ne verrez que les données de profilage si votre RTS est compilé pour le profilage):

36,169,392 bytes allocated in the heap 
    4,057,632 bytes copied during GC 
    1,065,272 bytes maximum residency (2 sample(s)) 
     54,312 bytes maximum slop 
      3 MB total memory in use (0 MB lost due to fragmentation) 

Generation 0: 67 collections,  0 parallel, 0.04s, 0.03s elapsed 
Generation 1:  2 collections,  0 parallel, 0.03s, 0.04s elapsed 

SPARKS: 359207 (557 converted, 149591 pruned) 

INIT time 0.00s ( 0.00s elapsed) 
MUT time 0.01s ( 0.02s elapsed) 
GC time 0.07s ( 0.07s elapsed) 
EXIT time 0.00s ( 0.00s elapsed) 
Total time 0.08s ( 0.09s elapsed) 

%GC time  89.5% (75.3% elapsed) 

Alloc rate 4,520,608,923 bytes per MUT second 

Productivity 10.5% of total user, 9.1% of total elapsed 

[...]

Ensuite il y a le temps CPU et l'heure horloge murale qui écoulée brisé par le système d'exécution a été fait à l'époque. INIT est ...

L'horloge murale est généralement supérieure à la durée de l'UC, sauf si vous utilisez plusieurs cœurs en même temps. Un exemple simple où le temps CPU est très faible et le temps horloge murale est élevée peut être obtenue en utilisant getLine, sleep et echo:

$ {sleep 10; echo 1} | ghc -e 'getLine' +RTS -s > /dev/null 

     32,006,664 bytes allocated in the heap 
     20,644,024 bytes copied during GC 
     5,813,624 bytes maximum residency (6 sample(s)) 
     156,360 bytes maximum slop 
       12 MB total memory in use (0 MB lost due to fragmentation) 

            Tot time (elapsed) Avg pause Max pause 
    Gen 0  37 colls,  0 par 0.011s 0.011s  0.0003s 0.0009s 
    Gen 1   6 colls,  0 par 0.052s 0.052s  0.0087s 0.0105s 

    TASKS: 5 (1 bound, 4 peak workers (4 total), using -N1) 

    SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled) 

    INIT time 0.001s ( 0.001s elapsed) 
    MUT  time 0.016s ( 9.903s elapsed) <------------ 
    GC  time 0.063s ( 0.063s elapsed) 
    EXIT time 0.010s ( 0.010s elapsed) 
    Total time 0.125s ( 9.977s elapsed) 

    Alloc rate 1,956,305,120 bytes per MUT second 

    Productivity 48.7% of total user, 0.6% of total elapsed 

Comme vous pouvez le voir, le temps CPU MUT est faible, alors que le temps de l'horloge murale MUT est élevé, car l'application attend une entrée.