brintos

brintos / linux-shallow public Read only

0
0
Text · 6.4 KiB · 87a0dbe Raw
182 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3.. include:: ../disclaimer-ita.rst4 5============================================6Funzionamento del test *Kernel Lock Torture*7============================================8 9CONFIG_LOCK_TORTURE_TEST10========================11 12L'opzione di configurazione CONFIG_LOCK_TORTURE_TEST fornisce un13modulo kernel che esegue delle verifiche che *torturano* le primitive di14sincronizzazione del kernel. Se dovesse servire, il modulo kernel,15'locktorture', può essere generato successivamente su un kernel che16volete verificare. Periodicamente le verifiche stampano messaggi tramite17``printk()`` e che quindi possono essere letti tramite ``dmesg`` (magari18filtrate l'output con ``grep "torture"``). La verifica inizia quando19il modulo viene caricato e termina quando viene rimosso. Questo20programma si basa sulle modalità di verifica di RCU tramite rcutorture.21 22Questa verifica consiste nella creazione di un certo numero di thread23del kernel che acquisiscono un blocco e lo trattengono per una certa24quantità di tempo così da simulare diversi comportamenti nelle sezioni25critiche. La quantità di contese su un blocco può essere simulata26allargando la sezione critica e/o creando più thread.27 28 29Parametri del modulo30====================31 32Questo modulo ha i seguenti parametri:33 34 35Specifici di locktorture36------------------------37 38nwriters_stress39		  Numero di thread del kernel che stresseranno l'acquisizione40		  esclusiva dei blocchi (scrittori). Il valore di base è il41		  doppio del numero di processori attivi presenti.42 43nreaders_stress44		  Numero di thread del kernel che stresseranno l'acquisizione45		  condivisa dei blocchi (lettori). Il valore di base è lo stesso46		  di nwriters_stress. Se l'utente non ha specificato47		  nwriters_stress, allora entrambe i valori corrisponderanno48		  al numero di processori attivi presenti.49 50torture_type51		  Tipo di blocco da verificare. Di base, solo gli spinlock52		  verranno verificati. Questo modulo può verificare anche53		  i seguenti tipi di blocchi:54 55		     - "lock_busted":56				Simula un'incorretta implementazione del57				blocco.58 59		     - "spin_lock":60				coppie di spin_lock() e spin_unlock().61 62		     - "spin_lock_irq":63				coppie di spin_lock_irq() e spin_unlock_irq().64 65		     - "rw_lock":66				coppie di rwlock read/write lock() e unlock().67 68		     - "rw_lock_irq":69				copie di rwlock read/write lock_irq() e70				unlock_irq().71 72		     - "mutex_lock":73				coppie di mutex_lock() e mutex_unlock().74 75		     - "rtmutex_lock":76				coppie di rtmutex_lock() e rtmutex_unlock().77				Il kernel deve avere CONFIG_RT_MUTEXES=y.78 79		     - "rwsem_lock":80				coppie di semafori read/write down() e up().81 82 83Generici dell'ambiente di sviluppo 'torture' (RCU + locking)84------------------------------------------------------------85 86shutdown_secs87		  Numero di secondi prima che la verifica termini e il sistema88		  venga spento.  Il valore di base è zero, il che disabilita89		  la possibilità di terminare e spegnere. Questa funzionalità90		  può essere utile per verifiche automatizzate.91 92onoff_interval93		  Numero di secondi fra ogni tentativo di esecuzione di94		  un'operazione casuale di CPU-hotplug. Di base è zero, il95		  che disabilita la funzionalità di CPU-hotplug. Nei kernel96		  con CONFIG_HOTPLUG_CPU=n, locktorture si rifiuterà, senza97		  dirlo, di effettuare una qualsiasi operazione di98		  CPU-hotplug indipendentemente dal valore specificato in99		  onoff_interval.100 101onoff_holdoff102		  Numero di secondi da aspettare prima di iniziare le103		  operazioni di CPU-hotplug.  Normalmente questo verrebbe104		  usato solamente quando locktorture è compilato come parte105		  integrante del kernel ed eseguito automaticamente all'avvio,106		  in questo caso è utile perché permette di non confondere107		  l'avvio con i processori che vanno e vengono. Questo108		  parametro è utile sono se CONFIG_HOTPLUG_CPU è abilitato.109 110stat_interval111		  Numero di secondi fra una stampa (printk()) delle112		  statistiche e l'altra. Di base, locktorture riporta le113		  statistiche ogni 60 secondi. Impostando l'intervallo a 0114		  ha l'effetto di stampare le statistiche -solo- quando il115		  modulo viene rimosso.116 117stutter118		  Durata della verifica prima di effettuare una pausa di119		  eguale durata. Di base "stutter=5", quindi si eseguono120		  verifiche e pause di (circa) cinque secondi.121		  L'impostazione di "stutter=0" fa si che la verifica122		  venga eseguita continuamente senza fermarsi.123 124shuffle_interval125		  Il numero di secondi per cui un thread debba mantenere126		  l'affinità con un sottoinsieme di processori, di base è127		  3 secondi. Viene usato assieme a test_no_idle_hz.128 129verbose130		  Abilita le stampe di debug, via printk(). Di base è131		  abilitato. Queste informazioni aggiuntive sono per la132		  maggior parte relative ad errori di alto livello e resoconti133		  da parte dell'struttura 'torture'.134 135 136Statistiche137===========138 139Le statistiche vengono stampate secondo il seguente formato::140 141  spin_lock-torture: Writes:  Total: 93746064  Max/Min: 0/0   Fail: 0142     (A)		    (B)		   (C)		  (D)	       (E)143 144  (A): tipo di lock sotto verifica -- parametro torture_type.145 146  (B): Numero di acquisizione del blocco in scrittura. Se si ha a che fare147       con una primitiva di lettura/scrittura apparirà di seguito anche una148       seconda voce "Reads"149 150  (C): Numero di volte che il blocco è stato acquisito151 152  (D): Numero minimo e massimo di volte che un thread ha fallito153       nell'acquisire il blocco154 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 baco157       nell'implementazione delle primitive di sincronizzazione. Altrimenti un158       blocco non dovrebbe mai fallire (per esempio, spin_lock()).159       Ovviamente lo stesso si applica per (C). Un semplice esempio è il tipo160       "lock_busted".161 162Uso163===164 165Il seguente script può essere utilizzato per verificare i blocchi::166 167	#!/bin/sh168 169	modprobe locktorture170	sleep 3600171	rmmod locktorture172	dmesg | grep torture:173 174L'output può essere manualmente ispezionato cercando il marcatore d'errore175"!!!". Ovviamente potreste voler creare degli script più elaborati che176verificano automaticamente la presenza di errori. Il comando "rmmod" forza la177stampa (usando printk()) di "SUCCESS", "FAILURE", oppure "RCU_HOTPLUG". I primi178due si piegano da soli, mentre l'ultimo indica che non stati trovati problemi di179sincronizzazione, tuttavia ne sono stati trovati in CPU-hotplug.180 181Consultate anche: Documentation/translations/it_IT/RCU/torture.rst182