Linux 에서 특정 커널 메모리 할당자 사용 여부 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 특정 커널 메모리 할당자 (kernel memory allocator) 가 사용되고 있는지 확인하는 방법을 살펴봅니다. 할당자 통계, 커널 구성 및 시스템 로그를 검토하여 이를 수행할 것입니다.

먼저, cat /proc/slabinfo를 사용하여 커널의 슬랩 할당자 (slab allocator) 통계를 확인하여 메모리 관리에 대한 통찰력을 얻습니다. 그런 다음, zcat /proc/config.gz를 사용하여 커널 구성 파일을 검사하여 사용 중인 할당자를 확인합니다. 마지막으로, 관련 정보를 위해 dmesg에서 할당자 로그를 검사합니다. 이러한 단계는 사용 중인 커널 메모리 할당자를 식별하고 확인하는 방법을 이해하는 데 도움이 됩니다.

cat /proc/slabinfo로 할당자 통계 확인

이 단계에서는 cat /proc/slabinfo 명령을 사용하여 할당자 통계를 확인하는 방법을 살펴봅니다. 이 명령은 메모리를 효율적으로 관리하는 역할을 하는 커널의 슬랩 할당자 (slab allocator) 에 대한 자세한 정보를 제공합니다. 이 정보를 이해하는 것은 메모리 관련 문제를 디버깅하고 시스템 성능을 최적화하는 데 도움이 될 수 있습니다.

먼저, 명령을 실행해 보겠습니다.

cat /proc/slabinfo

이 명령은 슬랩 캐시 (slab cache) 목록과 관련 통계를 표시합니다. 처음에는 출력이 압도적으로 보일 수 있지만, 자세히 살펴보겠습니다.

다음은 표시될 수 있는 출력의 예입니다.

slabinfo - version: 2.1
kmem_cache            48     72    192    19    1    1
...
kmalloc-192           48     72    192    19    1    1
...

각 줄은 슬랩 캐시를 나타냅니다. 열은 캐시에 대한 정보를 제공합니다. 예를 들어:

  • name: 슬랩 캐시의 이름입니다.
  • <active_objs>: 캐시 내 활성 객체의 수입니다.
  • <num_objs>: 캐시 내 총 객체 수입니다.
  • <objsize>: 각 객체의 크기 (바이트) 입니다.
  • <objperslab>: 슬랩당 객체 수입니다.
  • <pagesperslab>: 슬랩당 페이지 수입니다.
  • <flags>: 캐시와 관련된 플래그입니다.

kmem_cache는 범용 캐시이고, kmalloc-192는 192 바이트 크기의 객체를 위한 캐시입니다.

출력을 더 읽기 쉽게 만들려면 less 명령을 사용할 수 있습니다.

cat /proc/slabinfo | less

이렇게 하면 출력을 페이지별로 스크롤할 수 있습니다. less를 종료하려면 q를 누르십시오.

grep을 사용하여 출력을 필터링하고 특정 슬랩 캐시에 집중할 수도 있습니다. 예를 들어, kmalloc-192 캐시에 대한 정보를 찾으려면 다음 명령을 사용할 수 있습니다.

cat /proc/slabinfo | grep kmalloc-192

그러면 "kmalloc-192"를 포함하는 줄만 표시됩니다.

cat /proc/slabinfo의 출력을 검사하여 커널이 메모리를 관리하는 방식을 파악하고 최적화할 수 있는 잠재적 영역을 식별할 수 있습니다.

zcat /proc/config.gz에서 할당자 확인

이 단계에서는 일반적으로 /proc/config.gz에 위치한 압축된 커널 구성 파일을 검사하여 할당자 구성을 확인합니다. 이 파일에는 메모리 할당과 관련된 옵션을 포함하여 커널을 빌드하는 데 사용된 구성 옵션이 포함되어 있습니다.

먼저, zcat 명령을 사용하여 구성 파일의 내용을 압축 해제하고 봅니다.

zcat /proc/config.gz

zcat 명령은 cat과 유사하지만, 자동으로 gzipped 파일을 압축 해제합니다. 출력은 긴 커널 구성 옵션 목록이 됩니다.

할당자 관련 옵션을 찾기 위해 grep을 사용하여 출력을 필터링할 수 있습니다. 예를 들어, 슬랩 할당자 (slab allocator) 와 관련된 옵션을 찾으려면 다음 명령을 사용할 수 있습니다.

zcat /proc/config.gz | grep SLAB

그러면 "SLAB"을 포함하는 줄이 표시됩니다. 다음과 같은 내용을 볼 수 있습니다.

CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set

이러한 옵션은 커널에서 어떤 슬랩 할당자가 활성화되었는지 나타냅니다. CONFIG_SLAB=y는 원래 슬랩 할당자가 활성화되었음을 나타내고, CONFIG_SLUB=y는 SLUB 할당자가 활성화되었음을 나타냅니다. 이 중 하나만 활성화되어야 합니다. CONFIG_SLOB는 임베디드 시스템을 위한 단순화된 할당자입니다.

페이지 할당자 (page allocator) 또는 버디 시스템 (buddy system) 과 관련된 옵션과 같은 다른 할당자 관련 옵션을 검색할 수도 있습니다. 예를 들어:

zcat /proc/config.gz | grep PAGE_ALLOC

그러면 페이지 할당과 관련된 옵션이 표시됩니다.

커널 구성 파일을 검사하여 어떤 할당자가 사용되고 있는지, 그리고 어떤 옵션이 활성화되었는지 확인할 수 있습니다. 이는 시스템의 메모리 관리 동작을 이해하는 데 도움이 될 수 있습니다.

dmesg 에서 할당자 로그 검토

이 단계에서는 dmesg 명령을 사용하여 커널의 메시지 버퍼를 검사하여 메모리 할당자와 관련된 로그를 찾습니다. dmesg 명령은 메모리 할당 및 해제를 포함하여 시스템 이벤트에 대한 귀중한 정보를 담을 수 있는 커널 링 버퍼의 메시지를 표시합니다.

커널 메시지를 보려면 다음을 입력하십시오.

dmesg

그러면 많은 양의 텍스트가 출력됩니다. 출력을 필터링하고 할당자 관련 메시지에 집중하기 위해 grep을 사용할 수 있습니다. 예를 들어, 슬랩 할당자 (slab allocator) 와 관련된 메시지를 찾으려면 다음을 사용하십시오.

dmesg | grep slab

다음과 유사한 출력을 볼 수 있습니다.

[    0.000000] SLUB: HWalign slab flags
[    1.234567] kmem_cache_create: slab created at <memory_address>

이러한 메시지는 슬랩 캐시 생성, 소멸 및 기타 이벤트에 대한 정보를 제공할 수 있습니다.

메모리 할당 실패와 관련된 메시지를 검색할 수도 있습니다.

dmesg | grep alloc

또는 메모리 부족 (OOM, out-of-memory) 상황과 관련된 메시지를 검색할 수도 있습니다.

dmesg | grep OOM

이러한 메시지는 메모리 관련 문제를 진단하는 데 도움이 될 수 있습니다.

출력을 더 관리하기 쉽게 만들려면 less를 사용하여 메시지를 스크롤할 수 있습니다.

dmesg | less

less를 종료하려면 q를 누르십시오.

dmesg 출력을 검사하여 메모리 할당자의 동작에 대한 통찰력을 얻고 잠재적인 문제를 식별할 수 있습니다.

요약

이 랩에서는 cat /proc/slabinfo 명령을 사용하여 커널 메모리 할당자 통계를 확인하는 방법을 살펴보았습니다. 이 명령은 커널의 슬랩 할당자에 대한 자세한 보기를 제공하며, 캐시 이름, 활성 및 총 객체 수, 객체 크기, 슬랩당 객체 수, 슬랩당 페이지 수 및 플래그를 포함하여 슬랩 캐시 목록과 관련 통계를 표시합니다.

또한 출력을 더 읽기 쉽게 만들기 위해 less를 사용하는 방법과 kmalloc-192와 같은 특정 슬랩 캐시에 집중하기 위해 출력을 필터링하는 grep을 사용하는 방법을 배웠습니다. 출력을 검사함으로써 커널이 메모리를 관리하는 방식에 대한 통찰력을 얻을 수 있습니다.