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