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