← Documents Documentation/translations/it_IT/locking/locktorture.rst GitHub 원문 ↗

Linux 6.18.37 · Translations

커널 잠금 고문 시험의 동작

locktorture의 시험 대상, writer·reader 부하, 공통 torture 매개변수, 통계와 최종 판정을 설명합니다.

Source pathDocumentation/translations/it_IT/locking/locktorture.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

locktorture.rst:1-181

여러 커널 스레드로 잠금 구현을 장시간 압박하고 통계와 오류 표식으로 결과를 판정하는 방법을 다룹니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 .. include:: ../disclaimer-ita.rst
4
5 ============================================
6 Funzionamento del test *Kernel Lock Torture*
7 ============================================
8
9 CONFIG_LOCK_TORTURE_TEST
10 ========================
11
12 L'opzione di configurazione CONFIG_LOCK_TORTURE_TEST fornisce un
13 modulo kernel che esegue delle verifiche che *torturano* le primitive di
14 sincronizzazione del kernel. Se dovesse servire, il modulo kernel,
15 'locktorture', può essere generato successivamente su un kernel che
16 volete verificare. Periodicamente le verifiche stampano messaggi tramite
17 ``printk()`` e che quindi possono essere letti tramite ``dmesg`` (magari
18 filtrate l'output con ``grep "torture"``). La verifica inizia quando
19 il modulo viene caricato e termina quando viene rimosso. Questo
20 programma si basa sulle modalità di verifica di RCU tramite rcutorture.
21
22 Questa verifica consiste nella creazione di un certo numero di thread
23 del kernel che acquisiscono un blocco e lo trattengono per una certa
24 quantità di tempo così da simulare diversi comportamenti nelle sezioni
25 critiche. La quantità di contese su un blocco può essere simulata
26 allargando la sezione critica e/o creando più thread.
27
28
29 Parametri del modulo
30 ====================
31
32 Questo modulo ha i seguenti parametri:
33
34
35 Specifici di locktorture
36 ------------------------
37
38 nwriters_stress
39 Numero di thread del kernel che stresseranno l'acquisizione
40 esclusiva dei blocchi (scrittori). Il valore di base è il
41 doppio del numero di processori attivi presenti.
42
43 nreaders_stress
44 Numero di thread del kernel che stresseranno l'acquisizione
45 condivisa dei blocchi (lettori). Il valore di base è lo stesso
46 di nwriters_stress. Se l'utente non ha specificato
47 nwriters_stress, allora entrambe i valori corrisponderanno
48 al numero di processori attivi presenti.
49
50 torture_type
51 Tipo di blocco da verificare. Di base, solo gli spinlock
52 verranno verificati. Questo modulo può verificare anche
53 i seguenti tipi di blocchi:
54
55 - "lock_busted":
56 Simula un'incorretta implementazione del
57 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() e
70 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
83 Generici dell'ambiente di sviluppo 'torture' (RCU + locking)
84 ------------------------------------------------------------
85
86 shutdown_secs
87 Numero di secondi prima che la verifica termini e il sistema
88 venga spento. Il valore di base è zero, il che disabilita
89 la possibilità di terminare e spegnere. Questa funzionalità
90 può essere utile per verifiche automatizzate.
91
92 onoff_interval
93 Numero di secondi fra ogni tentativo di esecuzione di
94 un'operazione casuale di CPU-hotplug. Di base è zero, il
95 che disabilita la funzionalità di CPU-hotplug. Nei kernel
96 con CONFIG_HOTPLUG_CPU=n, locktorture si rifiuterà, senza
97 dirlo, di effettuare una qualsiasi operazione di
98 CPU-hotplug indipendentemente dal valore specificato in
99 onoff_interval.
100
101 onoff_holdoff
102 Numero di secondi da aspettare prima di iniziare le
103 operazioni di CPU-hotplug. Normalmente questo verrebbe
104 usato solamente quando locktorture è compilato come parte
105 integrante del kernel ed eseguito automaticamente all'avvio,
106 in questo caso è utile perché permette di non confondere
107 l'avvio con i processori che vanno e vengono. Questo
108 parametro è utile sono se CONFIG_HOTPLUG_CPU è abilitato.
109
110 stat_interval
111 Numero di secondi fra una stampa (printk()) delle
112 statistiche e l'altra. Di base, locktorture riporta le
113 statistiche ogni 60 secondi. Impostando l'intervallo a 0
114 ha l'effetto di stampare le statistiche -solo- quando il
115 modulo viene rimosso.
116
117 stutter
118 Durata della verifica prima di effettuare una pausa di
119 eguale durata. Di base "stutter=5", quindi si eseguono
120 verifiche e pause di (circa) cinque secondi.
121 L'impostazione di "stutter=0" fa si che la verifica
122 venga eseguita continuamente senza fermarsi.
123
124 shuffle_interval
125 Il numero di secondi per cui un thread debba mantenere
126 l'affinità con un sottoinsieme di processori, di base è
127 3 secondi. Viene usato assieme a test_no_idle_hz.
128
129 verbose
130 Abilita le stampe di debug, via printk(). Di base è
131 abilitato. Queste informazioni aggiuntive sono per la
132 maggior parte relative ad errori di alto livello e resoconti
133 da parte dell'struttura 'torture'.
134
135
136 Statistiche
137 ===========
138
139 Le statistiche vengono stampate secondo il seguente formato::
140
141 spin_lock-torture: Writes: Total: 93746064 Max/Min: 0/0 Fail: 0
142 (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 fare
147 con una primitiva di lettura/scrittura apparirà di seguito anche una
148 seconda voce "Reads"
149
150 (C): Numero di volte che il blocco è stato acquisito
151
152 (D): Numero minimo e massimo di volte che un thread ha fallito
153 nell'acquisire il blocco
154
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 baco
157 nell'implementazione delle primitive di sincronizzazione. Altrimenti un
158 blocco non dovrebbe mai fallire (per esempio, spin_lock()).
159 Ovviamente lo stesso si applica per (C). Un semplice esempio è il tipo
160 "lock_busted".
161
162 Uso
163 ===
164
165 Il seguente script può essere utilizzato per verificare i blocchi::
166
167 #!/bin/sh
168
169 modprobe locktorture
170 sleep 3600
171 rmmod locktorture
172 dmesg | grep torture:
173
174 L'output può essere manualmente ispezionato cercando il marcatore d'errore
175 "!!!". Ovviamente potreste voler creare degli script più elaborati che
176 verificano automaticamente la presenza di errori. Il comando "rmmod" forza la
177 stampa (usando printk()) di "SUCCESS", "FAILURE", oppure "RCU_HOTPLUG". I primi
178 due si piegano da soli, mentre l'ultimo indica che non stati trovati problemi di
179 sincronizzazione, tuttavia ne sono stati trovati in CPU-hotplug.
180
181 Consultate anche: Documentation/translations/it_IT/RCU/torture.rst
182

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

CONFIG_LOCK_TORTURE_TEST 개요

1-28

CONFIG_LOCK_TORTURE_TEST option은 핵심 kernel locking primitive에 torture test를 수행하는 locktorture module을 제공한다. 원한다면 시험할 running kernel에 맞춰 module을 나중에 별도로 build할 수 있다.

Test는 printk()로 주기적인 상태 message를 출력하며 dmesg에서 확인할 수 있다. torture 문자열로 grep하면 관련 message를 찾기 쉽다. Module을 load하면 test가 시작되고 unload하면 끝난다. 이 program은 RCU를 시험하는 rcutorture의 방식을 바탕으로 작성되었다.

Locktorture는 여러 kernel thread를 만들고 각 thread가 lock을 획득해 일정 시간 보유하게 함으로써 서로 다른 critical region 동작을 재현한다. Critical region의 lock 보유 시간을 늘리거나 kthread 수를 늘리면 lock contention을 높일 수 있다.

locktorture는 여러 커널 스레드가 같은 잠금 구현을 반복 획득·해제하도록 만들어 상호 배제, reader/writer 동작, IRQ 변형과 실시간 mutex의 오류를 장시간 압박하는 시험 모듈입니다. `CONFIG_LOCK_TORTURE_TEST`로 빌드합니다.

검증 강도는 임계 구역을 길게 만들거나 writer·reader 스레드 수를 늘려 높입니다. 이 시험은 특정 호출자의 성능 benchmark가 아니라 잠금 primitive가 높은 경합과 CPU 이동·hotplug 조건에서도 불변식을 지키는지 확인하는 데 초점을 둡니다.

.. SPDX-License-Identifier: GPL-2.0

.. include:: ../disclaimer-ita.rst

============================================
Funzionamento del test *Kernel Lock Torture*
============================================

CONFIG_LOCK_TORTURE_TEST
========================

L'opzione di configurazione CONFIG_LOCK_TORTURE_TEST fornisce un
modulo kernel che esegue delle verifiche che *torturano* le primitive di
sincronizzazione del kernel. Se dovesse servire, il modulo kernel,
'locktorture', può essere generato successivamente su un kernel che
volete verificare. Periodicamente le verifiche stampano messaggi tramite
``printk()`` e che quindi possono essere letti tramite ``dmesg`` (magari
filtrate l'output con ``grep "torture"``). La verifica inizia quando
il modulo viene caricato e termina quando viene rimosso. Questo
programma si basa sulle modalità di verifica di RCU tramite rcutorture.

Questa verifica consiste nella creazione di un certo numero di thread
del kernel che acquisiscono un blocco e lo trattengono per una certa
quantità di tempo così da simulare diversi comportamenti nelle sezioni
critiche. La quantità di contese su un blocco può essere simulata
allargando la sezione critica e/o creando più thread.

locktorture 전용 매개변수

29-82
Parameter설명
nwriters_stress배타적 lock ownership을 압박하는 writer kernel thread 수다. 기본값은 online CPU 수의 두 배다.
nreaders_stress공유 lock ownership을 압박하는 reader kernel thread 수다. 기본값은 writer 수와 같다. nwriters_stress를 지정하지 않았다면 reader와 writer가 각각 online CPU 수만큼 생성된다.
torture_type시험할 lock 종류다. 기본값은 spin_lock이며 아래 문자열 중 하나를 사용한다.
torture_type시험 대상
lock_busted결함이 있는 lock 구현을 흉내 낸다
spin_lockspin_lock()/spin_unlock() 쌍
spin_lock_irqspin_lock_irq()/spin_unlock_irq() 쌍
rw_lockread/write lock()/unlock() rwlock 쌍
rw_lock_irqread/write lock_irq()/unlock_irq() rwlock 쌍
mutex_lockmutex_lock()/mutex_unlock() 쌍
rtmutex_lockrtmutex_lock()/rtmutex_unlock() 쌍, CONFIG_RT_MUTEXES=y 필요
rwsem_lockread/write down()/up() semaphore 쌍

`nwriters_stress`는 배타 획득을 반복할 writer 스레드 수이며 기본값은 활성 CPU 수의 두 배입니다. `nreaders_stress`는 shared reader 수이고 기본적으로 writer 수를 따르며, writer 수도 지정하지 않았다면 두 값 모두 활성 CPU 수가 됩니다.

`torture_type`은 시험할 구현을 선택합니다. `lock_busted`는 오류 탐지 경로 자체를 확인하는 의도적 고장 모델이며, `spin_lock`, `spin_lock_irq`, `rw_lock`, `rw_lock_irq`, `mutex_lock`, `rtmutex_lock`, `rwsem_lock`은 대응 lock/unlock 쌍을 실제로 압박합니다.

locktorture 대상
대상
lock_busted의도적으로 잘못된 잠금 구현
spin_lock / spin_lock_irqspinlock 일반·IRQ 쌍
rw_lock / rw_lock_irqrwlock reader·writer 쌍
mutex_lockmutex lock/unlock
rtmutex_lockrtmutex, CONFIG_RT_MUTEXES=y 필요
rwsem_lockrw semaphore down/up

전용 `torture_type`과 필요한 조건을 정리했습니다.

Parametri del modulo
====================

Questo modulo ha i seguenti parametri:


Specifici di locktorture
------------------------

nwriters_stress
		  Numero di thread del kernel che stresseranno l'acquisizione
		  esclusiva dei blocchi (scrittori). Il valore di base è il
		  doppio del numero di processori attivi presenti.

nreaders_stress
		  Numero di thread del kernel che stresseranno l'acquisizione
		  condivisa dei blocchi (lettori). Il valore di base è lo stesso
		  di nwriters_stress. Se l'utente non ha specificato
		  nwriters_stress, allora entrambe i valori corrisponderanno
		  al numero di processori attivi presenti.

torture_type
		  Tipo di blocco da verificare. Di base, solo gli spinlock
		  verranno verificati. Questo modulo può verificare anche
		  i seguenti tipi di blocchi:

		     - "lock_busted":
				Simula un'incorretta implementazione del
				blocco.

		     - "spin_lock":
				coppie di spin_lock() e spin_unlock().

		     - "spin_lock_irq":
				coppie di spin_lock_irq() e spin_unlock_irq().

		     - "rw_lock":
				coppie di rwlock read/write lock() e unlock().

		     - "rw_lock_irq":
				copie di rwlock read/write lock_irq() e
				unlock_irq().

		     - "mutex_lock":
				coppie di mutex_lock() e mutex_unlock().

		     - "rtmutex_lock":
				coppie di rtmutex_lock() e rtmutex_unlock().
				Il kernel deve avere CONFIG_RT_MUTEXES=y.

		     - "rwsem_lock":
				coppie di semafori read/write down() e up().

공통 torture 프레임워크 매개변수

83-135
Parameter설명
shutdown_secs지정한 초만큼 test한 뒤 test를 끝내고 system power를 끈다. 기본값 0은 자동 종료를 disable하며 자동화 시험에 유용하다.
onoff_interval무작위 CPU hotplug operation을 시도하는 간격이다. 기본값 0은 hotplug를 disable한다. CONFIG_HOTPLUG_CPU=n이면 지정값과 무관하게 hotplug를 조용히 거부한다.
onoff_holdoffCPU hotplug 시작 전 대기 시간이다. Boot 때 자동 시작되는 built-in locktorture가 boot code와 CPU online/offline 동작을 섞지 않도록 할 때 유용하며 CONFIG_HOTPLUG_CPU가 필요하다.
stat_interval통계 printk() 간격이다. 기본값은 60초이고 0이면 module을 unload할 때만 출력한다.
stuttertest를 실행한 뒤 같은 시간 동안 멈추는 주기다. 기본 stutter=5는 약 5초 실행과 5초 정지를 반복하며 0은 중단 없이 계속 실행한다.
shuffle_intervaltest thread를 특정 CPU subset에 affinity로 묶어 두는 시간이다. 기본값은 3초이며 test_no_idle_hz와 함께 사용한다.
verboseprintk() debug 출력을 켠다. 기본 enable이며 주로 상위 수준 error와 torture framework report를 추가한다.

`shutdown_secs`는 자동 시험 종료와 시스템 종료 시간을, `onoff_interval`과 `onoff_holdoff`는 CPU hotplug 시도 간격과 시작 지연을 제어합니다. `CONFIG_HOTPLUG_CPU=n`이면 hotplug 값이 있어도 해당 동작은 조용히 생략됩니다.

`stat_interval`은 통계 출력 주기이며 0이면 모듈 제거 때만 출력합니다. `stutter`는 시험과 휴식의 교대 시간을 정하고 0이면 계속 실행합니다. `shuffle_interval`은 스레드 CPU affinity 재배치 주기, `verbose`는 높은 수준 오류와 프레임워크 진단 출력을 제어합니다.

자동 locktorture 실행
Load moduleStart writer and reader threads
Optional CPU hotplug and affinity shufflePeriodic statistics
shutdown_secs or rmmodFinal verdict

공통 torture 설정이 장시간 시험의 생명주기를 만듭니다.

Generici dell'ambiente di sviluppo 'torture' (RCU + locking)
------------------------------------------------------------

shutdown_secs
		  Numero di secondi prima che la verifica termini e il sistema
		  venga spento.  Il valore di base è zero, il che disabilita
		  la possibilità di terminare e spegnere. Questa funzionalità
		  può essere utile per verifiche automatizzate.

onoff_interval
		  Numero di secondi fra ogni tentativo di esecuzione di
		  un'operazione casuale di CPU-hotplug. Di base è zero, il
		  che disabilita la funzionalità di CPU-hotplug. Nei kernel
		  con CONFIG_HOTPLUG_CPU=n, locktorture si rifiuterà, senza
		  dirlo, di effettuare una qualsiasi operazione di
		  CPU-hotplug indipendentemente dal valore specificato in
		  onoff_interval.

onoff_holdoff
		  Numero di secondi da aspettare prima di iniziare le
		  operazioni di CPU-hotplug.  Normalmente questo verrebbe
		  usato solamente quando locktorture è compilato come parte
		  integrante del kernel ed eseguito automaticamente all'avvio,
		  in questo caso è utile perché permette di non confondere
		  l'avvio con i processori che vanno e vengono. Questo
		  parametro è utile sono se CONFIG_HOTPLUG_CPU è abilitato.

stat_interval
		  Numero di secondi fra una stampa (printk()) delle
		  statistiche e l'altra. Di base, locktorture riporta le
		  statistiche ogni 60 secondi. Impostando l'intervallo a 0
		  ha l'effetto di stampare le statistiche -solo- quando il
		  modulo viene rimosso.

stutter
		  Durata della verifica prima di effettuare una pausa di
		  eguale durata. Di base "stutter=5", quindi si eseguono
		  verifiche e pause di (circa) cinque secondi.
		  L'impostazione di "stutter=0" fa si che la verifica
		  venga eseguita continuamente senza fermarsi.

shuffle_interval
		  Il numero di secondi per cui un thread debba mantenere
		  l'affinità con un sottoinsieme di processori, di base è
		  3 secondi. Viene usato assieme a test_no_idle_hz.

verbose
		  Abilita le stampe di debug, via printk(). Di base è
		  abilitato. Queste informazioni aggiuntive sono per la
		  maggior parte relative ad errori di alto livello e resoconti
		  da parte dell'struttura 'torture'.

통계 출력 해석

136-161
spin_lock-torture: Writes:  Total: 93746064  Max/Min: 0/0  Fail: 0
(A)                     (B)            (C)         (D)        (E)
  • (A)는 torture_type으로 선택한 lock 종류다.
  • (B)는 writer lock acquisition 통계라는 뜻이다. Read/write primitive를 시험하면 별도의 Reads 통계 줄도 출력한다.
  • (C)는 lock 획득 횟수다.
  • (D)는 thread가 lock 획득에 실패한 횟수의 최댓값과 최솟값이다.
  • (E)는 lock 획득 error 여부를 나타내는 boolean 값이다. Lock primitive 구현에 bug가 있을 때만 positive여야 한다. 정상 spin_lock()은 실패하지 않는다. lock_busted가 의도적인 실패 예다.

통계의 `Writes: Total`은 writer 획득 수이며 reader/writer primitive에서는 별도 `Reads` 항목도 나옵니다. `Max/Min`은 한 스레드가 획득에 실패한 횟수의 범위를, `Fail`은 primitive가 정상 계약을 어긴 오류 여부를 나타냅니다.

정상적인 `spin_lock()`처럼 결국 성공해야 하는 연산에서는 `Fail`이 참이면 구현 결함을 의심해야 합니다. 반면 `lock_busted`는 고의로 잘못된 구현을 사용하므로 감사 경로가 오류를 찾아내는지 확인하는 양성 대조군입니다.

Statistiche
===========

Le statistiche vengono stampate secondo il seguente formato::

  spin_lock-torture: Writes:  Total: 93746064  Max/Min: 0/0   Fail: 0
     (A)		    (B)		   (C)		  (D)	       (E)

  (A): tipo di lock sotto verifica -- parametro torture_type.

  (B): Numero di acquisizione del blocco in scrittura. Se si ha a che fare
       con una primitiva di lettura/scrittura apparirà di seguito anche una
       seconda voce "Reads"

  (C): Numero di volte che il blocco è stato acquisito

  (D): Numero minimo e massimo di volte che un thread ha fallito
       nell'acquisire il blocco

  (E): valori true/false nel caso di errori durante l'acquisizione del blocco.
       Questo dovrebbe dare un riscontro positivo -solo- se c'è un baco
       nell'implementazione delle primitive di sincronizzazione. Altrimenti un
       blocco non dovrebbe mai fallire (per esempio, spin_lock()).
       Ovviamente lo stesso si applica per (C). Un semplice esempio è il tipo
       "lock_busted".

실행과 결과 판정

162-181
#!/bin/sh

modprobe locktorture
sleep 3600
rmmod locktorture
dmesg | grep torture:

출력에서 error flag인 !!!를 직접 확인하거나 이를 자동으로 검사하는 script를 작성할 수 있다. rmmod는 SUCCESS, FAILURE, RCU_HOTPLUG 중 하나를 printk()하게 만든다. 앞의 두 값은 성공과 실패를 뜻하고 RCU_HOTPLUG는 locking failure는 없었지만 CPU hotplug 문제가 발견되었다는 뜻이다.

공통 torture framework의 추가 내용은 Documentation/RCU/torture.rst에서 확인한다.

기본 실행은 `modprobe locktorture`, 충분한 대기, `rmmod locktorture`, `dmesg | grep torture:` 순서입니다. 모듈 제거가 최종 통계를 강제로 출력하므로 장시간 자동 시험에서도 종료 로그를 반드시 수집해야 합니다.

로그의 `!!!`는 오류 표식입니다. 최종 `SUCCESS`와 `FAILURE`는 직접적인 결과이고, `RCU_HOTPLUG`는 잠금 오류는 없었지만 CPU hotplug 쪽 문제가 발견됐음을 뜻합니다. 관련 공통 시험 설계는 `Documentation/translations/it_IT/RCU/torture.rst`로 이어집니다.

Uso
===

Il seguente script può essere utilizzato per verificare i blocchi::

	#!/bin/sh

	modprobe locktorture
	sleep 3600
	rmmod locktorture
	dmesg | grep torture:

L'output può essere manualmente ispezionato cercando il marcatore d'errore
"!!!". Ovviamente potreste voler creare degli script più elaborati che
verificano automaticamente la presenza di errori. Il comando "rmmod" forza la
stampa (usando printk()) di "SUCCESS", "FAILURE", oppure "RCU_HOTPLUG". I primi
due si piegano da soli, mentre l'ultimo indica che non stati trovati problemi di
sincronizzazione, tuttavia ne sono stati trovati in CPU-hotplug.

Consultate anche: Documentation/translations/it_IT/RCU/torture.rst