xref: /linux/Documentation/translations/it_IT/locking/locktorture.rst (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
1*6151b9c8SFederico Vaga.. SPDX-License-Identifier: GPL-2.0
2*6151b9c8SFederico Vaga
3*6151b9c8SFederico Vaga.. include:: ../disclaimer-ita.rst
4*6151b9c8SFederico Vaga
5*6151b9c8SFederico Vaga============================================
6*6151b9c8SFederico VagaFunzionamento del test *Kernel Lock Torture*
7*6151b9c8SFederico Vaga============================================
8*6151b9c8SFederico Vaga
9*6151b9c8SFederico VagaCONFIG_LOCK_TORTURE_TEST
10*6151b9c8SFederico Vaga========================
11*6151b9c8SFederico Vaga
12*6151b9c8SFederico VagaL'opzione di configurazione CONFIG_LOCK_TORTURE_TEST fornisce un
13*6151b9c8SFederico Vagamodulo kernel che esegue delle verifiche che *torturano* le primitive di
14*6151b9c8SFederico Vagasincronizzazione del kernel. Se dovesse servire, il modulo kernel,
15*6151b9c8SFederico Vaga'locktorture', può essere generato successivamente su un kernel che
16*6151b9c8SFederico Vagavolete verificare. Periodicamente le verifiche stampano messaggi tramite
17*6151b9c8SFederico Vaga``printk()`` e che quindi possono essere letti tramite ``dmesg`` (magari
18*6151b9c8SFederico Vagafiltrate l'output con ``grep "torture"``). La verifica inizia quando
19*6151b9c8SFederico Vagail modulo viene caricato e termina quando viene rimosso. Questo
20*6151b9c8SFederico Vagaprogramma si basa sulle modalità di verifica di RCU tramite rcutorture.
21*6151b9c8SFederico Vaga
22*6151b9c8SFederico VagaQuesta verifica consiste nella creazione di un certo numero di thread
23*6151b9c8SFederico Vagadel kernel che acquisiscono un blocco e lo trattengono per una certa
24*6151b9c8SFederico Vagaquantità di tempo così da simulare diversi comportamenti nelle sezioni
25*6151b9c8SFederico Vagacritiche. La quantità di contese su un blocco può essere simulata
26*6151b9c8SFederico Vagaallargando la sezione critica e/o creando più thread.
27*6151b9c8SFederico Vaga
28*6151b9c8SFederico Vaga
29*6151b9c8SFederico VagaParametri del modulo
30*6151b9c8SFederico Vaga====================
31*6151b9c8SFederico Vaga
32*6151b9c8SFederico VagaQuesto modulo ha i seguenti parametri:
33*6151b9c8SFederico Vaga
34*6151b9c8SFederico Vaga
35*6151b9c8SFederico VagaSpecifici di locktorture
36*6151b9c8SFederico Vaga------------------------
37*6151b9c8SFederico Vaga
38*6151b9c8SFederico Vaganwriters_stress
39*6151b9c8SFederico Vaga		  Numero di thread del kernel che stresseranno l'acquisizione
40*6151b9c8SFederico Vaga		  esclusiva dei blocchi (scrittori). Il valore di base è il
41*6151b9c8SFederico Vaga		  doppio del numero di processori attivi presenti.
42*6151b9c8SFederico Vaga
43*6151b9c8SFederico Vaganreaders_stress
44*6151b9c8SFederico Vaga		  Numero di thread del kernel che stresseranno l'acquisizione
45*6151b9c8SFederico Vaga		  condivisa dei blocchi (lettori). Il valore di base è lo stesso
46*6151b9c8SFederico Vaga		  di nwriters_stress. Se l'utente non ha specificato
47*6151b9c8SFederico Vaga		  nwriters_stress, allora entrambe i valori corrisponderanno
48*6151b9c8SFederico Vaga		  al numero di processori attivi presenti.
49*6151b9c8SFederico Vaga
50*6151b9c8SFederico Vagatorture_type
51*6151b9c8SFederico Vaga		  Tipo di blocco da verificare. Di base, solo gli spinlock
52*6151b9c8SFederico Vaga		  verranno verificati. Questo modulo può verificare anche
53*6151b9c8SFederico Vaga		  i seguenti tipi di blocchi:
54*6151b9c8SFederico Vaga
55*6151b9c8SFederico Vaga		     - "lock_busted":
56*6151b9c8SFederico Vaga				Simula un'incorretta implementazione del
57*6151b9c8SFederico Vaga				blocco.
58*6151b9c8SFederico Vaga
59*6151b9c8SFederico Vaga		     - "spin_lock":
60*6151b9c8SFederico Vaga				coppie di spin_lock() e spin_unlock().
61*6151b9c8SFederico Vaga
62*6151b9c8SFederico Vaga		     - "spin_lock_irq":
63*6151b9c8SFederico Vaga				coppie di spin_lock_irq() e spin_unlock_irq().
64*6151b9c8SFederico Vaga
65*6151b9c8SFederico Vaga		     - "rw_lock":
66*6151b9c8SFederico Vaga				coppie di rwlock read/write lock() e unlock().
67*6151b9c8SFederico Vaga
68*6151b9c8SFederico Vaga		     - "rw_lock_irq":
69*6151b9c8SFederico Vaga				copie di rwlock read/write lock_irq() e
70*6151b9c8SFederico Vaga				unlock_irq().
71*6151b9c8SFederico Vaga
72*6151b9c8SFederico Vaga		     - "mutex_lock":
73*6151b9c8SFederico Vaga				coppie di mutex_lock() e mutex_unlock().
74*6151b9c8SFederico Vaga
75*6151b9c8SFederico Vaga		     - "rtmutex_lock":
76*6151b9c8SFederico Vaga				coppie di rtmutex_lock() e rtmutex_unlock().
77*6151b9c8SFederico Vaga				Il kernel deve avere CONFIG_RT_MUTEXES=y.
78*6151b9c8SFederico Vaga
79*6151b9c8SFederico Vaga		     - "rwsem_lock":
80*6151b9c8SFederico Vaga				coppie di semafori read/write down() e up().
81*6151b9c8SFederico Vaga
82*6151b9c8SFederico Vaga
83*6151b9c8SFederico VagaGenerici dell'ambiente di sviluppo 'torture' (RCU + locking)
84*6151b9c8SFederico Vaga------------------------------------------------------------
85*6151b9c8SFederico Vaga
86*6151b9c8SFederico Vagashutdown_secs
87*6151b9c8SFederico Vaga		  Numero di secondi prima che la verifica termini e il sistema
88*6151b9c8SFederico Vaga		  venga spento.  Il valore di base è zero, il che disabilita
89*6151b9c8SFederico Vaga		  la possibilità di terminare e spegnere. Questa funzionalità
90*6151b9c8SFederico Vaga		  può essere utile per verifiche automatizzate.
91*6151b9c8SFederico Vaga
92*6151b9c8SFederico Vagaonoff_interval
93*6151b9c8SFederico Vaga		  Numero di secondi fra ogni tentativo di esecuzione di
94*6151b9c8SFederico Vaga		  un'operazione casuale di CPU-hotplug. Di base è zero, il
95*6151b9c8SFederico Vaga		  che disabilita la funzionalità di CPU-hotplug. Nei kernel
96*6151b9c8SFederico Vaga		  con CONFIG_HOTPLUG_CPU=n, locktorture si rifiuterà, senza
97*6151b9c8SFederico Vaga		  dirlo, di effettuare una qualsiasi operazione di
98*6151b9c8SFederico Vaga		  CPU-hotplug indipendentemente dal valore specificato in
99*6151b9c8SFederico Vaga		  onoff_interval.
100*6151b9c8SFederico Vaga
101*6151b9c8SFederico Vagaonoff_holdoff
102*6151b9c8SFederico Vaga		  Numero di secondi da aspettare prima di iniziare le
103*6151b9c8SFederico Vaga		  operazioni di CPU-hotplug.  Normalmente questo verrebbe
104*6151b9c8SFederico Vaga		  usato solamente quando locktorture è compilato come parte
105*6151b9c8SFederico Vaga		  integrante del kernel ed eseguito automaticamente all'avvio,
106*6151b9c8SFederico Vaga		  in questo caso è utile perché permette di non confondere
107*6151b9c8SFederico Vaga		  l'avvio con i processori che vanno e vengono. Questo
108*6151b9c8SFederico Vaga		  parametro è utile sono se CONFIG_HOTPLUG_CPU è abilitato.
109*6151b9c8SFederico Vaga
110*6151b9c8SFederico Vagastat_interval
111*6151b9c8SFederico Vaga		  Numero di secondi fra una stampa (printk()) delle
112*6151b9c8SFederico Vaga		  statistiche e l'altra. Di base, locktorture riporta le
113*6151b9c8SFederico Vaga		  statistiche ogni 60 secondi. Impostando l'intervallo a 0
114*6151b9c8SFederico Vaga		  ha l'effetto di stampare le statistiche -solo- quando il
115*6151b9c8SFederico Vaga		  modulo viene rimosso.
116*6151b9c8SFederico Vaga
117*6151b9c8SFederico Vagastutter
118*6151b9c8SFederico Vaga		  Durata della verifica prima di effettuare una pausa di
119*6151b9c8SFederico Vaga		  eguale durata. Di base "stutter=5", quindi si eseguono
120*6151b9c8SFederico Vaga		  verifiche e pause di (circa) cinque secondi.
121*6151b9c8SFederico Vaga		  L'impostazione di "stutter=0" fa si che la verifica
122*6151b9c8SFederico Vaga		  venga eseguita continuamente senza fermarsi.
123*6151b9c8SFederico Vaga
124*6151b9c8SFederico Vagashuffle_interval
125*6151b9c8SFederico Vaga		  Il numero di secondi per cui un thread debba mantenere
126*6151b9c8SFederico Vaga		  l'affinità con un sottoinsieme di processori, di base è
127*6151b9c8SFederico Vaga		  3 secondi. Viene usato assieme a test_no_idle_hz.
128*6151b9c8SFederico Vaga
129*6151b9c8SFederico Vagaverbose
130*6151b9c8SFederico Vaga		  Abilita le stampe di debug, via printk(). Di base è
131*6151b9c8SFederico Vaga		  abilitato. Queste informazioni aggiuntive sono per la
132*6151b9c8SFederico Vaga		  maggior parte relative ad errori di alto livello e resoconti
133*6151b9c8SFederico Vaga		  da parte dell'struttura 'torture'.
134*6151b9c8SFederico Vaga
135*6151b9c8SFederico Vaga
136*6151b9c8SFederico VagaStatistiche
137*6151b9c8SFederico Vaga===========
138*6151b9c8SFederico Vaga
139*6151b9c8SFederico VagaLe statistiche vengono stampate secondo il seguente formato::
140*6151b9c8SFederico Vaga
141*6151b9c8SFederico Vaga  spin_lock-torture: Writes:  Total: 93746064  Max/Min: 0/0   Fail: 0
142*6151b9c8SFederico Vaga     (A)		    (B)		   (C)		  (D)	       (E)
143*6151b9c8SFederico Vaga
144*6151b9c8SFederico Vaga  (A): tipo di lock sotto verifica -- parametro torture_type.
145*6151b9c8SFederico Vaga
146*6151b9c8SFederico Vaga  (B): Numero di acquisizione del blocco in scrittura. Se si ha a che fare
147*6151b9c8SFederico Vaga       con una primitiva di lettura/scrittura apparirà di seguito anche una
148*6151b9c8SFederico Vaga       seconda voce "Reads"
149*6151b9c8SFederico Vaga
150*6151b9c8SFederico Vaga  (C): Numero di volte che il blocco è stato acquisito
151*6151b9c8SFederico Vaga
152*6151b9c8SFederico Vaga  (D): Numero minimo e massimo di volte che un thread ha fallito
153*6151b9c8SFederico Vaga       nell'acquisire il blocco
154*6151b9c8SFederico Vaga
155*6151b9c8SFederico Vaga  (E): valori true/false nel caso di errori durante l'acquisizione del blocco.
156*6151b9c8SFederico Vaga       Questo dovrebbe dare un riscontro positivo -solo- se c'è un baco
157*6151b9c8SFederico Vaga       nell'implementazione delle primitive di sincronizzazione. Altrimenti un
158*6151b9c8SFederico Vaga       blocco non dovrebbe mai fallire (per esempio, spin_lock()).
159*6151b9c8SFederico Vaga       Ovviamente lo stesso si applica per (C). Un semplice esempio è il tipo
160*6151b9c8SFederico Vaga       "lock_busted".
161*6151b9c8SFederico Vaga
162*6151b9c8SFederico VagaUso
163*6151b9c8SFederico Vaga===
164*6151b9c8SFederico Vaga
165*6151b9c8SFederico VagaIl seguente script può essere utilizzato per verificare i blocchi::
166*6151b9c8SFederico Vaga
167*6151b9c8SFederico Vaga	#!/bin/sh
168*6151b9c8SFederico Vaga
169*6151b9c8SFederico Vaga	modprobe locktorture
170*6151b9c8SFederico Vaga	sleep 3600
171*6151b9c8SFederico Vaga	rmmod locktorture
172*6151b9c8SFederico Vaga	dmesg | grep torture:
173*6151b9c8SFederico Vaga
174*6151b9c8SFederico VagaL'output può essere manualmente ispezionato cercando il marcatore d'errore
175*6151b9c8SFederico Vaga"!!!". Ovviamente potreste voler creare degli script più elaborati che
176*6151b9c8SFederico Vagaverificano automaticamente la presenza di errori. Il comando "rmmod" forza la
177*6151b9c8SFederico Vagastampa (usando printk()) di "SUCCESS", "FAILURE", oppure "RCU_HOTPLUG". I primi
178*6151b9c8SFederico Vagadue si piegano da soli, mentre l'ultimo indica che non stati trovati problemi di
179*6151b9c8SFederico Vagasincronizzazione, tuttavia ne sono stati trovati in CPU-hotplug.
180*6151b9c8SFederico Vaga
181*6151b9c8SFederico VagaConsultate anche: Documentation/translations/it_IT/RCU/torture.rst
182