1 .. SPDX-License-Identifier: GPL-2.0
3 .. include:: ../disclaimer-ita.rst
5 ============================================
6 Funzionamento del test *Kernel Lock Torture*
7 ============================================
9 CONFIG_LOCK_TORTURE_TEST
10 ========================
12 L'opzione di configurazione CONFIG_LOCK_TORTURE_TEST fornisce un
13 modulo kernel che esegue delle verifiche che *torturano* le primitive di
14 sincronizzazione del kernel. Se dovesse servire, il modulo kernel,
15 'locktorture', può essere generato successivamente su un kernel che
16 volete verificare. Periodicamente le verifiche stampano messaggi tramite
17 ``printk()`` e che quindi possono essere letti tramite ``dmesg`` (magari
18 filtrate l'output con ``grep "torture"``). La verifica inizia quando
19 il modulo viene caricato e termina quando viene rimosso. Questo
20 programma si basa sulle modalità di verifica di RCU tramite rcutorture.
22 Questa verifica consiste nella creazione di un certo numero di thread
23 del kernel che acquisiscono un blocco e lo trattengono per una certa
24 quantità di tempo così da simulare diversi comportamenti nelle sezioni
25 critiche. La quantità di contese su un blocco può essere simulata
26 allargando la sezione critica e/o creando più thread.
32 Questo modulo ha i seguenti parametri:
35 Specifici di locktorture
36 ------------------------
39 Numero di thread del kernel che stresseranno l'acquisizione
40 esclusiva dei blocchi (scrittori). Il valore di base è il
41 doppio del numero di processori attivi presenti.
44 Numero di thread del kernel che stresseranno l'acquisizione
45 condivisa dei blocchi (lettori). Il valore di base è lo stesso
46 di nwriters_stress. Se l'utente non ha specificato
47 nwriters_stress, allora entrambe i valori corrisponderanno
48 al numero di processori attivi presenti.
51 Tipo di blocco da verificare. Di base, solo gli spinlock
52 verranno verificati. Questo modulo può verificare anche
53 i seguenti tipi di blocchi:
56 Simula un'incorretta implementazione del
60 coppie di spin_lock() e spin_unlock().
63 coppie di spin_lock_irq() e spin_unlock_irq().
66 coppie di rwlock read/write lock() e unlock().
69 copie di rwlock read/write lock_irq() e
73 coppie di mutex_lock() e mutex_unlock().
76 coppie di rtmutex_lock() e rtmutex_unlock().
77 Il kernel deve avere CONFIG_RT_MUTEXES=y.
80 coppie di semafori read/write down() e up().
83 Generici dell'ambiente di sviluppo 'torture' (RCU + locking)
84 ------------------------------------------------------------
87 Numero di secondi prima che la verifica termini e il sistema
88 venga spento. Il valore di base è zero, il che disabilita
89 la possibilità di terminare e spegnere. Questa funzionalità
90 può essere utile per verifiche automatizzate.
93 Numero di secondi fra ogni tentativo di esecuzione di
94 un'operazione casuale di CPU-hotplug. Di base è zero, il
95 che disabilita la funzionalità di CPU-hotplug. Nei kernel
96 con CONFIG_HOTPLUG_CPU=n, locktorture si rifiuterà, senza
97 dirlo, di effettuare una qualsiasi operazione di
98 CPU-hotplug indipendentemente dal valore specificato in
102 Numero di secondi da aspettare prima di iniziare le
103 operazioni di CPU-hotplug. Normalmente questo verrebbe
104 usato solamente quando locktorture è compilato come parte
105 integrante del kernel ed eseguito automaticamente all'avvio,
106 in questo caso è utile perché permette di non confondere
107 l'avvio con i processori che vanno e vengono. Questo
108 parametro è utile sono se CONFIG_HOTPLUG_CPU è abilitato.
111 Numero di secondi fra una stampa (printk()) delle
112 statistiche e l'altra. Di base, locktorture riporta le
113 statistiche ogni 60 secondi. Impostando l'intervallo a 0
114 ha l'effetto di stampare le statistiche -solo- quando il
115 modulo viene rimosso.
118 Durata della verifica prima di effettuare una pausa di
119 eguale durata. Di base "stutter=5", quindi si eseguono
120 verifiche e pause di (circa) cinque secondi.
121 L'impostazione di "stutter=0" fa si che la verifica
122 venga eseguita continuamente senza fermarsi.
125 Il numero di secondi per cui un thread debba mantenere
126 l'affinità con un sottoinsieme di processori, di base è
127 3 secondi. Viene usato assieme a test_no_idle_hz.
130 Abilita le stampe di debug, via printk(). Di base è
131 abilitato. Queste informazioni aggiuntive sono per la
132 maggior parte relative ad errori di alto livello e resoconti
133 da parte dell'struttura 'torture'.
139 Le statistiche vengono stampate secondo il seguente formato::
141 spin_lock-torture: Writes: Total: 93746064 Max/Min: 0/0 Fail: 0
144 (A): tipo di lock sotto verifica -- parametro torture_type.
146 (B): Numero di acquisizione del blocco in scrittura. Se si ha a che fare
147 con una primitiva di lettura/scrittura apparirà di seguito anche una
150 (C): Numero di volte che il blocco è stato acquisito
152 (D): Numero minimo e massimo di volte che un thread ha fallito
153 nell'acquisire il blocco
155 (E): valori true/false nel caso di errori durante l'acquisizione del blocco.
156 Questo dovrebbe dare un riscontro positivo -solo- se c'è un baco
157 nell'implementazione delle primitive di sincronizzazione. Altrimenti un
158 blocco non dovrebbe mai fallire (per esempio, spin_lock()).
159 Ovviamente lo stesso si applica per (C). Un semplice esempio è il tipo
165 Il seguente script può essere utilizzato per verificare i blocchi::
172 dmesg | grep torture:
174 L'output può essere manualmente ispezionato cercando il marcatore d'errore
175 "!!!". Ovviamente potreste voler creare degli script più elaborati che
176 verificano automaticamente la presenza di errori. Il comando "rmmod" forza la
177 stampa (usando printk()) di "SUCCESS", "FAILURE", oppure "RCU_HOTPLUG". I primi
178 due si piegano da soli, mentre l'ultimo indica che non stati trovati problemi di
179 sincronizzazione, tuttavia ne sono stati trovati in CPU-hotplug.
181 Consultate anche: Documentation/translations/it_IT/RCU/torture.rst