brintos

brintos / linux-shallow public Read only

0
0
Text · 12.6 KiB · 77972d9 Raw
231 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3.. include:: ../disclaimer-ita.rst4 5=======================6Statistiche sui blocchi7=======================8 9Cosa10====11 12Come suggerisce il nome, fornisce statistiche sui blocchi.13 14 15Perché16======17 18Perché, tanto per fare un esempio, le contese sui blocchi possono influenzare19significativamente le prestazioni.20 21Come22====23 24*Lockdep* ha punti di collegamento nelle funzioni di blocco e inoltre25mappa le istanze di blocco con le relative classi. Partiamo da questo punto26(vedere Documentation/translations/it_IT/locking/lockdep-design.rst).27Il grafico sottostante mostra la relazione che intercorre fra le28funzioni di blocco e i vari punti di collegamenti che ci sono al loro29interno::30 31        __acquire32            |33           lock _____34            |        \35            |    __contended36            |         |37            |       <wait>38            | _______/39            |/40            |41       __acquired42            |43            .44          <hold>45            .46            |47       __release48            |49         unlock50 51  lock, unlock	- le classiche funzioni di blocco52  __*		- i punti di collegamento53  <> 		- stati54 55Grazie a questi punti di collegamento possiamo fornire le seguenti statistiche:56 57con-bounces58  - numero di contese su un blocco che riguarda dati di un processore59 60contentions61  - numero di acquisizioni di blocchi che hanno dovuto attendere62 63wait time64  min65    - tempo minimo (diverso da zero) che sia mai stato speso in attesa di66      un blocco67 68  max69    - tempo massimo che sia mai stato speso in attesa di un blocco70 71  total72    - tempo totale speso in attesa di un blocco73 74  avg75	- tempo medio speso in attesa di un blocco76 77acq-bounces78  - numero di acquisizioni di blocco che riguardavano i dati su un processore79 80acquisitions81  - numero di volte che un blocco è stato ottenuto82 83hold time84  min85    - tempo minimo (diverso da zero) che sia mai stato speso trattenendo un blocco86 87  max88    - tempo massimo che sia mai stato speso trattenendo un blocco89 90  total91    - tempo totale di trattenimento di un blocco92 93  avg94    - tempo medio di trattenimento di un blocco95 96Questi numeri vengono raccolti per classe di blocco, e per ogni stato di97lettura/scrittura (quando applicabile).98 99Inoltre, questa raccolta di statistiche tiene traccia di 4 punti di contesa100per classe di blocco. Un punto di contesa è una chiamata che ha dovuto101aspettare l'acquisizione di un blocco.102 103Configurazione104--------------105 106Le statistiche sui blocchi si abilitano usando l'opzione di configurazione107CONFIG_LOCK_STAT.108 109Uso110---111 112Abilitare la raccolta di statistiche::113 114	# echo 1 >/proc/sys/kernel/lock_stat115 116Disabilitare la raccolta di statistiche::117 118	# echo 0 >/proc/sys/kernel/lock_stat119 120Per vedere le statistiche correnti sui blocchi::121 122  ( i numeri di riga non fanno parte dell'output del comando, ma sono stati123  aggiunti ai fini di questa spiegazione )124 125  # less /proc/lock_stat126 127  01 lock_stat version 0.4128  02-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------129  03                              class name    con-bounces    contentions   waittime-min   waittime-max waittime-total   waittime-avg    acq-bounces   acquisitions   holdtime-min   holdtime-max holdtime-total   holdtime-avg130  04-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------131  05132  06                         &mm->mmap_sem-W:            46             84           0.26         939.10       16371.53         194.90          47291        2922365           0.16     2220301.69 17464026916.32        5975.99133  07                         &mm->mmap_sem-R:            37            100           1.31      299502.61      325629.52        3256.30         212344       34316685           0.10        7744.91    95016910.20           2.77134  08                         ---------------135  09                           &mm->mmap_sem              1          [<ffffffff811502a7>] khugepaged_scan_mm_slot+0x57/0x280136  10                           &mm->mmap_sem             96          [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510137  11                           &mm->mmap_sem             34          [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0138  12                           &mm->mmap_sem             17          [<ffffffff81127e71>] vm_munmap+0x41/0x80139  13                         ---------------140  14                           &mm->mmap_sem              1          [<ffffffff81046fda>] dup_mmap+0x2a/0x3f0141  15                           &mm->mmap_sem             60          [<ffffffff81129e29>] SyS_mprotect+0xe9/0x250142  16                           &mm->mmap_sem             41          [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510143  17                           &mm->mmap_sem             68          [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0144  18145  19.............................................................................................................................................................................................................................146  20147  21                         unix_table_lock:           110            112           0.21          49.24         163.91           1.46          21094          66312           0.12         624.42       31589.81           0.48148  22                         ---------------149  23                         unix_table_lock             45          [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0150  24                         unix_table_lock             47          [<ffffffff8150b111>] unix_release_sock+0x31/0x250151  25                         unix_table_lock             15          [<ffffffff8150ca37>] unix_find_other+0x117/0x230152  26                         unix_table_lock              5          [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0153  27                         ---------------154  28                         unix_table_lock             39          [<ffffffff8150b111>] unix_release_sock+0x31/0x250155  29                         unix_table_lock             49          [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0156  30                         unix_table_lock             20          [<ffffffff8150ca37>] unix_find_other+0x117/0x230157  31                         unix_table_lock              4          [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0158 159Questo estratto mostra le statistiche delle prime due classi di160blocco. La riga 01 mostra la versione dell'output - la versione161cambierà ogni volta che cambia il formato. Le righe dalla 02 alla 04162rappresentano l'intestazione con la descrizione delle colonne. Le163statistiche sono mostrate nelle righe dalla 05 alla 18 e dalla 20164alla 31. Queste statistiche sono divise in due parti: le statistiche,165seguite dai punti di contesa (righe 08 e 13) separati da un divisore.166 167Le righe dalla 09 alla 12 mostrano i primi quattro punti di contesa168registrati (il codice che tenta di acquisire un blocco) e le righe169dalla 14 alla 17 mostrano i primi quattro punti contesi registrati170(ovvero codice che ha acquisito un blocco). È possibile che nelle171statistiche manchi il valore *max con-bounces*.172 173Il primo blocco (righe dalla 05 alla 18) è di tipo lettura/scrittura e quindi174mostra due righe prima del divisore. I punti di contesa non corrispondono alla175descrizione delle colonne nell'intestazione; essi hanno due colonne: *punti di176contesa* e *[<IP>] simboli*. Il secondo gruppo di punti di contesa sono i punti177con cui si contende il blocco.178 179La parte interna del tempo è espressa in us (microsecondi).180 181Quando si ha a che fare con blocchi annidati si potrebbero vedere le182sottoclassi di blocco::183 184  32...........................................................................................................................................................................................................................185  33186  34                               &rq->lock:       13128          13128           0.43         190.53      103881.26           7.91          97454        3453404           0.00         401.11    13224683.11           3.82187  35                               ---------188  36                               &rq->lock          645          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75189  37                               &rq->lock          297          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a190  38                               &rq->lock          360          [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a191  39                               &rq->lock          428          [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb192  40                               ---------193  41                               &rq->lock           77          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75194  42                               &rq->lock          174          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a195  43                               &rq->lock         4715          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54196  44                               &rq->lock          893          [<ffffffff81340524>] schedule+0x157/0x7b8197  45198  46...........................................................................................................................................................................................................................199  47200  48                             &rq->lock/1:        1526          11488           0.33         388.73      136294.31          11.86          21461          38404           0.00          37.93      109388.53           2.84201  49                             -----------202  50                             &rq->lock/1        11526          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54203  51                             -----------204  52                             &rq->lock/1         5645          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54205  53                             &rq->lock/1         1224          [<ffffffff81340524>] schedule+0x157/0x7b8206  54                             &rq->lock/1         4336          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54207  55                             &rq->lock/1          181          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a208 209La riga 48 mostra le statistiche per la seconda sottoclasse (/1) della210classe *&irq->lock* (le sottoclassi partono da 0); in questo caso,211come suggerito dalla riga 50, ``double_rq_lock`` tenta di acquisire un blocco212annidato di due spinlock.213 214Per vedere i blocco più contesi::215 216  # grep : /proc/lock_stat | head217			clockevents_lock:       2926159        2947636           0.15       46882.81  1784540466.34         605.41        3381345        3879161           0.00        2260.97    53178395.68          13.71218		     tick_broadcast_lock:        346460         346717           0.18        2257.43    39364622.71         113.54        3642919        4242696           0.00        2263.79    49173646.60          11.59219		  &mapping->i_mmap_mutex:        203896         203899           3.36      645530.05 31767507988.39      155800.21        3361776        8893984           0.17        2254.15    14110121.02           1.59220			       &rq->lock:        135014         136909           0.18         606.09      842160.68           6.15        1540728       10436146           0.00         728.72    17606683.41           1.69221	       &(&zone->lru_lock)->rlock:         93000          94934           0.16          59.18      188253.78           1.98        1199912        3809894           0.15         391.40     3559518.81           0.93222			 tasklist_lock-W:         40667          41130           0.23        1189.42      428980.51          10.43         270278         510106           0.16         653.51     3939674.91           7.72223			 tasklist_lock-R:         21298          21305           0.20        1310.05      215511.12          10.12         186204         241258           0.14        1162.33     1179779.23           4.89224			      rcu_node_1:         47656          49022           0.16         635.41      193616.41           3.95         844888        1865423           0.00         764.26     1656226.96           0.89225       &(&dentry->d_lockref.lock)->rlock:         39791          40179           0.15        1302.08       88851.96           2.21        2790851       12527025           0.10        1910.75     3379714.27           0.27226			      rcu_node_0:         29203          30064           0.16         786.55     1555573.00          51.74          88963         244254           0.00         398.87      428872.51           1.76227 228Per cancellare le statistiche::229 230  # echo 0 > /proc/lock_stat231