xref: /linux/Documentation/translations/it_IT/locking/lockstat.rst (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
1.. SPDX-License-Identifier: GPL-2.0
2
3.. include:: ../disclaimer-ita.rst
4
5=======================
6Statistiche sui blocchi
7=======================
8
9Cosa
10====
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 influenzare
19significativamente le prestazioni.
20
21Come
22====
23
24*Lockdep* ha punti di collegamento nelle funzioni di blocco e inoltre
25mappa le istanze di blocco con le relative classi. Partiamo da questo punto
26(vedere Documentation/translations/it_IT/locking/lockdep-design.rst).
27Il grafico sottostante mostra la relazione che intercorre fra le
28funzioni di blocco e i vari punti di collegamenti che ci sono al loro
29interno::
30
31        __acquire
32            |
33           lock _____
34            |        \
35            |    __contended
36            |         |
37            |       <wait>
38            | _______/
39            |/
40            |
41       __acquired
42            |
43            .
44          <hold>
45            .
46            |
47       __release
48            |
49         unlock
50
51  lock, unlock	- le classiche funzioni di blocco
52  __*		- i punti di collegamento
53  <> 		- stati
54
55Grazie a questi punti di collegamento possiamo fornire le seguenti statistiche:
56
57con-bounces
58  - numero di contese su un blocco che riguarda dati di un processore
59
60contentions
61  - numero di acquisizioni di blocchi che hanno dovuto attendere
62
63wait time
64  min
65    - tempo minimo (diverso da zero) che sia mai stato speso in attesa di
66      un blocco
67
68  max
69    - tempo massimo che sia mai stato speso in attesa di un blocco
70
71  total
72    - tempo totale speso in attesa di un blocco
73
74  avg
75	- tempo medio speso in attesa di un blocco
76
77acq-bounces
78  - numero di acquisizioni di blocco che riguardavano i dati su un processore
79
80acquisitions
81  - numero di volte che un blocco è stato ottenuto
82
83hold time
84  min
85    - tempo minimo (diverso da zero) che sia mai stato speso trattenendo un blocco
86
87  max
88    - tempo massimo che sia mai stato speso trattenendo un blocco
89
90  total
91    - tempo totale di trattenimento di un blocco
92
93  avg
94    - tempo medio di trattenimento di un blocco
95
96Questi numeri vengono raccolti per classe di blocco, e per ogni stato di
97lettura/scrittura (quando applicabile).
98
99Inoltre, questa raccolta di statistiche tiene traccia di 4 punti di contesa
100per classe di blocco. Un punto di contesa è una chiamata che ha dovuto
101aspettare l'acquisizione di un blocco.
102
103Configurazione
104--------------
105
106Le statistiche sui blocchi si abilitano usando l'opzione di configurazione
107CONFIG_LOCK_STAT.
108
109Uso
110---
111
112Abilitare la raccolta di statistiche::
113
114	# echo 1 >/proc/sys/kernel/lock_stat
115
116Disabilitare la raccolta di statistiche::
117
118	# echo 0 >/proc/sys/kernel/lock_stat
119
120Per vedere le statistiche correnti sui blocchi::
121
122  ( i numeri di riga non fanno parte dell'output del comando, ma sono stati
123  aggiunti ai fini di questa spiegazione )
124
125  # less /proc/lock_stat
126
127  01 lock_stat version 0.4
128  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-avg
130  04-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
131  05
132  06                         &mm->mmap_sem-W:            46             84           0.26         939.10       16371.53         194.90          47291        2922365           0.16     2220301.69 17464026916.32        5975.99
133  07                         &mm->mmap_sem-R:            37            100           1.31      299502.61      325629.52        3256.30         212344       34316685           0.10        7744.91    95016910.20           2.77
134  08                         ---------------
135  09                           &mm->mmap_sem              1          [<ffffffff811502a7>] khugepaged_scan_mm_slot+0x57/0x280
136  10                           &mm->mmap_sem             96          [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510
137  11                           &mm->mmap_sem             34          [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0
138  12                           &mm->mmap_sem             17          [<ffffffff81127e71>] vm_munmap+0x41/0x80
139  13                         ---------------
140  14                           &mm->mmap_sem              1          [<ffffffff81046fda>] dup_mmap+0x2a/0x3f0
141  15                           &mm->mmap_sem             60          [<ffffffff81129e29>] SyS_mprotect+0xe9/0x250
142  16                           &mm->mmap_sem             41          [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510
143  17                           &mm->mmap_sem             68          [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0
144  18
145  19.............................................................................................................................................................................................................................
146  20
147  21                         unix_table_lock:           110            112           0.21          49.24         163.91           1.46          21094          66312           0.12         624.42       31589.81           0.48
148  22                         ---------------
149  23                         unix_table_lock             45          [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0
150  24                         unix_table_lock             47          [<ffffffff8150b111>] unix_release_sock+0x31/0x250
151  25                         unix_table_lock             15          [<ffffffff8150ca37>] unix_find_other+0x117/0x230
152  26                         unix_table_lock              5          [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0
153  27                         ---------------
154  28                         unix_table_lock             39          [<ffffffff8150b111>] unix_release_sock+0x31/0x250
155  29                         unix_table_lock             49          [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0
156  30                         unix_table_lock             20          [<ffffffff8150ca37>] unix_find_other+0x117/0x230
157  31                         unix_table_lock              4          [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0
158
159Questo estratto mostra le statistiche delle prime due classi di
160blocco. La riga 01 mostra la versione dell'output - la versione
161cambierà ogni volta che cambia il formato. Le righe dalla 02 alla 04
162rappresentano l'intestazione con la descrizione delle colonne. Le
163statistiche sono mostrate nelle righe dalla 05 alla 18 e dalla 20
164alla 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 contesa
168registrati (il codice che tenta di acquisire un blocco) e le righe
169dalla 14 alla 17 mostrano i primi quattro punti contesi registrati
170(ovvero codice che ha acquisito un blocco). È possibile che nelle
171statistiche manchi il valore *max con-bounces*.
172
173Il primo blocco (righe dalla 05 alla 18) è di tipo lettura/scrittura e quindi
174mostra due righe prima del divisore. I punti di contesa non corrispondono alla
175descrizione delle colonne nell'intestazione; essi hanno due colonne: *punti di
176contesa* e *[<IP>] simboli*. Il secondo gruppo di punti di contesa sono i punti
177con 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 le
182sottoclassi di blocco::
183
184  32...........................................................................................................................................................................................................................
185  33
186  34                               &rq->lock:       13128          13128           0.43         190.53      103881.26           7.91          97454        3453404           0.00         401.11    13224683.11           3.82
187  35                               ---------
188  36                               &rq->lock          645          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
189  37                               &rq->lock          297          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
190  38                               &rq->lock          360          [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a
191  39                               &rq->lock          428          [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb
192  40                               ---------
193  41                               &rq->lock           77          [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75
194  42                               &rq->lock          174          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
195  43                               &rq->lock         4715          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
196  44                               &rq->lock          893          [<ffffffff81340524>] schedule+0x157/0x7b8
197  45
198  46...........................................................................................................................................................................................................................
199  47
200  48                             &rq->lock/1:        1526          11488           0.33         388.73      136294.31          11.86          21461          38404           0.00          37.93      109388.53           2.84
201  49                             -----------
202  50                             &rq->lock/1        11526          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
203  51                             -----------
204  52                             &rq->lock/1         5645          [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54
205  53                             &rq->lock/1         1224          [<ffffffff81340524>] schedule+0x157/0x7b8
206  54                             &rq->lock/1         4336          [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54
207  55                             &rq->lock/1          181          [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a
208
209La riga 48 mostra le statistiche per la seconda sottoclasse (/1) della
210classe *&irq->lock* (le sottoclassi partono da 0); in questo caso,
211come suggerito dalla riga 50, ``double_rq_lock`` tenta di acquisire un blocco
212annidato di due spinlock.
213
214Per vedere i blocco più contesi::
215
216  # grep : /proc/lock_stat | head
217			clockevents_lock:       2926159        2947636           0.15       46882.81  1784540466.34         605.41        3381345        3879161           0.00        2260.97    53178395.68          13.71
218		     tick_broadcast_lock:        346460         346717           0.18        2257.43    39364622.71         113.54        3642919        4242696           0.00        2263.79    49173646.60          11.59
219		  &mapping->i_mmap_mutex:        203896         203899           3.36      645530.05 31767507988.39      155800.21        3361776        8893984           0.17        2254.15    14110121.02           1.59
220			       &rq->lock:        135014         136909           0.18         606.09      842160.68           6.15        1540728       10436146           0.00         728.72    17606683.41           1.69
221	       &(&zone->lru_lock)->rlock:         93000          94934           0.16          59.18      188253.78           1.98        1199912        3809894           0.15         391.40     3559518.81           0.93
222			 tasklist_lock-W:         40667          41130           0.23        1189.42      428980.51          10.43         270278         510106           0.16         653.51     3939674.91           7.72
223			 tasklist_lock-R:         21298          21305           0.20        1310.05      215511.12          10.12         186204         241258           0.14        1162.33     1179779.23           4.89
224			      rcu_node_1:         47656          49022           0.16         635.41      193616.41           3.95         844888        1865423           0.00         764.26     1656226.96           0.89
225       &(&dentry->d_lockref.lock)->rlock:         39791          40179           0.15        1302.08       88851.96           2.21        2790851       12527025           0.10        1910.75     3379714.27           0.27
226			      rcu_node_0:         29203          30064           0.16         786.55     1555573.00          51.74          88963         244254           0.00         398.87      428872.51           1.76
227
228Per cancellare le statistiche::
229
230  # echo 0 > /proc/lock_stat
231