€•ˆçŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒEnglish”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ /RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Simplified)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_CN/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/RCU/torture”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒItalian”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/translations/it_IT/RCU/torture.rst”h´KubhŒwarning”“”)”}”(hŒ×In caso di dubbi sulla correttezza del contenuto di questa traduzione, l'unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le :ref:`avvertenze `.”h]”hŒ paragraph”“”)”}”(hŒ×In caso di dubbi sulla correttezza del contenuto di questa traduzione, l'unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le :ref:`avvertenze `.”h]”(hŒ·In caso di dubbi sulla correttezza del contenuto di questa traduzione, l’unico riferimento valido è la documentazione ufficiale in inglese. Per maggiori informazioni consultate le ”…””}”(hhÐh²hh³Nh´Nubh)”}”(hŒ!:ref:`avvertenze `”h]”hŒinline”“”)”}”(hhÚh]”hŒ avvertenze”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÜhhØubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œtranslations/it_IT/RCU/torture”Œ refdomain”héŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ it_disclaimer”uh1hh³Œ3Documentation/translations/it_IT/disclaimer-ita.rst”h´KhhÐubhŒ.”…””}”(hhÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hýh´KhhÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhhh²hh³hýh´NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ,Le operazioni RCU per le verifiche *torture*”h]”(hŒ#Le operazioni RCU per le verifiche ”…””}”(hjh²hh³Nh´NubhŒemphasis”“”)”}”(hŒ *torture*”h]”hŒtorture”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Kubj)”}”(hhh]”(j)”}”(hŒCONFIG_RCU_TORTURE_TEST”h]”hŒCONFIG_RCU_TORTURE_TEST”…””}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3h²hh³hÇh´K ubhÏ)”}”(hXL'opzione CONFIG_RCU_TORTURE_TEST è disponibile per tutte le implementazione di RCU. L'opzione creerà un modulo rcutorture che potrete caricare per avviare le verifiche. La verifica userà printk() per riportare lo stato, dunque potrete visualizzarlo con dmesg (magari usate grep per filtrare "torture"). Le verifiche inizieranno al caricamento, e si fermeranno alla sua rimozione.”h]”hX‡L’opzione CONFIG_RCU_TORTURE_TEST è disponibile per tutte le implementazione di RCU. L’opzione creerà un modulo rcutorture che potrete caricare per avviare le verifiche. La verifica userà printk() per riportare lo stato, dunque potrete visualizzarlo con dmesg (magari usate grep per filtrare “tortureâ€). Le verifiche inizieranno al caricamento, e si fermeranno alla sua rimozione.”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K hj3h²hubhÏ)”}”(hŒtI parametri di modulo hanno tutti il prefisso "rcutortute.", vedere Documentation/admin-guide/kernel-parameters.txt.”h]”hŒxI parametri di modulo hanno tutti il prefisso “rcutortute.â€, vedere Documentation/admin-guide/kernel-parameters.txt.”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Khj3h²hubeh}”(h]”Œconfig-rcu-torture-test”ah ]”h"]”Œconfig_rcu_torture_test”ah$]”h&]”uh1jhjh²hh³hÇh´K ubj)”}”(hhh]”(j)”}”(hŒRapporto”h]”hŒRapporto”…””}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhh²hh³hÇh´KubhÏ)”}”(hŒ;Il rapporto sulle verifiche si presenta nel seguente modo::”h]”hŒ:Il rapporto sulle verifiche si presenta nel seguente modo:”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Khjhh²hubhŒ literal_block”“”)”}”(hXsrcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4 rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767 rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0 rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0 rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0 rcu-torture:--- End of test: SUCCESS: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4”h]”hXsrcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4 rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767 rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0 rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0 rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0 rcu-torture:--- End of test: SUCCESS: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4”…””}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´Khjhh²hubhÏ)”}”(hX4Sulla maggior parte dei sistemi questo rapporto si produce col comando "dmesg | grep torture:". Su configurazioni più esoteriche potrebbe essere necessario usare altri comandi per visualizzare i messaggi di printk(). La funzione printk() usa KERN_ALERT, dunque i messaggi dovrebbero essere ben visibili. ;-)”h]”hX8Sulla maggior parte dei sistemi questo rapporto si produce col comando “dmesg | grep torture:â€. Su configurazioni più esoteriche potrebbe essere necessario usare altri comandi per visualizzare i messaggi di printk(). La funzione printk() usa KERN_ALERT, dunque i messaggi dovrebbero essere ben visibili. ;-)”…””}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K!hjhh²hubhÏ)”}”(hŒÕLa prima e l'ultima riga mostrano i parametri di module di rcutorture, e solo sull'ultima riga abbiamo il risultato finale delle verifiche effettuate che può essere "SUCCESS" (successo) or "FAILURE" (insuccesso).”h]”hŒáLa prima e l’ultima riga mostrano i parametri di module di rcutorture, e solo sull’ultima riga abbiamo il risultato finale delle verifiche effettuate che può essere “SUCCESS†(successo) or “FAILURE†(insuccesso).”…””}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K&hjhh²hubhÏ)”}”(hŒLe voci sono le seguenti:”h]”hŒLe voci sono le seguenti:”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K*hjhh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒU"rtc": L'indirizzo in esadecimale della struttura attualmente visibile dai lettori. ”h]”hŒdefinition_list”“”)”}”(hhh]”hŒdefinition_list_item”“”)”}”(hŒT"rtc": L'indirizzo in esadecimale della struttura attualmente visibile dai lettori. ”h]”(hŒterm”“”)”}”(hŒJ"rtc": L'indirizzo in esadecimale della struttura attualmente visibile dai”h]”hŒP“rtcâ€: L’indirizzo in esadecimale della struttura attualmente visibile dai”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÇh´K-hjÓubhŒ definition”“”)”}”(hhh]”hÏ)”}”(hŒlettori.”h]”hŒlettori.”…””}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K-hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³hÇh´K-hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³Nh´NubjÇ)”}”(hŒs"ver": Il numero di volte dall'avvio che il processo scrittore di RCU ha cambiato la struttura visible ai lettori. ”h]”hÏ)”}”(hŒr"ver": Il numero di volte dall'avvio che il processo scrittore di RCU ha cambiato la struttura visible ai lettori.”h]”hŒx“verâ€: Il numero di volte dall’avvio che il processo scrittore di RCU ha cambiato la struttura visible ai lettori.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K/hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒÜ"tfle": se non è zero, indica la lista di strutture "torture freelist" da mettere in "rtc" è vuota. Questa condizione è importante perché potrebbe illuderti che RCU stia funzionando mentre invece non è il caso. :-/ ”h]”hÏ)”}”(hŒÛ"tfle": se non è zero, indica la lista di strutture "torture freelist" da mettere in "rtc" è vuota. Questa condizione è importante perché potrebbe illuderti che RCU stia funzionando mentre invece non è il caso. :-/”h]”hŒç“tfleâ€: se non è zero, indica la lista di strutture “torture freelist†da mettere in “rtc†è vuota. Questa condizione è importante perché potrebbe illuderti che RCU stia funzionando mentre invece non è il caso. :-/”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K2hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒD"rta": numero di strutture allocate dalla lista "torture freelist". ”h]”hÏ)”}”(hŒC"rta": numero di strutture allocate dalla lista "torture freelist".”h]”hŒK“rtaâ€: numero di strutture allocate dalla lista “torture freelistâ€.”…””}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K6hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒê"rtaf": il numero di allocazioni fallite dalla lista "torture freelist" a causa del fatto che fosse vuota. Non è inusuale che sia diverso da zero, ma è un brutto segno se questo numero rappresenta una frazione troppo alta di "rta". ”h]”hÏ)”}”(hŒé"rtaf": il numero di allocazioni fallite dalla lista "torture freelist" a causa del fatto che fosse vuota. Non è inusuale che sia diverso da zero, ma è un brutto segno se questo numero rappresenta una frazione troppo alta di "rta".”h]”hŒõ“rtafâ€: il numero di allocazioni fallite dalla lista “torture freelist†a causa del fatto che fosse vuota. Non è inusuale che sia diverso da zero, ma è un brutto segno se questo numero rappresenta una frazione troppo alta di “rtaâ€.”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K8hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒ;"rtf": il numero di rilasci nella lista "torture freelist" ”h]”hÏ)”}”(hŒ:"rtf": il numero di rilasci nella lista "torture freelist"”h]”hŒB“rtfâ€: il numero di rilasci nella lista “torture freelist—…””}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K=hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒª"rtmbe": Un valore diverso da zero indica che rcutorture crede che rcu_assign_pointer() e rcu_dereference() non funzionino correttamente. Il valore dovrebbe essere zero. ”h]”hÏ)”}”(hŒ©"rtmbe": Un valore diverso da zero indica che rcutorture crede che rcu_assign_pointer() e rcu_dereference() non funzionino correttamente. Il valore dovrebbe essere zero.”h]”hŒ­â€œrtmbeâ€: Un valore diverso da zero indica che rcutorture crede che rcu_assign_pointer() e rcu_dereference() non funzionino correttamente. Il valore dovrebbe essere zero.”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K?hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒt"rtbe": un valore diverso da zero indica che le funzioni della famiglia rcu_barrier() non funzionano correttamente. ”h]”hÏ)”}”(hŒs"rtbe": un valore diverso da zero indica che le funzioni della famiglia rcu_barrier() non funzionano correttamente.”h]”hŒw“rtbeâ€: un valore diverso da zero indica che le funzioni della famiglia rcu_barrier() non funzionano correttamente.”…””}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KChj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒ’"rtbke": rcutorture è stato capace di creare dei kthread real-time per forzare l'inversione di priorità di RCU. Il valore dovrebbe essere zero. ”h]”hÏ)”}”(hŒ‘"rtbke": rcutorture è stato capace di creare dei kthread real-time per forzare l'inversione di priorità di RCU. Il valore dovrebbe essere zero.”h]”hŒ—“rtbkeâ€: rcutorture è stato capace di creare dei kthread real-time per forzare l’inversione di priorità di RCU. Il valore dovrebbe essere zero.”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KFhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒÔ"rtbre": sebbene rcutorture sia riuscito a creare dei kthread capaci di forzare l'inversione di priorità, non è riuscito però ad impostarne la priorità real-time al livello 1. Il valore dovrebbe essere zero. ”h]”hÏ)”}”(hŒÓ"rtbre": sebbene rcutorture sia riuscito a creare dei kthread capaci di forzare l'inversione di priorità, non è riuscito però ad impostarne la priorità real-time al livello 1. Il valore dovrebbe essere zero.”h]”hŒÙ“rtbreâ€: sebbene rcutorture sia riuscito a creare dei kthread capaci di forzare l’inversione di priorità, non è riuscito però ad impostarne la priorità real-time al livello 1. Il valore dovrebbe essere zero.”…””}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KIhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒe"rtbf": Il numero di volte che è fallita la promozione della priorità per risolvere un'inversione. ”h]”hÏ)”}”(hŒd"rtbf": Il numero di volte che è fallita la promozione della priorità per risolvere un'inversione.”h]”hŒj“rtbfâ€: Il numero di volte che è fallita la promozione della priorità per risolvere un’inversione.”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KMhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒÓ"rtb": Il numero di volte che rcutorture ha provato a forzare l'inversione di priorità. Il valore dovrebbe essere diverso da zero Se state verificando la promozione della priorità col parametro "test_bootst". ”h]”hÏ)”}”(hŒÒ"rtb": Il numero di volte che rcutorture ha provato a forzare l'inversione di priorità. Il valore dovrebbe essere diverso da zero Se state verificando la promozione della priorità col parametro "test_bootst".”h]”hŒÜ“rtbâ€: Il numero di volte che rcutorture ha provato a forzare l’inversione di priorità. Il valore dovrebbe essere diverso da zero Se state verificando la promozione della priorità col parametro “test_bootstâ€.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KPhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hŒË"nt": il numero di volte che rcutorture ha eseguito codice lato lettura all'interno di un gestore di *timer*. Questo valore dovrebbe essere diverso da zero se avete specificato il parametro "irqreader". ”h]”hÏ)”}”(hŒÊ"nt": il numero di volte che rcutorture ha eseguito codice lato lettura all'interno di un gestore di *timer*. Questo valore dovrebbe essere diverso da zero se avete specificato il parametro "irqreader".”h]”(hŒk“ntâ€: il numero di volte che rcutorture ha eseguito codice lato lettura all’interno di un gestore di ”…””}”(hjh²hh³Nh´Nubj)”}”(hŒ*timer*”h]”hŒtimer”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒb. Questo valore dovrebbe essere diverso da zero se avete specificato il parametro “irqreaderâ€.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KThjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hX§"Reader Pipe": un istogramma dell'età delle strutture viste dai lettori. RCU non funziona correttamente se una qualunque voce, dalla terza in poi, ha un valore diverso da zero. Se dovesse succedere, rcutorture stampa la stringa "!!!" per renderlo ben visibile. L'età di una struttura appena creata è zero, diventerà uno quando sparisce dalla visibilità di un lettore, e incrementata successivamente per ogni periodo di grazia; infine rilasciata dopo essere passata per (RCU_TORTURE_PIPE_LEN-2) periodi di grazia. L'istantanea qui sopra è stata presa da una corretta implementazione di RCU. Se volete vedere come appare quando non funziona, sbizzarritevi nel romperla. ;-) ”h]”(hÏ)”}”(hX"Reader Pipe": un istogramma dell'età delle strutture viste dai lettori. RCU non funziona correttamente se una qualunque voce, dalla terza in poi, ha un valore diverso da zero. Se dovesse succedere, rcutorture stampa la stringa "!!!" per renderlo ben visibile. L'età di una struttura appena creata è zero, diventerà uno quando sparisce dalla visibilità di un lettore, e incrementata successivamente per ogni periodo di grazia; infine rilasciata dopo essere passata per (RCU_TORTURE_PIPE_LEN-2) periodi di grazia.”h]”hX“Reader Pipeâ€: un istogramma dell’età delle strutture viste dai lettori. RCU non funziona correttamente se una qualunque voce, dalla terza in poi, ha un valore diverso da zero. Se dovesse succedere, rcutorture stampa la stringa “!!!†per renderlo ben visibile. L’età di una struttura appena creata è zero, diventerà uno quando sparisce dalla visibilità di un lettore, e incrementata successivamente per ogni periodo di grazia; infine rilasciata dopo essere passata per (RCU_TORTURE_PIPE_LEN-2) periodi di grazia.”…””}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KXhjDubhÏ)”}”(hŒŸL'istantanea qui sopra è stata presa da una corretta implementazione di RCU. Se volete vedere come appare quando non funziona, sbizzarritevi nel romperla. ;-)”h]”hŒ¡L’istantanea qui sopra è stata presa da una corretta implementazione di RCU. Se volete vedere come appare quando non funziona, sbizzarritevi nel romperla. ;-)”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K`hjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hXT"Reader Batch": un istogramma di età di strutture viste dai lettori, ma conteggiata in termini di lotti piuttosto che periodi. Anche qui dalla terza voce in poi devono essere zero. La ragione d'esistere di questo rapporto è che a volte è più facile scatenare un terzo valore diverso da zero qui piuttosto che nella lista "Reader Pipe". ”h]”hÏ)”}”(hXS"Reader Batch": un istogramma di età di strutture viste dai lettori, ma conteggiata in termini di lotti piuttosto che periodi. Anche qui dalla terza voce in poi devono essere zero. La ragione d'esistere di questo rapporto è che a volte è più facile scatenare un terzo valore diverso da zero qui piuttosto che nella lista "Reader Pipe".”h]”hX]“Reader Batchâ€: un istogramma di età di strutture viste dai lettori, ma conteggiata in termini di lotti piuttosto che periodi. Anche qui dalla terza voce in poi devono essere zero. La ragione d’esistere di questo rapporto è che a volte è più facile scatenare un terzo valore diverso da zero qui piuttosto che nella lista “Reader Pipeâ€.”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kdhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´NubjÇ)”}”(hX"Free-Block Circulation": il numero di strutture *torture* che hanno raggiunto un certo punto nella catena. Il primo numero dovrebbe corrispondere strettamente al numero di strutture allocate; il secondo conta quelle rimosse dalla vista dei lettori. Ad eccezione dell'ultimo valore, gli altri corrispondono al numero di passaggi attraverso il periodo di grazia. L'ultimo valore dovrebbe essere zero, perché viene incrementato solo se il contatore della struttura torture viene in un qualche modo incrementato oltre il normale. ”h]”hÏ)”}”(hX"Free-Block Circulation": il numero di strutture *torture* che hanno raggiunto un certo punto nella catena. Il primo numero dovrebbe corrispondere strettamente al numero di strutture allocate; il secondo conta quelle rimosse dalla vista dei lettori. Ad eccezione dell'ultimo valore, gli altri corrispondono al numero di passaggi attraverso il periodo di grazia. L'ultimo valore dovrebbe essere zero, perché viene incrementato solo se il contatore della struttura torture viene in un qualche modo incrementato oltre il normale.”h]”(hŒ5“Free-Block Circulationâ€: il numero di strutture ”…””}”(hj†h²hh³Nh´Nubj)”}”(hŒ *torture*”h]”hŒtorture”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubhXÙ che hanno raggiunto un certo punto nella catena. Il primo numero dovrebbe corrispondere strettamente al numero di strutture allocate; il secondo conta quelle rimosse dalla vista dei lettori. Ad eccezione dell’ultimo valore, gli altri corrispondono al numero di passaggi attraverso il periodo di grazia. L’ultimo valore dovrebbe essere zero, perché viene incrementato solo se il contatore della struttura torture viene in un qualche modo incrementato oltre il normale.”…””}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kjhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÆhjÃh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jÁh³hÇh´K,hjhh²hubhÏ)”}”(hŒ‡Una diversa implementazione di RCU potrebbe fornire informazioni aggiuntive. Per esempio, *Tree SRCU* fornisce anche la seguente riga::”h]”(hŒZUna diversa implementazione di RCU potrebbe fornire informazioni aggiuntive. Per esempio, ”…””}”(hj´h²hh³Nh´Nubj)”}”(hŒ *Tree SRCU*”h]”hŒ Tree SRCU”…””}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ! fornisce anche la seguente riga:”…””}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kshjhh²hubjˆ)”}”(hŒysrcud-torture: Tree SRCU per-CPU(idx=0): 0(35,-21) 1(-4,24) 2(1,1) 3(-26,20) 4(28,-47) 5(-9,4) 6(-10,14) 7(-14,11) T(1,6)”h]”hŒysrcud-torture: Tree SRCU per-CPU(idx=0): 0(35,-21) 1(-4,24) 2(1,1) 3(-26,20) 4(28,-47) 5(-9,4) 6(-10,14) 7(-14,11) T(1,6)”…””}”hjÔsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´Kvhjhh²hubhÏ)”}”(hX Questa riga mostra lo stato dei contatori per processore, in questo caso per *Tree SRCU*, usando un'allocazione dinamica di srcu_struct (dunque "srcud-" piuttosto che "srcu-"). I numeri fra parentesi sono i valori del "vecchio" contatore e di quello "corrente" per ogni processore. Il valore "idx" mappa questi due valori nell'array, ed è utile per il *debug*. La "T" finale contiene il valore totale dei contatori.”h]”(hŒMQuesta riga mostra lo stato dei contatori per processore, in questo caso per ”…””}”(hjâh²hh³Nh´Nubj)”}”(hŒ *Tree SRCU*”h]”hŒ Tree SRCU”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubhX!, usando un’allocazione dinamica di srcu_struct (dunque “srcud-†piuttosto che “srcu-“). I numeri fra parentesi sono i valori del “vecchio†contatore e di quello “corrente†per ogni processore. Il valore “idx†mappa questi due valori nell’array, ed è utile per il ”…””}”(hjâh²hh³Nh´Nubj)”}”(hŒ*debug*”h]”hŒdebug”…””}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubhŒ<. La “T†finale contiene il valore totale dei contatori.”…””}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kxhjhh²hubeh}”(h]”Œrapporto”ah ]”h"]”Œrapporto”ah$]”h&]”uh1jhjh²hh³hÇh´Kubj)”}”(hhh]”(j)”}”(hŒUso su specifici kernel”h]”hŒUso su specifici kernel”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´K€ubhÏ)”}”(hX%A volte può essere utile eseguire RCU torture su un kernel già compilato, ad esempio quando lo si sta per mettere in proeduzione. In questo caso, il kernel dev'essere compilato con CONFIG_RCU_TORTURE_TEST=m, cosicché le verifiche possano essere avviate usano modprobe e terminate con rmmod.”h]”hX'A volte può essere utile eseguire RCU torture su un kernel già compilato, ad esempio quando lo si sta per mettere in proeduzione. In questo caso, il kernel dev’essere compilato con CONFIG_RCU_TORTURE_TEST=m, cosicché le verifiche possano essere avviate usano modprobe e terminate con rmmod.”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K‚hjh²hubhÏ)”}”(hŒ+Per esempio, potreste usare questo script::”h]”hŒ*Per esempio, potreste usare questo script:”…””}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K‡hjh²hubjˆ)”}”(hŒP#!/bin/sh modprobe rcutorture sleep 3600 rmmod rcutorture dmesg | grep torture:”h]”hŒP#!/bin/sh modprobe rcutorture sleep 3600 rmmod rcutorture dmesg | grep torture:”…””}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´K‰hjh²hubhÏ)”}”(hXÁPotete controllare il rapporto verificando manualmente la presenza del marcatore di errore "!!!". Ovviamente, siete liberi di scriverne uno più elaborato che identifichi automaticamente gli errori. Il comando "rmmod" forza la stampa di "SUCCESS" (successo), "FAILURE" (fallimento), o "RCU_HOTPLUG". I primi due sono autoesplicativi; invece, l'ultimo indica che non son stati trovati problemi in RCU, tuttavia ci sono stati problemi con CPU-hotplug.”h]”hX×Potete controllare il rapporto verificando manualmente la presenza del marcatore di errore “!!!â€. Ovviamente, siete liberi di scriverne uno più elaborato che identifichi automaticamente gli errori. Il comando “rmmod†forza la stampa di “SUCCESS†(successo), “FAILURE†(fallimento), o “RCU_HOTPLUGâ€. I primi due sono autoesplicativi; invece, l’ultimo indica che non son stati trovati problemi in RCU, tuttavia ci sono stati problemi con CPU-hotplug.”…””}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Khjh²hubeh}”(h]”Œuso-su-specifici-kernel”ah ]”h"]”Œuso su specifici kernel”ah$]”h&]”uh1jhjh²hh³hÇh´K€ubj)”}”(hhh]”(j)”}”(hŒUso sul kernel di riferimento”h]”hŒUso sul kernel di riferimento”…””}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmh²hh³hÇh´K™ubhÏ)”}”(hX.Quando si usa rcutorture per verificare modifiche ad RCU stesso, spesso è necessario compilare un certo numero di kernel usando configurazioni diverse e con parametri d'avvio diversi. In questi casi, usare modprobe ed rmmod potrebbe richiedere molto tempo ed il processo essere suscettibile ad errori.”h]”hX0Quando si usa rcutorture per verificare modifiche ad RCU stesso, spesso è necessario compilare un certo numero di kernel usando configurazioni diverse e con parametri d’avvio diversi. In questi casi, usare modprobe ed rmmod potrebbe richiedere molto tempo ed il processo essere suscettibile ad errori.”…””}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K›hjmh²hubhÏ)”}”(hX$Dunque, viene messo a disposizione il programma tools/testing/selftests/rcutorture/bin/kvm.sh per le architetture x86, arm64 e powerpc. Di base, eseguirà la serie di verifiche elencate in tools/testing/selftests/rcutorture/configs/rcu/CFLIST. Ognuna di queste verrà eseguita per 30 minuti in una macchina virtuale con uno spazio utente minimale fornito da un initrd generato automaticamente. Al completamento, gli artefatti prodotti e i messaggi vengono analizzati alla ricerca di errori, ed i risultati delle esecuzioni riassunti in un rapporto.”h]”hX$Dunque, viene messo a disposizione il programma tools/testing/selftests/rcutorture/bin/kvm.sh per le architetture x86, arm64 e powerpc. Di base, eseguirà la serie di verifiche elencate in tools/testing/selftests/rcutorture/configs/rcu/CFLIST. Ognuna di queste verrà eseguita per 30 minuti in una macchina virtuale con uno spazio utente minimale fornito da un initrd generato automaticamente. Al completamento, gli artefatti prodotti e i messaggi vengono analizzati alla ricerca di errori, ed i risultati delle esecuzioni riassunti in un rapporto.”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K hjmh²hubhÏ)”}”(hXlSu grandi sistemi, le verifiche di rcutorture posso essere velocizzare passano a kvm.sh l'argomento --cpus. Per esempio, su un sistema a 64 processori, "--cpus 43" userà fino a 43 processori per eseguire contemporaneamente le verifiche. Su un kernel v5.4 per eseguire tutti gli scenari in due serie, riduce il tempo d'esecuzione da otto ore a un'ora (senza contare il tempo per compilare sedici kernel). L'argomento "--dryrun sched" non eseguirà verifiche, piuttosto vi informerà su come queste verranno organizzate in serie. Questo può essere utile per capire quanti processori riservare per le verifiche in --cpus.”h]”hX|Su grandi sistemi, le verifiche di rcutorture posso essere velocizzare passano a kvm.sh l’argomento --cpus. Per esempio, su un sistema a 64 processori, “--cpus 43†userà fino a 43 processori per eseguire contemporaneamente le verifiche. Su un kernel v5.4 per eseguire tutti gli scenari in due serie, riduce il tempo d’esecuzione da otto ore a un’ora (senza contare il tempo per compilare sedici kernel). L’argomento “--dryrun sched†non eseguirà verifiche, piuttosto vi informerà su come queste verranno organizzate in serie. Questo può essere utile per capire quanti processori riservare per le verifiche in --cpus.”…””}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K©hjmh²hubhÏ)”}”(hX½Non serve eseguire tutti gli scenari di verifica per ogni modifica. Per esempio, per una modifica a Tree SRCU potete eseguire gli scenari SRCU-N e SRCU-P. Per farlo usate l'argomento --configs di kvm.sh in questo modo: "--configs 'SRCU-N SRCU-P'". Su grandi sistemi si possono eseguire più copie degli stessi scenari, per esempio, un hardware che permette di eseguire 448 thread, può eseguire 5 istanze complete contemporaneamente. Per farlo::”h]”hXÆNon serve eseguire tutti gli scenari di verifica per ogni modifica. Per esempio, per una modifica a Tree SRCU potete eseguire gli scenari SRCU-N e SRCU-P. Per farlo usate l’argomento --configs di kvm.sh in questo modo: “--configs ‘SRCU-N SRCU-P’â€. Su grandi sistemi si possono eseguire più copie degli stessi scenari, per esempio, un hardware che permette di eseguire 448 thread, può eseguire 5 istanze complete contemporaneamente. Per farlo:”…””}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K²hjmh²hubjˆ)”}”(hŒ&kvm.sh --cpus 448 --configs '5*CFLIST'”h]”hŒ&kvm.sh --cpus 448 --configs '5*CFLIST'”…””}”hj¶sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´K¹hjmh²hubhÏ)”}”(hŒjOppure, lo stesso sistema, può eseguire contemporaneamente 56 istanze dello scenario su otto processori::”h]”hŒiOppure, lo stesso sistema, può eseguire contemporaneamente 56 istanze dello scenario su otto processori:”…””}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´K»hjmh²hubjˆ)”}”(hŒ'kvm.sh --cpus 448 --configs '56*TREE04'”h]”hŒ'kvm.sh --cpus 448 --configs '56*TREE04'”…””}”hjÒsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´K¾hjmh²hubhÏ)”}”(hŒ:O ancora 28 istanze per ogni scenario su otto processori::”h]”hŒ9O ancora 28 istanze per ogni scenario su otto processori:”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÀhjmh²hubjˆ)”}”(hŒ1kvm.sh --cpus 448 --configs '28*TREE03 28*TREE04'”h]”hŒ1kvm.sh --cpus 448 --configs '28*TREE03 28*TREE04'”…””}”hjîsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´KÂhjmh²hubhÏ)”}”(hXOvviamente, ogni esecuzione utilizzerà della memoria. Potete limitarne l'uso con l'argomento --memory, che di base assume il valore 512M. Per poter usare valori piccoli dovrete disabilitare le verifiche *callback-flooding* usando il parametro --bootargs che vedremo in seguito.”h]”(hŒÐOvviamente, ogni esecuzione utilizzerà della memoria. Potete limitarne l’uso con l’argomento --memory, che di base assume il valore 512M. Per poter usare valori piccoli dovrete disabilitare le verifiche ”…””}”(hjüh²hh³Nh´Nubj)”}”(hŒ*callback-flooding*”h]”hŒcallback-flooding”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüubhŒ7 usando il parametro --bootargs che vedremo in seguito.”…””}”(hjüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÄhjmh²hubhÏ)”}”(hX¦A volte è utile avere informazioni aggiuntive di debug, in questo caso potete usare il parametro --kconfig, per esempio, ``--kconfig 'CONFIG_RCU_EQS_DEBUG=y'``. In aggiunta, ci sono i parametri --gdb, --kasan, and kcsan. Da notare che --gdb vi limiterà all'uso di un solo scenario per esecuzione di kvm.sh e richiede di avere anche un'altra finestra aperta dalla quale eseguire ``gdb`` come viene spiegato dal programma.”h]”(hŒzA volte è utile avere informazioni aggiuntive di debug, in questo caso potete usare il parametro --kconfig, per esempio, ”…””}”(hjh²hh³Nh´NubhŒliteral”“”)”}”(hŒ&``--kconfig 'CONFIG_RCU_EQS_DEBUG=y'``”h]”hŒ"--kconfig 'CONFIG_RCU_EQS_DEBUG=y'”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjubhŒà. In aggiunta, ci sono i parametri --gdb, --kasan, and kcsan. Da notare che --gdb vi limiterà all’uso di un solo scenario per esecuzione di kvm.sh e richiede di avere anche un’altra finestra aperta dalla quale eseguire ”…””}”(hjh²hh³Nh´Nubj%)”}”(hŒ``gdb``”h]”hŒgdb”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjubhŒ# come viene spiegato dal programma.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÉhjmh²hubhÏ)”}”(hX¢Potete passare anche i parametri d'avvio del kernel, per esempio, per controllare i parametri del modulo rcutorture. Per esempio, per verificare modifiche del codice RCU CPU stall-warning, usate ``bootargs 'rcutorture.stall_cpu=30``. Il programma riporterà un fallimento, ossia il risultato della verifica. Come visto in precedenza, ridurre la memoria richiede la disabilitazione delle verifiche *callback-flooding*::”h]”(hŒÅPotete passare anche i parametri d’avvio del kernel, per esempio, per controllare i parametri del modulo rcutorture. Per esempio, per verificare modifiche del codice RCU CPU stall-warning, usate ”…””}”(hjPh²hh³Nh´Nubj%)”}”(hŒ%``bootargs 'rcutorture.stall_cpu=30``”h]”hŒ!bootargs 'rcutorture.stall_cpu=30”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjPubhŒ¥. Il programma riporterà un fallimento, ossia il risultato della verifica. Come visto in precedenza, ridurre la memoria richiede la disabilitazione delle verifiche ”…””}”(hjPh²hh³Nh´Nubj)”}”(hŒ*callback-flooding*”h]”hŒcallback-flooding”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒ:”…””}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÐhjmh²hubjˆ)”}”(hŒfkvm.sh --cpus 448 --configs '56*TREE04' --memory 128M \ --bootargs 'rcutorture.fwd_progress=0'”h]”hŒfkvm.sh --cpus 448 --configs '56*TREE04' --memory 128M \ --bootargs 'rcutorture.fwd_progress=0'”…””}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´K×hjmh²hubhÏ)”}”(hŒ}A volte tutto quello che serve è una serie completa di compilazioni del kernel. Questo si ottiene col parametro --buildonly.”h]”hŒ}A volte tutto quello che serve è una serie completa di compilazioni del kernel. Questo si ottiene col parametro --buildonly.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÚhjmh²hubhÏ)”}”(hXIl parametro --duration sovrascrive quello di base di 30 minuti. Per esempio, con ``--duration 2d`` l'esecuzione sarà di due giorni, ``--duraction 5min`` di cinque minuti, e ``--duration 45s`` di 45 secondi. L'ultimo può essere utile per scovare rari errori nella sequenza d'avvio.”h]”(hŒRIl parametro --duration sovrascrive quello di base di 30 minuti. Per esempio, con ”…””}”(hjžh²hh³Nh´Nubj%)”}”(hŒ``--duration 2d``”h]”hŒ --duration 2d”…””}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjžubhŒ% l’esecuzione sarà di due giorni, ”…””}”(hjžh²hh³Nh´Nubj%)”}”(hŒ``--duraction 5min``”h]”hŒ--duraction 5min”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjžubhŒ di cinque minuti, e ”…””}”(hjžh²hh³Nh´Nubj%)”}”(hŒ``--duration 45s``”h]”hŒ--duration 45s”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjžubhŒ^ di 45 secondi. L’ultimo può essere utile per scovare rari errori nella sequenza d’avvio.”…””}”(hjžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´KÝhjmh²hubhÏ)”}”(hŒìInfine, il parametro --trust-make permette ad ogni nuova compilazione del kernel di riutilizzare tutto il possibile da quelle precedenti. Da notare che senza il parametro --trust-make, i vostri file di *tag* potrebbero essere distrutti.”h]”(hŒÊInfine, il parametro --trust-make permette ad ogni nuova compilazione del kernel di riutilizzare tutto il possibile da quelle precedenti. Da notare che senza il parametro --trust-make, i vostri file di ”…””}”(hjâh²hh³Nh´Nubj)”}”(hŒ*tag*”h]”hŒtag”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubhŒ potrebbero essere distrutti.”…””}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kâhjmh²hubhÏ)”}”(hŒhCi sono altri parametri più misteriosi che sono documentati nel codice sorgente dello programma kvm.sh.”h]”hŒhCi sono altri parametri più misteriosi che sono documentati nel codice sorgente dello programma kvm.sh.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kæhjmh²hubhÏ)”}”(hXéSe un'esecuzione contiene degli errori, il loro numero durante la compilazione e all'esecuzione verranno elencati alla fine fra i risultati di kvm.sh (che vi consigliamo caldamente di reindirizzare verso un file). I file prodotti dalla compilazione ed i risultati stampati vengono salvati, usando un riferimento temporale, nelle cartella tools/testing/selftests/rcutorture/res. Una cartella di queste cartelle può essere fornita a kvm-find-errors.sh per estrarne gli errori. Per esempio::”h]”hXìSe un’esecuzione contiene degli errori, il loro numero durante la compilazione e all’esecuzione verranno elencati alla fine fra i risultati di kvm.sh (che vi consigliamo caldamente di reindirizzare verso un file). I file prodotti dalla compilazione ed i risultati stampati vengono salvati, usando un riferimento temporale, nelle cartella tools/testing/selftests/rcutorture/res. Una cartella di queste cartelle può essere fornita a kvm-find-errors.sh per estrarne gli errori. Per esempio:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kéhjmh²hubjˆ)”}”(hŒ~tools/testing/selftests/rcutorture/bin/kvm-find-errors.sh \ tools/testing/selftests/rcutorture/res/2020.01.20-15.54.23”h]”hŒ~tools/testing/selftests/rcutorture/bin/kvm-find-errors.sh \ tools/testing/selftests/rcutorture/res/2020.01.20-15.54.23”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´Kñhjmh²hubhÏ)”}”(hXPTuttavia, molto spesso è più conveniente aprire i file direttamente. I file riguardanti tutti gli scenari di un'esecuzione di trovano nella cartella principale (2020.01.20-15.54.23 nell'esempio precedente), mentre quelli specifici per scenario si trovano in sotto cartelle che prendono il nome dello scenario stesso (per esempio, "TREE04"). Se un dato scenario viene eseguito più di una volta (come abbiamo visto con "--configs '56*TREE04'"), allora dalla seconda esecuzione in poi le sottocartelle includeranno un numero di progressione, per esempio "TREE04.2", "TREE04.3", e via dicendo.”h]”hXhTuttavia, molto spesso è più conveniente aprire i file direttamente. I file riguardanti tutti gli scenari di un’esecuzione di trovano nella cartella principale (2020.01.20-15.54.23 nell’esempio precedente), mentre quelli specifici per scenario si trovano in sotto cartelle che prendono il nome dello scenario stesso (per esempio, “TREE04â€). Se un dato scenario viene eseguito più di una volta (come abbiamo visto con “--configs ‘56*TREE04’â€), allora dalla seconda esecuzione in poi le sottocartelle includeranno un numero di progressione, per esempio “TREE04.2â€, “TREE04.3â€, e via dicendo.”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kôhjmh²hubhÏ)”}”(hXIl file solitamente più usato nella cartella principale è testid.txt. Se la verifica viene eseguita in un repositorio git, allora questo file conterrà il *commit* sul quale si basano le verifiche, mentre tutte le modifiche non registrare verranno mostrate in formato diff.”h]”(hŒIl file solitamente più usato nella cartella principale è testid.txt. Se la verifica viene eseguita in un repositorio git, allora questo file conterrà il ”…””}”(hj:h²hh³Nh´Nubj)”}”(hŒ*commit*”h]”hŒcommit”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:ubhŒn sul quale si basano le verifiche, mentre tutte le modifiche non registrare verranno mostrate in formato diff.”…””}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Kýhjmh²hubhÏ)”}”(hŒ>I file solitamente più usati nelle cartelle di scenario sono:”h]”hŒ>I file solitamente più usati nelle cartelle di scenario sono:”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhjmh²hubjÍ)”}”(hhh]”(jÒ)”}”(hŒ3.config Questo file contiene le opzioni di Kconfig ”h]”(jØ)”}”(hŒ.config”h]”hŒ.config”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÇh´Mhjkubjè)”}”(hhh]”hÏ)”}”(hŒ*Questo file contiene le opzioni di Kconfig”h]”hŒ*Questo file contiene le opzioni di Kconfig”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³hÇh´MhjhubjÒ)”}”(hŒVMake.out Questo file contiene il risultato di compilazione per uno specifico scenario ”h]”(jØ)”}”(hŒMake.out”h]”hŒMake.out”…””}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÇh´Mhjšubjè)”}”(hhh]”hÏ)”}”(hŒLQuesto file contiene il risultato di compilazione per uno specifico scenario”h]”hŒLQuesto file contiene il risultato di compilazione per uno specifico scenario”…””}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³hÇh´Mhjhh²hubjÒ)”}”(hŒ×console.log Questo file contiene il risultato d'esecuzione per uno specifico scenario. Questo file può essere esaminato una volta che il kernel è stato avviato, ma potrebbe non esistere se l'avvia non è fallito. ”h]”(jØ)”}”(hŒ console.log”h]”hŒ console.log”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÇh´M hjÉubjè)”}”(hhh]”hÏ)”}”(hŒÊQuesto file contiene il risultato d'esecuzione per uno specifico scenario. Questo file può essere esaminato una volta che il kernel è stato avviato, ma potrebbe non esistere se l'avvia non è fallito.”h]”hŒÎQuesto file contiene il risultato d’esecuzione per uno specifico scenario. Questo file può essere esaminato una volta che il kernel è stato avviato, ma potrebbe non esistere se l’avvia non è fallito.”…””}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³hÇh´M hjhh²hubjÒ)”}”(hŒnvmlinux Questo file contiene il kernel, e potrebbe essere utile da esaminare con programmi come pbjdump e gdb ”h]”(jØ)”}”(hŒvmlinux”h]”hŒvmlinux”…””}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÇh´Mhjøubjè)”}”(hhh]”hÏ)”}”(hŒeQuesto file contiene il kernel, e potrebbe essere utile da esaminare con programmi come pbjdump e gdb”h]”hŒeQuesto file contiene il kernel, e potrebbe essere utile da esaminare con programmi come pbjdump e gdb”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³hÇh´Mhjhh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjmh²hh³hÇh´NubhÏ)”}”(hŒrCi sono altri file, ma vengono usati meno. Molti sono utili all'analisi di rcutorture stesso o dei suoi programmi.”h]”hŒtCi sono altri file, ma vengono usati meno. Molti sono utili all’analisi di rcutorture stesso o dei suoi programmi.”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhjmh²hubhÏ)”}”(hŒ…Nel kernel v5.4, su un sistema a 12 processori, un'esecuzione senza errori usando gli scenari di base produce il seguente risultato::”h]”hŒ†Nel kernel v5.4, su un sistema a 12 processori, un’esecuzione senza errori usando gli scenari di base produce il seguente risultato:”…””}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhjmh²hubjˆ)”}”(hXoSRCU-N ------- 804233 GPs (148.932/s) [srcu: g10008272 f0x0 ] SRCU-P ------- 202320 GPs (37.4667/s) [srcud: g1809476 f0x0 ] SRCU-t ------- 1122086 GPs (207.794/s) [srcu: g0 f0x0 ] SRCU-u ------- 1111285 GPs (205.794/s) [srcud: g1 f0x0 ] TASKS01 ------- 19666 GPs (3.64185/s) [tasks: g0 f0x0 ] TASKS02 ------- 20541 GPs (3.80389/s) [tasks: g0 f0x0 ] TASKS03 ------- 19416 GPs (3.59556/s) [tasks: g0 f0x0 ] TINY01 ------- 836134 GPs (154.84/s) [rcu: g0 f0x0 ] n_max_cbs: 34198 TINY02 ------- 850371 GPs (157.476/s) [rcu: g0 f0x0 ] n_max_cbs: 2631 TREE01 ------- 162625 GPs (30.1157/s) [rcu: g1124169 f0x0 ] TREE02 ------- 333003 GPs (61.6672/s) [rcu: g2647753 f0x0 ] n_max_cbs: 35844 TREE03 ------- 306623 GPs (56.782/s) [rcu: g2975325 f0x0 ] n_max_cbs: 1496497 CPU count limited from 16 to 12 TREE04 ------- 246149 GPs (45.5831/s) [rcu: g1695737 f0x0 ] n_max_cbs: 434961 TREE05 ------- 314603 GPs (58.2598/s) [rcu: g2257741 f0x2 ] n_max_cbs: 193997 TREE07 ------- 167347 GPs (30.9902/s) [rcu: g1079021 f0x0 ] n_max_cbs: 478732 CPU count limited from 16 to 12 TREE09 ------- 752238 GPs (139.303/s) [rcu: g13075057 f0x0 ] n_max_cbs: 99011”h]”hXoSRCU-N ------- 804233 GPs (148.932/s) [srcu: g10008272 f0x0 ] SRCU-P ------- 202320 GPs (37.4667/s) [srcud: g1809476 f0x0 ] SRCU-t ------- 1122086 GPs (207.794/s) [srcu: g0 f0x0 ] SRCU-u ------- 1111285 GPs (205.794/s) [srcud: g1 f0x0 ] TASKS01 ------- 19666 GPs (3.64185/s) [tasks: g0 f0x0 ] TASKS02 ------- 20541 GPs (3.80389/s) [tasks: g0 f0x0 ] TASKS03 ------- 19416 GPs (3.59556/s) [tasks: g0 f0x0 ] TINY01 ------- 836134 GPs (154.84/s) [rcu: g0 f0x0 ] n_max_cbs: 34198 TINY02 ------- 850371 GPs (157.476/s) [rcu: g0 f0x0 ] n_max_cbs: 2631 TREE01 ------- 162625 GPs (30.1157/s) [rcu: g1124169 f0x0 ] TREE02 ------- 333003 GPs (61.6672/s) [rcu: g2647753 f0x0 ] n_max_cbs: 35844 TREE03 ------- 306623 GPs (56.782/s) [rcu: g2975325 f0x0 ] n_max_cbs: 1496497 CPU count limited from 16 to 12 TREE04 ------- 246149 GPs (45.5831/s) [rcu: g1695737 f0x0 ] n_max_cbs: 434961 TREE05 ------- 314603 GPs (58.2598/s) [rcu: g2257741 f0x2 ] n_max_cbs: 193997 TREE07 ------- 167347 GPs (30.9902/s) [rcu: g1079021 f0x0 ] n_max_cbs: 478732 CPU count limited from 16 to 12 TREE09 ------- 752238 GPs (139.303/s) [rcu: g13075057 f0x0 ] n_max_cbs: 99011”…””}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´Mhjmh²hubeh}”(h]”Œuso-sul-kernel-di-riferimento”ah ]”h"]”Œuso sul kernel di riferimento”ah$]”h&]”uh1jhjh²hh³hÇh´K™ubj)”}”(hhh]”(j)”}”(hŒ Ripetizioni”h]”hŒ Ripetizioni”…””}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_h²hh³hÇh´M-ubhÏ)”}”(hXPImmaginate di essere alla caccia di un raro problema che si verifica all'avvio. Potreste usare kvm.sh, tuttavia questo ricompilerebbe il kernel ad ogni esecuzione. Se avete bisogno di (diciamo) 1000 esecuzioni per essere sicuri di aver risolto il problema, allora queste inutili ricompilazioni possono diventare estremamente fastidiose.”h]”hXRImmaginate di essere alla caccia di un raro problema che si verifica all’avvio. Potreste usare kvm.sh, tuttavia questo ricompilerebbe il kernel ad ogni esecuzione. Se avete bisogno di (diciamo) 1000 esecuzioni per essere sicuri di aver risolto il problema, allora queste inutili ricompilazioni possono diventare estremamente fastidiose.”…””}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M/hj_h²hubhÏ)”}”(hŒ&Per questo motivo esiste kvm-again.sh.”h]”hŒ&Per questo motivo esiste kvm-again.sh.”…””}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M5hj_h²hubhÏ)”}”(hŒbImmaginate che un'esecuzione precedente di kvm.sh abbia lasciato i suoi artefatti nella cartella::”h]”hŒcImmaginate che un’esecuzione precedente di kvm.sh abbia lasciato i suoi artefatti nella cartella:”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M7hj_h²hubjˆ)”}”(hŒ:tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28”h]”hŒ:tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28”…””}”hjšsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´M:hj_h²hubhÏ)”}”(hŒ?Questa esecuzione può essere rieseguita senza ricompilazioni::”h]”hŒ>Questa esecuzione può essere rieseguita senza ricompilazioni:”…””}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M<hj_h²hubjˆ)”}”(hŒGkvm-again.sh tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28”h]”hŒGkvm-again.sh tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28”…””}”hj¶sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´M>hj_h²hubhÏ)”}”(hŒ{Alcuni dei parametri originali di kvm.sh possono essere sovrascritti, in particolare --duration e --bootargs. Per esempio::”h]”hŒzAlcuni dei parametri originali di kvm.sh possono essere sovrascritti, in particolare --duration e --bootargs. Per esempio:”…””}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M@hj_h²hubjˆ)”}”(hŒ`kvm-again.sh tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28 \ --duration 45s”h]”hŒ`kvm-again.sh tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28 \ --duration 45s”…””}”hjÒsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´MChj_h²hubhÏ)”}”(hŒrieseguirebbe il test precedente, ma solo per 45 secondi, e quindi aiutando a trovare quel raro problema all'avvio sopracitato.”h]”hŒrieseguirebbe il test precedente, ma solo per 45 secondi, e quindi aiutando a trovare quel raro problema all’avvio sopracitato.”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´MFhj_h²hubeh}”(h]”Œ ripetizioni”ah ]”h"]”Œ ripetizioni”ah$]”h&]”uh1jhjh²hh³hÇh´M-ubj)”}”(hhh]”(j)”}”(hŒEsecuzioni distribuite”h]”hŒEsecuzioni distribuite”…””}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÇh´MJubhÏ)”}”(hX¦Sebbene kvm.sh sia utile, le sue verifiche sono limitate ad un singolo sistema. Non è poi così difficile usare un qualsiasi ambiente di sviluppo per eseguire (diciamo) 5 istanze di kvm.sh su altrettanti sistemi, ma questo avvierebbe inutili ricompilazioni del kernel. In aggiunta, il processo di distribuzione degli scenari di verifica per rcutorture sui sistemi disponibili richiede scrupolo perché soggetto ad errori.”h]”hX¦Sebbene kvm.sh sia utile, le sue verifiche sono limitate ad un singolo sistema. Non è poi così difficile usare un qualsiasi ambiente di sviluppo per eseguire (diciamo) 5 istanze di kvm.sh su altrettanti sistemi, ma questo avvierebbe inutili ricompilazioni del kernel. In aggiunta, il processo di distribuzione degli scenari di verifica per rcutorture sui sistemi disponibili richiede scrupolo perché soggetto ad errori.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´MLhjöh²hubhÏ)”}”(hŒ Per questo esiste kvm-remote.sh.”h]”hŒ Per questo esiste kvm-remote.sh.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´MShjöh²hubhÏ)”}”(hŒ!Se il seguente comando funziona::”h]”hŒ Se il seguente comando funziona:”…””}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´MUhjöh²hubjˆ)”}”(hŒssh system0 date”h]”hŒssh system0 date”…””}”hj1sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´MWhjöh²hubhÏ)”}”(hŒe funziona anche per system1, system2, system3, system4, e system5, e tutti questi sistemi hanno 64 CPU, allora potere eseguire::”h]”hŒ€e funziona anche per system1, system2, system3, system4, e system5, e tutti questi sistemi hanno 64 CPU, allora potere eseguire:”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´MYhjöh²hubjˆ)”}”(hŒvkvm-remote.sh "system0 system1 system2 system3 system4 system5" \ --cpus 64 --duration 8h --configs "5*CFLIST"”h]”hŒvkvm-remote.sh "system0 system1 system2 system3 system4 system5" \ --cpus 64 --duration 8h --configs "5*CFLIST"”…””}”hjMsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´M\hjöh²hubhÏ)”}”(hXŠQuesto compilerà lo scenario di base sul sistema locale, poi lo distribuirà agli altri cinque sistemi elencati fra i parametri, ed eseguirà ogni scenario per otto ore. Alla fine delle esecuzioni, i risultati verranno raccolti, registrati, e stampati. La maggior parte dei parametri di kvm.sh possono essere usati con kvm-remote.sh, tuttavia la lista dei sistemi deve venire sempre per prima.”h]”hXŠQuesto compilerà lo scenario di base sul sistema locale, poi lo distribuirà agli altri cinque sistemi elencati fra i parametri, ed eseguirà ogni scenario per otto ore. Alla fine delle esecuzioni, i risultati verranno raccolti, registrati, e stampati. La maggior parte dei parametri di kvm.sh possono essere usati con kvm-remote.sh, tuttavia la lista dei sistemi deve venire sempre per prima.”…””}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´M_hjöh²hubhÏ)”}”(hŒ‹L'argomento di kvm.sh ``--dryrun scenarios`` può essere utile per scoprire quanti scenari potrebbero essere eseguiti in gruppo di sistemi.”h]”(hŒL’argomento di kvm.sh ”…””}”(hjih²hh³Nh´Nubj%)”}”(hŒ``--dryrun scenarios``”h]”hŒ--dryrun scenarios”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjiubhŒ_ può essere utile per scoprire quanti scenari potrebbero essere eseguiti in gruppo di sistemi.”…””}”(hjih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mehjöh²hubhÏ)”}”(hŒ]Potete rieseguire anche una precedente esecuzione remota come abbiamo già fatto per kvm.sh::”h]”hŒ\Potete rieseguire anche una precedente esecuzione remota come abbiamo già fatto per kvm.sh:”…””}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mhhjöh²hubjˆ)”}”(hŒ¤kvm-remote.sh "system0 system1 system2 system3 system4 system5" \ tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28-remote \ --duration 24h”h]”hŒ¤kvm-remote.sh "system0 system1 system2 system3 system4 system5" \ tools/testing/selftests/rcutorture/res/2022.11.03-11.26.28-remote \ --duration 24h”…””}”hj—sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³hÇh´Mkhjöh²hubhÏ)”}”(hŒ¨In questo caso, la maggior parte dei parametri di kvm-again.sh possono essere usati dopo il percorso alla cartella contenente gli artefatti dell'esecuzione da ripetere.”h]”hŒªIn questo caso, la maggior parte dei parametri di kvm-again.sh possono essere usati dopo il percorso alla cartella contenente gli artefatti dell’esecuzione da ripetere.”…””}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎh³hÇh´Mohjöh²hubeh}”(h]”Œesecuzioni-distribuite”ah ]”h"]”Œesecuzioni distribuite”ah$]”h&]”uh1jhjh²hh³hÇh´MJubeh}”(h]”Œ*le-operazioni-rcu-per-le-verifiche-torture”ah ]”h"]”Œ*le operazioni rcu per le verifiche torture”ah$]”h&]”uh1jhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(jNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jæŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÀj½jejbjjjjjgj\jYjójðj¸jµuŒ nametypes”}”(jÀ‰je‰j‰jj‰j\‰jó‰j¸‰uh}”(j½jjbj3jjhjgjjYjmjðj_jµjöuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ0Documentation/translations/it_IT/RCU/torture.rst”(NNNNt”†”aŒ decoration”Nh²hub.