AL2023 커널에서 Multi-Gen LRU(MGLRU) 사용 - Amazon Linux 2023

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AL2023 커널에서 Multi-Gen LRU(MGLRU) 사용

Multi-Gen LRU는 Linux 커널의 최신 페이지 재생 알고리즘으로, 메모리 부족 시 메모리 관리 성능을 개선하도록 설계되었습니다. 시스템에서 메모리 부족이 발생할 때 회수할 메모리 페이지를 결정하는 데 사용되는 기존 LRU(최근 사용률이 가장 낮음) 메커니즘을 대체합니다.

기존 LRU 메커니즘은 2개 목록 모델(활성 및 비활성)을 사용하여 페이지 사용량을 추적하므로 대규모 작업 세트가 있는 최신 워크로드에서는 비효율적일 수 있습니다. MGLRU는 이를 여러 페이지의 "세대"로 대체하므로 커널이 더 세분화된 노후화 정보를 기반으로 더 스마트한 결정을 내릴 수 있습니다.

MGLRU의 이점은 다음과 같습니다.

  • 나은 회수 결정: 콜드(미사용) 페이지를 더 정확하게 식별합니다.

  • 지연 시간 단축 및 처리량 향상: 특히 주소 공간이 크거나 동시 프로세스가 많은 워크로드에 적합합니다.

  • 캐시 보존 개선: 최근에 사용된 페이지는 조기에 제거될 가능성이 낮습니다.

  • 확장 가능하고 잠금 효율적인 설계: CPUs.

구성 및 튜닝

커널 구성CONFIG_LRU_GEN은 AL2023 커널에서 활성화됩니다. 이렇게 하면 MGLRU에서 컴파일되지만 기본적으로 활성화되지는 않습니다.

/sys/kernel/mm/lru_gen/enabled 파일을 사용하여 MGLRU를 활성화하고 조정할 수 있습니다. 값은 비트 마스크입니다. 일부 구성 요소에 바람직하지 않은 부작용이 없는 한 모든 구성 요소를 활성화하는 것이 좋습니다.

Bit Components
0 다중 생성 LRU의 기본 스위치입니다.
1 MMU가 설정할 때 리프 페이지 테이블 항목의 액세스된 비트를 큰 배치로 지웁니다(예: x86). 이 동작은 이론적으로 잠금 경합()을 악화시킬 수 있습니다mmap_lock. 비활성화된 경우 멀티세대 LRU는 핫 페이지를 연속적으로 매핑하는 워크로드에서 약간의 성능 저하를 겪게 되며, 액세스한 비트는 더 적은 수의 더 큰 배치로 지울 수 있습니다.
2 MMU가 설정할 때(예: x86) 리프가 아닌 페이지 테이블 항목에서도 액세스된 비트를 지웁니다. 이 동작은 Intel 및 AMD 이외의 x86 품종에서는 확인되지 않았습니다. 비활성화되면 다중 세대 LRU의 성능이 무시할 수 있는 수준으로 저하됩니다.
[yYnN] 위의 모든 구성 요소를 활성화/비활성화합니다.

MGLRU를 활성화하는 방법의 예:

[ec2-user ~]$ echo y >/sys/kernel/mm/lru_gen/enabled

이렇게 하면 모든 구성 요소가 활성화됩니다.

[ec2-user ~]$ cat /sys/kernel/mm/lru_gen/enabled 0x0007