Dispatch queue length per processor set

Folgendes DTrace-Script zeigt die Länge der Dispatch-Queue innerhalb der Prozessor-Sets (pro CPU) an.
Die angebene Länge bezieht sich dabei immer auf eine CPU.

Beispiel:

pset   0
  disp queue len/cpu                            no. queue changes 
           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  16827    
               5 |@                                        291      
              10 |                                         28       
              15 |                                         13       
              20 |                                         0        

pset   1
  disp queue len/cpu                            no. queue changes 
           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   84593    
               5 |@                                        3161     
              10 |                                         311      
              15 |                                         64       
              20 |                                         37       
              25 |                                         24       
              30 |                                         1        
              35 |                                         0        

dispatch queue changes per processor set:
        0            17159
        1            88191

In pset 1 sind in 5s 88191 Änderungen an den einzelnen CPU dispatch-queues aufgetreten. Während einer Änderung war die
Länge einer dispatch-queue (und damit einer CPU) 30 - 35.

#!/usr/sbin/dtrace -s                                                                                  
                                                                                             
#pragma D option quiet                                                                                 
                                                                                                       
BEGIN {                                                                                                
        printf("tracing...\n");                                                                        
}                                                                                                      
                                                                                                       
                                                                                                       
sched:::enqueue,                                                                                       
sched:::dequeue                                                                                        
{                                                                                                      
        this->disp      = `cpu[cpu]->cpu_disp;          /* disp_t, see sys/disp.h */                   
        this->nrunnable = this->disp->disp_nrunnable;                                                  
                                                                                                       
        @pset_run[pset] = lquantize(this->nrunnable, 0, 200, 5);                                       
        @pset_changes[pset] = count();                                                                 
}                                                                                                      
                                                                                                       
tick-5s                                                                                                
{                                                                                                      
        printa("pset %3d\n  disp queue len/cpu\t\t\t\tno. queue changes %@d\n", @pset_run);            
        printf("dispatch queue changes per processor set:");                                           
        printa(@pset_changes);                                                                         
        printf("\n\n");                                                                                
                                                                                                       
        trunc(@pset_run);                                                                              
        trunc(@pset_changes);                                                                          
}                                                                                                      

Leave a Reply

Your email address will not be published. Required fields are marked *