소개
이 랩에서는 특정 커널 slab 설정이 Linux 에서 활성화되어 있는지 확인하는 방법을 배우게 됩니다. 커널의 메모리 관리를 검사하는 다양한 방법을 탐구하고, 특히 slab 할당자에 초점을 맞출 것입니다.
이 랩에서는 /proc/slabinfo를 사용하여 slab 통계를 확인하고, sysctl vm으로 관련 설정을 확인하며, dmesg에서 관련 로그를 검사하는 과정을 안내합니다. 이러한 단계를 통해 커널 slab 동작을 이해하고 문제 해결하는 데 필요한 기술을 습득할 수 있습니다.
cat /proc/slabinfo로 slab 통계 확인
이 단계에서는 /proc/slabinfo 파일을 사용하여 커널의 slab 할당자 통계를 검사하는 방법을 배우게 됩니다. slab 할당자는 Linux 커널이 작은 객체를 효율적으로 관리하기 위해 사용하는 메모리 관리 메커니즘입니다. slab 사용량을 이해하는 것은 메모리 관련 문제를 진단하는 데 도움이 될 수 있습니다.
/proc 파일 시스템은 프로세스 및 기타 시스템 정보를 제공하는 가상 파일 시스템입니다. /proc/slabinfo는 특히 커널의 slab 캐시에 대한 세부 정보를 포함합니다.
/proc/slabinfo의 내용을 보려면 cat 명령을 사용합니다. cat은 파일을 순차적으로 읽어 표준 출력으로 쓰는 표준 Unix 유틸리티입니다.
아직 열려 있지 않은 경우 터미널을 엽니다. 데스크탑 왼쪽의 Xfce Terminal 아이콘을 클릭하여 터미널을 열 수 있습니다.
이제 다음 명령을 입력하고 Enter 키를 누릅니다.
cat /proc/slabinfo
다음과 유사한 출력을 보게 됩니다 (정확한 내용은 시스템 활동에 따라 다릅니다).
slabinfo - version: 2.1
## name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect 0 0 128 63 1 : tunables 0 0 0 : slabdata 0 0 0
nf_conntrack 10 10 320 25 2 : tunables 0 0 0 : slabdata 1 1 0
request_sock_TCP 0 0 192 42 1 : tunables 0 0 0 : slabdata 0 0 0
... (many more lines)
출력을 자세히 살펴보겠습니다.
- name: slab 캐시의 이름 (예:
nf_conntrack,request_sock_TCP). : 현재 이 캐시에서 사용 중인 객체의 수. : 이 캐시에 할당된 총 객체 수. : 각 객체의 크기 (바이트). : 단일 slab 에 맞는 객체의 수. : 단일 slab 에서 사용되는 메모리 페이지 수. - tunables: 이 캐시에 대해 조정할 수 있는 매개변수.
- slabdata: slab 자체에 대한 정보.
이 출력은 커널이 다양한 내부 데이터 구조에 메모리를 사용하는 방식의 스냅샷을 제공합니다. 원시 출력은 방대할 수 있지만, 고급 Linux 문제 해결을 위한 기본적인 정보 소스입니다.
slab 할당자 통계를 성공적으로 확인했습니다. 다음 단계로 진행하려면 Continue를 클릭하십시오.
sysctl vm 으로 slab 설정 확인
이 단계에서는 sysctl 명령을 사용하여 가상 메모리 및 slab 할당자와 관련된 커널 매개변수를 탐구합니다. sysctl은 런타임에 커널 매개변수를 보고 수정할 수 있는 유틸리티입니다.
커널 매개변수는 Linux 커널의 동작에 영향을 미치는 구성 옵션입니다. 이러한 매개변수 중 다수는 /proc/sys 파일 시스템에 있습니다. sysctl은 /proc/sys의 파일과 직접 상호 작용하지 않고 이러한 매개변수에 편리하게 액세스하고 관리할 수 있는 방법을 제공합니다.
우리는 가상 메모리와 관련된 매개변수에 관심이 있으며, 여기에는 slab 할당자의 측면을 포함하여 메모리 관리에 영향을 미치는 설정이 포함되는 경우가 많습니다. 이러한 매개변수는 일반적으로 vm 서브트리에 그룹화됩니다.
가상 메모리와 관련된 모든 커널 매개변수를 보려면 vm 인수를 사용하여 sysctl 명령을 사용하십시오.
sysctl vm
터미널에 명령을 입력하고 Enter 키를 누릅니다. 다음과 유사한 매개변수 목록과 현재 값을 볼 수 있습니다.
vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_memory = 0
vm.compact_unevictable_percentage = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.lowmem_reserve_ratio = 256 256 32 0 0
vm.max_map_count = 65530
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 65536
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_balancing = 1
vm.numa_balancing_scan_delay_ms = 1000
vm.numa_balancing_scan_period_min_ms = 20
vm.numa_balancing_scan_period_max_ms = 10000
vm.numa_balancing_scan_size_mb = 32
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100
vm.vfs_cache_pressure 또는 vm.min_slab_ratio와 같이 캐싱 또는 메모리 압력과 관련될 수 있는 매개변수를 찾습니다. 이러한 매개변수는 slab 캐시를 포함하여 커널이 다양한 유형의 캐시를 관리하는 방식에 영향을 미칠 수 있습니다.
전체 이름을 제공하여 특정 매개변수를 볼 수도 있습니다. 예를 들어, vm.vfs_cache_pressure의 값을 보려면 다음을 수행합니다.
sysctl vm.vfs_cache_pressure
이 명령은 다음을 출력합니다.
vm.vfs_cache_pressure = 100
vm.vfs_cache_pressure 매개변수는 커널이 디렉토리 및 inode 객체를 캐싱하는 데 사용되는 메모리를 회수하는 경향을 제어합니다. 값이 높을수록 커널이 이 메모리를 더 적극적으로 회수합니다.
이러한 매개변수를 이해하면 시스템의 메모리 동작을 조정하는 데 도움이 될 수 있습니다.
다음 단계로 이동하려면 Continue를 클릭하십시오.
dmesg 에서 slab 로그 검토
이 마지막 단계에서는 dmesg 명령을 사용하여 slab 할당자와 관련된 메시지를 커널 메시지 버퍼에서 확인하는 방법을 배우게 됩니다. 커널 메시지 버퍼는 부팅 및 런타임 중에 커널에서 생성된 메시지를 저장합니다. 이러한 메시지에는 하드웨어, 장치 드라이버 및 slab 할당자와 같은 커널 서브시스템에 대한 정보가 포함될 수 있습니다.
dmesg 명령은 커널 링 버퍼를 인쇄하거나 제어하는 데 사용됩니다. 이 버퍼에는 커널의 메시지가 포함되어 있으며, 이는 디버깅 및 문제 해결에 유용한 경우가 많습니다.
전체 커널 메시지 버퍼를 보려면 단순히 dmesg를 실행하면 됩니다.
dmesg
그러나 출력은 매우 길 수 있습니다. slab 할당자와 관련된 메시지를 특별히 찾으려면 dmesg의 출력을 grep 명령으로 파이프하고 "slab" 또는 "SLUB" (SLUB 는 최신 slab 할당자 구현) 와 같은 키워드를 검색할 수 있습니다.
터미널에 다음 명령을 입력하고 Enter 키를 누릅니다.
dmesg | grep -i "slab\|slub"
이 명령을 자세히 살펴보겠습니다.
dmesg: 커널 메시지 버퍼를 인쇄합니다.|: 이것은 파이프이며, 왼쪽의 명령의 출력을 오른쪽의 명령에 대한 입력으로 보냅니다.grep: 일반 텍스트 데이터 세트에서 정규식과 일치하는 줄을 검색하는 명령줄 유틸리티입니다.-i: 이 옵션은 검색을 대소문자를 구분하지 않도록 하므로 "slab", "SLAB", "slub", "SLUB" 등과 일치합니다."slab\|slub": 이것은 검색 패턴입니다.slab은 "slab"이라는 단어를 검색하고,\|는 OR 연산자 역할을 하며,slub는 "slub"라는 단어를 검색합니다.
출력은 커널 메시지 버퍼에서 "slab" 또는 "slub" (대소문자 구분 없음) 를 포함하는 모든 줄을 표시합니다. 부팅 중 slab 할당자의 초기화와 관련된 메시지 또는 문제가 있는 경우 잠재적인 경고 또는 오류를 볼 수 있습니다.
[ 0.000000] kmem_cache_init
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] SLUB: TotalObjects=0, ObjectsPerSpan=0, SpansPerChunk=0
[ 0.000000] SLUB: min_objects.limit=0, min_objects.batchcount=0
[ 0.000000] SLUB: tunables.limit=0, tunables.batchcount=0, tunables.sharedfactor=0
[ 0.000000] SLUB: Not setting slab_nomerge.
[ 0.000000] SLUB: Not setting slab_debug.
[ 0.000000] SLUB: Not setting slab_max_order.
[ 0.000000] SLUB: Not setting slab_alias_debug.
[ 0.000000] SLUB: Not setting slab_pad.
[ 0.000000] SLUB: Not setting slab_red_zone.
[ 0.000000] SLUB: Not setting slab_poison.
[ 0.000000] SLUB: Not setting slab_freelist_debug.
[ 0.000000] SLUB: Not setting slab_freelist_random.
[ 0.000000] SLUB: Not setting slab_freelist_hardened.
[ 0.000000] SLUB: Not setting slab_trace.
[ 0.000000] SLUB: Not setting slab_reclaim_account.
[ 0.000000] SLUB: Not setting slab_way.
[ 0.000000] SLUB: Not setting slab_sizes.
[ 0.000000] SLUB: Not setting slab_caches.
[ 0.000000] SLUB: Not setting slab_test.
[ 0.000000] SLUB: Not setting slab_order.
[ 0.000000] SLUB: Not setting slab_debug_objects.
[ 0.000000] SLUB: Not setting slab_debug_memcg.
[ 0.000000] SLUB: Not setting slab_debug_check_objects.
[ 0.000000] SLUB: Not setting slab_debug_check_freelist.
[ 0.000000] SLUB: Not setting slab_debug_check_alloc.
[ 0.000000] SLUB: Not setting slab_debug_check_free.
[ 0.000000] SLUB: Not setting slab_debug_check_redzone.
[ 0.000000] SLUB: Not setting slab_debug_check_poison.
[ 0.000000] SLUB: Not setting slab_debug_check_trace.
[ 0.000000] SLUB: Not setting slab_debug_check_reclaim_account.
[ 0.000000] SLUB: Not setting slab_debug_check_way.
[ 0.000000] SLUB: Not setting slab_debug_check_sizes.
[ 0.000000] SLUB: Not setting slab_debug_check_caches.
[ 0.000000] SLUB: Not setting slab_debug_check_test.
[ 0.000000] SLUB: Not setting slab_debug_check_order.
[ 0.000000] SLUB: Not setting slab_debug_check_debug_objects.
[ 0.000000] SLUB: Not setting slab_debug_check_debug_memcg.
이 명령은 커널 메시지를 필터링하고 특정 커널 서브시스템의 문제 해결에 관련된 정보를 찾는 강력한 방법입니다.
이제 slab 통계를 검사하고, 관련 커널 매개변수를 확인하고, slab 관련 메시지에 대한 커널 로그를 확인하는 방법을 배웠습니다. 이는 Linux 에서 메모리 사용량을 이해하고 진단하기 위한 기본적인 기술입니다.
이 랩을 완료하려면 Continue를 클릭하십시오.
요약
이 랩에서는 Linux 에서 커널 slab 설정을 확인하는 방법을 배웠습니다. 먼저, 활성 객체, 총 객체 수, 객체 크기 및 다양한 slab 캐시에 대한 기타 관련 세부 정보를 제공하는 /proc/slabinfo 파일을 사용하여 커널의 slab 할당자 통계를 검사하는 것으로 시작했습니다. 이 단계에서는 cat 명령을 사용하여 이 중요한 메모리 관리 데이터를 보는 방법을 보여주었습니다.
다음으로, sysctl vm 명령을 사용하여 slab 설정을 확인했습니다. 이 명령을 사용하면 slab 관련 튜닝 가능성을 포함하여 가상 메모리와 관련된 커널 매개변수를 검사하고 수정할 수 있습니다. 마지막으로, slab 할당자와 관련된 오류 또는 경고를 식별하기 위해 커널 메시지 버퍼인 dmesg에서 slab 관련 로그를 검사하는 방법을 배웠습니다. 이러한 단계는 커널 slab 동작을 이해하고 문제 해결하기 위한 포괄적인 접근 방식을 제공합니다.



