

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

# AL2023 커널에서 Multi-Gen LRU(MGLRU) 사용
<a name="kernel-mglru-al2023"></a>

 [Multi-Gen LRU](https://docs.kernel.org/admin-guide/mm/multigen_lru.html)는 Linux 커널의 최신 페이지 재생 알고리즘으로, 메모리 부족 시 메모리 관리 성능을 개선하도록 설계되었습니다. 시스템에서 메모리 부족이 발생할 때 회수할 메모리 페이지를 결정하는 데 사용되는 기존의 가장 오래 전에 사용된(LRU) 메커니즘을 대체합니다.

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

 MGLRU의 이점은 다음과 같습니다.
+  **더 나은 회수 결정:** 콜드(미사용) 페이지를 더 정확하게 식별합니다.
+  **지연 시간 단축 및 처리량 향상:** 특히 주소 공간이 크거나 동시 프로세스가 많은 워크로드에 적합합니다.
+  **캐시 보존 개선:** 최근에 사용된 페이지는 조기에 제거될 가능성이 낮습니다.
+  **확장 가능하고 잠금 효율적인 설계:** 많은 CPU가 있는 시스템에서 더 나은 성능을 발휘합니다.

## 구성 및 튜닝
<a name="kernel-mglru-config-2023"></a>

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

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


| Bit | 구성 요소 | 
| --- | --- | 
| 0 | 다중 세대 LRU의 기본 스위치입니다. | 
| 1 |  MMU가 설정할 때 리프 페이지 테이블 항목의 액세스된 비트를 큰 배치로 지웁니다(예: x86). 이 동작은 이론적으로 잠금 경합(mmap\$1lock)을 악화시킬 수 있습니다. 비활성화되면 다중 세대 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
```