tracing: Use guard() rather than scoped_guard()
[drm/drm-misc.git] / Documentation / translations / it_IT / locking / lockstat.rst
blob77972d971d7c5fc11c21fa0dff3f90342699ca87
1 .. SPDX-License-Identifier: GPL-2.0
3 .. include:: ../disclaimer-ita.rst
5 =======================
6 Statistiche sui blocchi
7 =======================
9 Cosa
10 ====
12 Come suggerisce il nome, fornisce statistiche sui blocchi.
15 Perché
16 ======
18 Perché, tanto per fare un esempio, le contese sui blocchi possono influenzare
19 significativamente le prestazioni.
21 Come
22 ====
24 *Lockdep* ha punti di collegamento nelle funzioni di blocco e inoltre
25 mappa le istanze di blocco con le relative classi. Partiamo da questo punto
26 (vedere Documentation/translations/it_IT/locking/lockdep-design.rst).
27 Il grafico sottostante mostra la relazione che intercorre fra le
28 funzioni di blocco e i vari punti di collegamenti che ci sono al loro
29 interno::
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
51   lock, unlock  - le classiche funzioni di blocco
52   __*           - i punti di collegamento
53   <>            - stati
55 Grazie a questi punti di collegamento possiamo fornire le seguenti statistiche:
57 con-bounces
58   - numero di contese su un blocco che riguarda dati di un processore
60 contentions
61   - numero di acquisizioni di blocchi che hanno dovuto attendere
63 wait time
64   min
65     - tempo minimo (diverso da zero) che sia mai stato speso in attesa di
66       un blocco
68   max
69     - tempo massimo che sia mai stato speso in attesa di un blocco
71   total
72     - tempo totale speso in attesa di un blocco
74   avg
75         - tempo medio speso in attesa di un blocco
77 acq-bounces
78   - numero di acquisizioni di blocco che riguardavano i dati su un processore
80 acquisitions
81   - numero di volte che un blocco è stato ottenuto
83 hold time
84   min
85     - tempo minimo (diverso da zero) che sia mai stato speso trattenendo un blocco
87   max
88     - tempo massimo che sia mai stato speso trattenendo un blocco
90   total
91     - tempo totale di trattenimento di un blocco
93   avg
94     - tempo medio di trattenimento di un blocco
96 Questi numeri vengono raccolti per classe di blocco, e per ogni stato di
97 lettura/scrittura (quando applicabile).
99 Inoltre, questa raccolta di statistiche tiene traccia di 4 punti di contesa
100 per classe di blocco. Un punto di contesa è una chiamata che ha dovuto
101 aspettare l'acquisizione di un blocco.
103 Configurazione
104 --------------
106 Le statistiche sui blocchi si abilitano usando l'opzione di configurazione
107 CONFIG_LOCK_STAT.
112 Abilitare la raccolta di statistiche::
114         # echo 1 >/proc/sys/kernel/lock_stat
116 Disabilitare la raccolta di statistiche::
118         # echo 0 >/proc/sys/kernel/lock_stat
120 Per vedere le statistiche correnti sui blocchi::
122   ( i numeri di riga non fanno parte dell'output del comando, ma sono stati
123   aggiunti ai fini di questa spiegazione )
125   # less /proc/lock_stat
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
159 Questo estratto mostra le statistiche delle prime due classi di
160 blocco. La riga 01 mostra la versione dell'output - la versione
161 cambierà ogni volta che cambia il formato. Le righe dalla 02 alla 04
162 rappresentano l'intestazione con la descrizione delle colonne. Le
163 statistiche sono mostrate nelle righe dalla 05 alla 18 e dalla 20
164 alla 31. Queste statistiche sono divise in due parti: le statistiche,
165 seguite dai punti di contesa (righe 08 e 13) separati da un divisore.
167 Le righe dalla 09 alla 12 mostrano i primi quattro punti di contesa
168 registrati (il codice che tenta di acquisire un blocco) e le righe
169 dalla 14 alla 17 mostrano i primi quattro punti contesi registrati
170 (ovvero codice che ha acquisito un blocco). È possibile che nelle
171 statistiche manchi il valore *max con-bounces*.
173 Il primo blocco (righe dalla 05 alla 18) è di tipo lettura/scrittura e quindi
174 mostra due righe prima del divisore. I punti di contesa non corrispondono alla
175 descrizione delle colonne nell'intestazione; essi hanno due colonne: *punti di
176 contesa* e *[<IP>] simboli*. Il secondo gruppo di punti di contesa sono i punti
177 con cui si contende il blocco.
179 La parte interna del tempo è espressa in us (microsecondi).
181 Quando si ha a che fare con blocchi annidati si potrebbero vedere le
182 sottoclassi di blocco::
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
209 La riga 48 mostra le statistiche per la seconda sottoclasse (/1) della
210 classe *&irq->lock* (le sottoclassi partono da 0); in questo caso,
211 come suggerito dalla riga 50, ``double_rq_lock`` tenta di acquisire un blocco
212 annidato di due spinlock.
214 Per vedere i blocco più contesi::
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
228 Per cancellare le statistiche::
230   # echo 0 > /proc/lock_stat