16151b9c8SFederico Vaga.. SPDX-License-Identifier: GPL-2.0 26151b9c8SFederico Vaga 36151b9c8SFederico Vaga.. include:: ../disclaimer-ita.rst 46151b9c8SFederico Vaga 56151b9c8SFederico Vaga======================= 66151b9c8SFederico VagaStatistiche sui blocchi 76151b9c8SFederico Vaga======================= 86151b9c8SFederico Vaga 96151b9c8SFederico VagaCosa 106151b9c8SFederico Vaga==== 116151b9c8SFederico Vaga 126151b9c8SFederico VagaCome suggerisce il nome, fornisce statistiche sui blocchi. 136151b9c8SFederico Vaga 146151b9c8SFederico Vaga 156151b9c8SFederico VagaPerché 166151b9c8SFederico Vaga====== 176151b9c8SFederico Vaga 186151b9c8SFederico VagaPerché, tanto per fare un esempio, le contese sui blocchi possono influenzare 196151b9c8SFederico Vagasignificativamente le prestazioni. 206151b9c8SFederico Vaga 216151b9c8SFederico VagaCome 226151b9c8SFederico Vaga==== 236151b9c8SFederico Vaga 246151b9c8SFederico Vaga*Lockdep* ha punti di collegamento nelle funzioni di blocco e inoltre 256151b9c8SFederico Vagamappa le istanze di blocco con le relative classi. Partiamo da questo punto 266151b9c8SFederico Vaga(vedere Documentation/translations/it_IT/locking/lockdep-design.rst). 276151b9c8SFederico VagaIl grafico sottostante mostra la relazione che intercorre fra le 286151b9c8SFederico Vagafunzioni di blocco e i vari punti di collegamenti che ci sono al loro 296151b9c8SFederico Vagainterno:: 306151b9c8SFederico Vaga 316151b9c8SFederico Vaga __acquire 326151b9c8SFederico Vaga | 336151b9c8SFederico Vaga lock _____ 346151b9c8SFederico Vaga | \ 356151b9c8SFederico Vaga | __contended 366151b9c8SFederico Vaga | | 376151b9c8SFederico Vaga | <wait> 386151b9c8SFederico Vaga | _______/ 396151b9c8SFederico Vaga |/ 406151b9c8SFederico Vaga | 416151b9c8SFederico Vaga __acquired 426151b9c8SFederico Vaga | 436151b9c8SFederico Vaga . 446151b9c8SFederico Vaga <hold> 456151b9c8SFederico Vaga . 466151b9c8SFederico Vaga | 476151b9c8SFederico Vaga __release 486151b9c8SFederico Vaga | 496151b9c8SFederico Vaga unlock 506151b9c8SFederico Vaga 516151b9c8SFederico Vaga lock, unlock - le classiche funzioni di blocco 526151b9c8SFederico Vaga __* - i punti di collegamento 536151b9c8SFederico Vaga <> - stati 546151b9c8SFederico Vaga 556151b9c8SFederico VagaGrazie a questi punti di collegamento possiamo fornire le seguenti statistiche: 566151b9c8SFederico Vaga 576151b9c8SFederico Vagacon-bounces 586151b9c8SFederico Vaga - numero di contese su un blocco che riguarda dati di un processore 596151b9c8SFederico Vaga 606151b9c8SFederico Vagacontentions 616151b9c8SFederico Vaga - numero di acquisizioni di blocchi che hanno dovuto attendere 626151b9c8SFederico Vaga 636151b9c8SFederico Vagawait time 646151b9c8SFederico Vaga min 656151b9c8SFederico Vaga - tempo minimo (diverso da zero) che sia mai stato speso in attesa di 666151b9c8SFederico Vaga un blocco 676151b9c8SFederico Vaga 686151b9c8SFederico Vaga max 696151b9c8SFederico Vaga - tempo massimo che sia mai stato speso in attesa di un blocco 706151b9c8SFederico Vaga 716151b9c8SFederico Vaga total 726151b9c8SFederico Vaga - tempo totale speso in attesa di un blocco 736151b9c8SFederico Vaga 746151b9c8SFederico Vaga avg 756151b9c8SFederico Vaga - tempo medio speso in attesa di un blocco 766151b9c8SFederico Vaga 776151b9c8SFederico Vagaacq-bounces 786151b9c8SFederico Vaga - numero di acquisizioni di blocco che riguardavano i dati su un processore 796151b9c8SFederico Vaga 806151b9c8SFederico Vagaacquisitions 816151b9c8SFederico Vaga - numero di volte che un blocco è stato ottenuto 826151b9c8SFederico Vaga 836151b9c8SFederico Vagahold time 846151b9c8SFederico Vaga min 856151b9c8SFederico Vaga - tempo minimo (diverso da zero) che sia mai stato speso trattenendo un blocco 866151b9c8SFederico Vaga 876151b9c8SFederico Vaga max 886151b9c8SFederico Vaga - tempo massimo che sia mai stato speso trattenendo un blocco 896151b9c8SFederico Vaga 906151b9c8SFederico Vaga total 916151b9c8SFederico Vaga - tempo totale di trattenimento di un blocco 926151b9c8SFederico Vaga 936151b9c8SFederico Vaga avg 946151b9c8SFederico Vaga - tempo medio di trattenimento di un blocco 956151b9c8SFederico Vaga 966151b9c8SFederico VagaQuesti numeri vengono raccolti per classe di blocco, e per ogni stato di 976151b9c8SFederico Vagalettura/scrittura (quando applicabile). 986151b9c8SFederico Vaga 996151b9c8SFederico VagaInoltre, questa raccolta di statistiche tiene traccia di 4 punti di contesa 1006151b9c8SFederico Vagaper classe di blocco. Un punto di contesa è una chiamata che ha dovuto 1016151b9c8SFederico Vagaaspettare l'acquisizione di un blocco. 1026151b9c8SFederico Vaga 1036151b9c8SFederico VagaConfigurazione 1046151b9c8SFederico Vaga-------------- 1056151b9c8SFederico Vaga 1066151b9c8SFederico VagaLe statistiche sui blocchi si abilitano usando l'opzione di configurazione 1076151b9c8SFederico VagaCONFIG_LOCK_STAT. 1086151b9c8SFederico Vaga 1096151b9c8SFederico VagaUso 1106151b9c8SFederico Vaga--- 1116151b9c8SFederico Vaga 1126151b9c8SFederico VagaAbilitare la raccolta di statistiche:: 1136151b9c8SFederico Vaga 1146151b9c8SFederico Vaga # echo 1 >/proc/sys/kernel/lock_stat 1156151b9c8SFederico Vaga 1166151b9c8SFederico VagaDisabilitare la raccolta di statistiche:: 1176151b9c8SFederico Vaga 1186151b9c8SFederico Vaga # echo 0 >/proc/sys/kernel/lock_stat 1196151b9c8SFederico Vaga 1206151b9c8SFederico VagaPer vedere le statistiche correnti sui blocchi:: 1216151b9c8SFederico Vaga 1226151b9c8SFederico Vaga ( i numeri di riga non fanno parte dell'output del comando, ma sono stati 1236151b9c8SFederico Vaga aggiunti ai fini di questa spiegazione ) 1246151b9c8SFederico Vaga 1256151b9c8SFederico Vaga # less /proc/lock_stat 1266151b9c8SFederico Vaga 1276151b9c8SFederico Vaga 01 lock_stat version 0.4 1286151b9c8SFederico Vaga 02----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1296151b9c8SFederico Vaga 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 1306151b9c8SFederico Vaga 04----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1316151b9c8SFederico Vaga 05 1326151b9c8SFederico Vaga 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 1336151b9c8SFederico Vaga 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 1346151b9c8SFederico Vaga 08 --------------- 1356151b9c8SFederico Vaga 09 &mm->mmap_sem 1 [<ffffffff811502a7>] khugepaged_scan_mm_slot+0x57/0x280 1366151b9c8SFederico Vaga 10 &mm->mmap_sem 96 [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510 1376151b9c8SFederico Vaga 11 &mm->mmap_sem 34 [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0 1386151b9c8SFederico Vaga 12 &mm->mmap_sem 17 [<ffffffff81127e71>] vm_munmap+0x41/0x80 1396151b9c8SFederico Vaga 13 --------------- 1406151b9c8SFederico Vaga 14 &mm->mmap_sem 1 [<ffffffff81046fda>] dup_mmap+0x2a/0x3f0 1416151b9c8SFederico Vaga 15 &mm->mmap_sem 60 [<ffffffff81129e29>] SyS_mprotect+0xe9/0x250 1426151b9c8SFederico Vaga 16 &mm->mmap_sem 41 [<ffffffff815351c4>] __do_page_fault+0x1d4/0x510 1436151b9c8SFederico Vaga 17 &mm->mmap_sem 68 [<ffffffff81113d77>] vm_mmap_pgoff+0x87/0xd0 1446151b9c8SFederico Vaga 18 1456151b9c8SFederico Vaga 19............................................................................................................................................................................................................................. 1466151b9c8SFederico Vaga 20 1476151b9c8SFederico Vaga 21 unix_table_lock: 110 112 0.21 49.24 163.91 1.46 21094 66312 0.12 624.42 31589.81 0.48 1486151b9c8SFederico Vaga 22 --------------- 1496151b9c8SFederico Vaga 23 unix_table_lock 45 [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0 1506151b9c8SFederico Vaga 24 unix_table_lock 47 [<ffffffff8150b111>] unix_release_sock+0x31/0x250 1516151b9c8SFederico Vaga 25 unix_table_lock 15 [<ffffffff8150ca37>] unix_find_other+0x117/0x230 1526151b9c8SFederico Vaga 26 unix_table_lock 5 [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0 1536151b9c8SFederico Vaga 27 --------------- 1546151b9c8SFederico Vaga 28 unix_table_lock 39 [<ffffffff8150b111>] unix_release_sock+0x31/0x250 1556151b9c8SFederico Vaga 29 unix_table_lock 49 [<ffffffff8150ad8e>] unix_create1+0x16e/0x1b0 1566151b9c8SFederico Vaga 30 unix_table_lock 20 [<ffffffff8150ca37>] unix_find_other+0x117/0x230 1576151b9c8SFederico Vaga 31 unix_table_lock 4 [<ffffffff8150a09f>] unix_autobind+0x11f/0x1b0 1586151b9c8SFederico Vaga 1596151b9c8SFederico VagaQuesto estratto mostra le statistiche delle prime due classi di 1606151b9c8SFederico Vagablocco. La riga 01 mostra la versione dell'output - la versione 1616151b9c8SFederico Vagacambierà ogni volta che cambia il formato. Le righe dalla 02 alla 04 1626151b9c8SFederico Vagarappresentano l'intestazione con la descrizione delle colonne. Le 1636151b9c8SFederico Vagastatistiche sono mostrate nelle righe dalla 05 alla 18 e dalla 20 1646151b9c8SFederico Vagaalla 31. Queste statistiche sono divise in due parti: le statistiche, 1656151b9c8SFederico Vagaseguite dai punti di contesa (righe 08 e 13) separati da un divisore. 1666151b9c8SFederico Vaga 1676151b9c8SFederico VagaLe righe dalla 09 alla 12 mostrano i primi quattro punti di contesa 1686151b9c8SFederico Vagaregistrati (il codice che tenta di acquisire un blocco) e le righe 1696151b9c8SFederico Vagadalla 14 alla 17 mostrano i primi quattro punti contesi registrati 1706151b9c8SFederico Vaga(ovvero codice che ha acquisito un blocco). È possibile che nelle 1716151b9c8SFederico Vagastatistiche manchi il valore *max con-bounces*. 1726151b9c8SFederico Vaga 1736151b9c8SFederico VagaIl primo blocco (righe dalla 05 alla 18) è di tipo lettura/scrittura e quindi 1746151b9c8SFederico Vagamostra due righe prima del divisore. I punti di contesa non corrispondono alla 1756151b9c8SFederico Vagadescrizione delle colonne nell'intestazione; essi hanno due colonne: *punti di 1766151b9c8SFederico Vagacontesa* e *[<IP>] simboli*. Il secondo gruppo di punti di contesa sono i punti 1776151b9c8SFederico Vagacon cui si contende il blocco. 1786151b9c8SFederico Vaga 1796151b9c8SFederico VagaLa parte interna del tempo è espressa in us (microsecondi). 1806151b9c8SFederico Vaga 1816151b9c8SFederico VagaQuando si ha a che fare con blocchi annidati si potrebbero vedere le 1826151b9c8SFederico Vagasottoclassi di blocco:: 1836151b9c8SFederico Vaga 1846151b9c8SFederico Vaga 32........................................................................................................................................................................................................................... 1856151b9c8SFederico Vaga 33 1866151b9c8SFederico Vaga 34 &rq->lock: 13128 13128 0.43 190.53 103881.26 7.91 97454 3453404 0.00 401.11 13224683.11 3.82 1876151b9c8SFederico Vaga 35 --------- 1886151b9c8SFederico Vaga 36 &rq->lock 645 [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75 1896151b9c8SFederico Vaga 37 &rq->lock 297 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a 1906151b9c8SFederico Vaga 38 &rq->lock 360 [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a 1916151b9c8SFederico Vaga 39 &rq->lock 428 [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb 1926151b9c8SFederico Vaga 40 --------- 1936151b9c8SFederico Vaga 41 &rq->lock 77 [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75 1946151b9c8SFederico Vaga 42 &rq->lock 174 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a 1956151b9c8SFederico Vaga 43 &rq->lock 4715 [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54 1966151b9c8SFederico Vaga 44 &rq->lock 893 [<ffffffff81340524>] schedule+0x157/0x7b8 1976151b9c8SFederico Vaga 45 1986151b9c8SFederico Vaga 46........................................................................................................................................................................................................................... 1996151b9c8SFederico Vaga 47 2006151b9c8SFederico Vaga 48 &rq->lock/1: 1526 11488 0.33 388.73 136294.31 11.86 21461 38404 0.00 37.93 109388.53 2.84 2016151b9c8SFederico Vaga 49 ----------- 2026151b9c8SFederico Vaga 50 &rq->lock/1 11526 [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54 2036151b9c8SFederico Vaga 51 ----------- 2046151b9c8SFederico Vaga 52 &rq->lock/1 5645 [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54 2056151b9c8SFederico Vaga 53 &rq->lock/1 1224 [<ffffffff81340524>] schedule+0x157/0x7b8 2066151b9c8SFederico Vaga 54 &rq->lock/1 4336 [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54 2076151b9c8SFederico Vaga 55 &rq->lock/1 181 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a 2086151b9c8SFederico Vaga 2096151b9c8SFederico VagaLa riga 48 mostra le statistiche per la seconda sottoclasse (/1) della 2106151b9c8SFederico Vagaclasse *&irq->lock* (le sottoclassi partono da 0); in questo caso, 2116151b9c8SFederico Vagacome suggerito dalla riga 50, ``double_rq_lock`` tenta di acquisire un blocco 2126151b9c8SFederico Vagaannidato di due spinlock. 2136151b9c8SFederico Vaga 2146151b9c8SFederico VagaPer vedere i blocco più contesi:: 2156151b9c8SFederico Vaga 2166151b9c8SFederico Vaga # grep : /proc/lock_stat | head 2176151b9c8SFederico Vaga clockevents_lock: 2926159 2947636 0.15 46882.81 1784540466.34 605.41 3381345 3879161 0.00 2260.97 53178395.68 13.71 2186151b9c8SFederico Vaga tick_broadcast_lock: 346460 346717 0.18 2257.43 39364622.71 113.54 3642919 4242696 0.00 2263.79 49173646.60 11.59 2196151b9c8SFederico Vaga &mapping->i_mmap_mutex: 203896 203899 3.36 645530.05 31767507988.39 155800.21 3361776 8893984 0.17 2254.15 14110121.02 1.59 2206151b9c8SFederico Vaga &rq->lock: 135014 136909 0.18 606.09 842160.68 6.15 1540728 10436146 0.00 728.72 17606683.41 1.69 2216151b9c8SFederico Vaga &(&zone->lru_lock)->rlock: 93000 94934 0.16 59.18 188253.78 1.98 1199912 3809894 0.15 391.40 3559518.81 0.93 2226151b9c8SFederico Vaga tasklist_lock-W: 40667 41130 0.23 1189.42 428980.51 10.43 270278 510106 0.16 653.51 3939674.91 7.72 2236151b9c8SFederico Vaga tasklist_lock-R: 21298 21305 0.20 1310.05 215511.12 10.12 186204 241258 0.14 1162.33 1179779.23 4.89 2246151b9c8SFederico Vaga rcu_node_1: 47656 49022 0.16 635.41 193616.41 3.95 844888 1865423 0.00 764.26 1656226.96 0.89 2256151b9c8SFederico Vaga &(&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 2266151b9c8SFederico Vaga rcu_node_0: 29203 30064 0.16 786.55 1555573.00 51.74 88963 244254 0.00 398.87 428872.51 1.76 2276151b9c8SFederico Vaga 2286151b9c8SFederico VagaPer cancellare le statistiche:: 2296151b9c8SFederico Vaga 2306151b9c8SFederico Vaga # echo 0 > /proc/lock_stat 231