실제로 두 가지 위치를 상상할 수 있습니다.
- 메모리를 in/out으로 교환하는 프로세스에 속한 커널 공간
- ~에서
[kswapd0]
mm/vmscan.c
그러나 kswapd 소스 코드( , ) 를 자세히 살펴보면 init/main.c
kswapd가 단일 스레드이며 단일 스레드에서 시작된다는 것을 알 수 있습니다. (NUMA 시스템을 제외하면 모든 메모리 영역의 kswapd가 다릅니다. 하지만 대부분의 일반 PC는 NUMA 시스템이 아닙니다.)
그러나 이제부터 문제가 발생합니다. 디스크가 메모리보다 훨씬 느리다고 가정할 수 있으므로 디스크 I/O를 처리하기 위해 다중 스레드 kswapd가 필요하지 않습니다. 그러나 내부 zswap 레이어도 활용해야 하는 경우에는 그렇지 않습니다. 특히 더 높은 압축률(수축)에서는 CPU가 병목 현상을 일으킬 가능성이 높습니다.
그러나 kswapd는 단일 스레드입니다.
이거 진짜야?
다중 스레드 kswapd를 사용할 계획입니까? 정말 필요한가요?
PS 나는 알아냈다이것Linux 커널 메일링 리스트의 스레드입니다. 이는 NUMA가 아닌 시스템에서 다중 스레드 kswapd를 활성화하는 거부된 패치 제안에 관한 것입니다. 그들은 이 zswap 문제를 제외한 모든 것에 대해 이야기하고 있습니다. 아마도 그것은 관련이 없을 수도 있습니다.
PS2. 문맥:
- 나는 심각한 메모리 오버커밋(프로세스가 물리적으로 사용 가능한 것보다 훨씬 더 많은 메모리를 사용하고 있음)이 있는 Linux 시스템을 가지고 있습니다.
- 동시에 실행되는 프로세스 수는 CPU 코어 수보다 훨씬 적습니다.
- 저는 zswap을 많이 사용하고 있습니다.
- 이 환경에서는 다음을 사용하십시오.메모리 페이지를 압축/압축 해제하는 데 사용되는 모든 사용 가능한 CPU 코어. 현재로서는 페이지 압축/압축 풀기가
[kswapd0]
단일 커널 스레드에 의해 수행된다는 것이 최선의 추정입니다. 압축/압축 해제를 위해 모든 CPU 코어를 활용하는 옵션을 조사 중입니다. 본질적으로 이는 남은 CPU 용량을 변환하여 물리적 메모리 부족을 보충하는 방법입니다.
답변1
많은 조사 끝에 답을 찾은 것 같습니다.
실제 압축은 [kswapd]
.
거부 이메일 작성자참조된 스레드담당자가 의사소통을 하지 않은 데에는 최소한 어떤 이유가 있었음을 나타냅니다. 하지만 단순히 zswap에 무슨 일이 일어나고 있는지 몰랐을 가능성이 더 높습니다.
내 시스템에 패치 권장 사항을 설치했습니다. 이는 kswapd
멀티스레드입니다. 즉, 모든 CPU 코어의 메모리를 압축할 수 있습니다. 이 패치는 매력적으로 작동했으며 zswap-ping 환경을 크게 개선했습니다.
증거: 내 시스템(메모리 소비량이 많은 qemu + pxz 압축기)은 메모리와 CPU 모두에 심각한 과부하가 걸렸습니다. 나중에 나는 이것을 다음에서 보았습니다 top
.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
927 root 20 0 12,3g 3,6g 3612 R 141,8 23,1 36006:53 qemu-system-x86
5017 root 20 0 7607428 4,2g 1580 R 78,4 26,8 2:32.85 pxz
354 root 20 0 0 0 0 R 53,6 0,0 32:17.28 kswapd0:5
128 root 20 0 0 0 0 R 45,8 0,0 32:57.42 kswapd0:0
352 root 20 0 0 0 0 R 40,5 0,0 32:16.80 kswapd0:3
356 root 20 0 0 0 0 R 36,6 0,0 32:53.58 kswapd0:7
350 root 20 0 0 0 0 R 35,3 0,0 31:15.53 kswapd0:1
353 root 20 0 0 0 0 R 35,3 0,0 30:48.00 kswapd0:4
351 root 20 0 0 0 0 R 28,1 0,0 31:57.45 kswapd0:2
355 root 20 0 0 0 0 R 27,5 0,0 31:44.12 kswapd0:6
예, 또한 다음을 의미합니다.
- 멀티스레드 kswapdzswap 성능이 크게 향상되었습니다.,
- 메인라인 커널에는 포함되어 있지 않습니다.
- 그렇습니다. 무능력이나 불안정에 대한 두려움 때문일 수도 있습니다.
테스트 환경에서 사용하는 zswap 매개변수는 다음과 같습니다(에서 설정 가능 /sys/modules/zswap/parameters
).
same_filled_pages_enabled:Y
enabled:Y
max_pool_percent:50
compressor:deflate
zpool:z3fold
accept_threshold_percent:90