Linux 커널 스케줄러 설정 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 커널 스케줄러 설정을 확인하는 방법을 배우게 됩니다. 스케줄러는 프로세스가 CPU 시간을 공유하는 방식을 관리하는 기본적인 구성 요소입니다. 성능 분석 및 문제 해결을 위해서는 해당 설정을 이해하는 것이 중요합니다.

실습 단계를 통해 스케줄러 설정을 검사하는 세 가지 방법을 살펴볼 것입니다: sysctl 명령을 사용하여 커널 파라미터를 확인하고, 스케줄러 관련 파일을 위해 /proc/sys/kernel 파일 시스템을 검사하며, dmesg를 통해 스케줄러 관련 메시지를 위해 커널 로그를 검사합니다. 이러한 기술은 스케줄러의 현재 상태와 동작에 대한 다양한 관점을 제공합니다.

sysctl kernel.sched 로 스케줄러 설정 확인

이 단계에서는 sysctl 명령을 사용하여 커널의 스케줄러 설정을 확인하는 방법을 살펴봅니다. 스케줄러는 CPU 에서 어떤 프로세스가 얼마나 오랫동안 실행될지 결정하는 Linux 커널의 중요한 부분입니다. 해당 설정을 이해하는 것은 성능 튜닝 및 문제 해결에 도움이 될 수 있습니다.

sysctl 명령은 런타임에 커널 파라미터를 수정하는 데 사용됩니다. 또한 이러한 파라미터의 현재 값을 확인하는 데에도 사용할 수 있습니다. 커널 파라미터는 파일 시스템과 유사한 계층 구조로 구성되어 있습니다.

커널 스케줄러와 관련된 파라미터를 보려면 kernel.sched 접두사를 사용하여 sysctl을 사용할 수 있습니다.

아직 열려 있지 않다면 터미널을 엽니다. 데스크탑 왼쪽에서 Xfce Terminal 아이콘을 찾을 수 있습니다.

이제 다음 명령을 입력하고 Enter 키를 누릅니다.

sysctl kernel.sched

다음과 유사한 출력이 표시되어 다양한 스케줄러 관련 파라미터와 현재 값을 보여줍니다.

kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 8000000
kernel.sched_wakeup_granularity_ns = 9000000
kernel.sched_latency_ns = 24000000
kernel.sched_migration_cost_ns = 50000
kernel.sched_nr_migrate = 32
kernel.sched_tunable_scaling = 1
kernel.sched_domain.cpu0.domain0 = ...
kernel.sched_domain.cpu0.domain1 = ...
...

정확한 출력은 특정 커널 버전 및 시스템 구성에 따라 약간 다를 수 있습니다. 이 명령은 스케줄러가 현재 어떻게 구성되어 있는지에 대한 스냅샷을 제공합니다.

이러한 각 파라미터를 이해하는 것은 이 소개 랩의 범위를 벗어나지만, 핵심은 이러한 설정을 검사하려는 경우 sysctl kernel.sched 명령을 사용한다는 것입니다.

다음 단계로 진행하려면 **계속 (Continue)**을 클릭하십시오.

/proc/sys/kernel 에서 스케줄러 확인

이전 단계에서는 sysctl을 사용하여 커널 파라미터를 확인했습니다. 이러한 파라미터에 접근하고 때로는 수정하는 또 다른 방법은 /proc 파일 시스템을 이용하는 것입니다. /proc 파일 시스템은 프로세스 및 기타 시스템 정보에 대한 정보를 제공하는 가상 파일 시스템입니다.

sysctl을 통해 접근할 수 있는 커널 파라미터는 종종 /proc/sys 디렉토리에 미러링됩니다. 특히, 스케줄러 관련 파라미터는 /proc/sys/kernel/ 아래에서 찾을 수 있습니다.

이 디렉토리로 이동하여 내용을 나열해 보겠습니다. cd 명령을 사용하여 디렉토리를 변경하고 ls를 사용하여 파일 및 디렉토리를 나열합니다.

현재 디렉토리를 /proc/sys/kernel/로 변경하려면 다음 명령을 입력하십시오.

cd /proc/sys/kernel/

이제 이 디렉토리의 파일을 나열합니다.

ls

각각 커널 파라미터를 나타내는 긴 파일 목록이 표시됩니다. sched_로 시작하는 파일을 찾습니다. 이러한 파일은 sysctl로 확인한 kernel.sched 파라미터에 해당합니다.

...
sched_child_runs_first
sched_latency_ns
sched_migration_cost_ns
sched_min_granularity_ns
sched_nr_migrate
sched_rr_timeslice_ms
sched_rt_period_us
sched_rt_runtime_us
sched_shares_window_ns
sched_tunable_scaling
sched_wakeup_granularity_ns
...

cat과 같은 명령을 사용하여 이러한 파일의 내용을 볼 수 있습니다. 예를 들어, sched_latency_ns의 값을 보려면 다음을 입력하십시오.

cat sched_latency_ns

sysctl을 사용할 때 kernel.sched_latency_ns에 대해 확인한 것과 동일한 값인 숫자가 표시됩니다.

24000000

이는 sysctl kernel.sched에서 제공하는 정보가 /proc/sys/kernel/ 디렉토리 내의 파일에서 제공된다는 것을 보여줍니다. sysctl은 파라미터를 확인하고 수정하는 데 종종 더 편리하지만, /proc 파일 시스템을 이해하면 커널이 내부 상태를 노출하는 방식에 대한 더 깊은 통찰력을 얻을 수 있습니다.

다음으로 이동하려면 **계속 (Continue)**을 클릭하십시오.

dmesg 에서 스케줄러 로그 검토

이 마지막 단계에서는 dmesg 명령을 사용하여 스케줄러와 관련된 커널 메시지를 살펴보겠습니다. dmesg는 커널 링 버퍼 메시지를 표시하는 명령입니다. 이러한 메시지는 부팅 및 런타임 중에 커널에 의해 생성되며, 스케줄러 활동을 포함하여 하드웨어, 드라이버 및 시스템 이벤트에 대한 귀중한 정보를 포함할 수 있습니다.

sysctl/proc/sys는 현재 구성을 보여주는 반면, dmesg는 때때로 스케줄러 초기화 또는 중요한 이벤트와 관련된 메시지를 표시할 수 있습니다.

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

dmesg

이 명령은 시스템이 부팅된 이후의 모든 커널 메시지를 표시하므로 매우 긴 출력을 생성할 가능성이 높습니다. 스케줄러와 관련된 메시지를 특별히 찾기 위해 grep 명령을 사용하여 출력을 필터링할 수 있습니다. "sched"라는 단어가 포함된 줄을 검색합니다.

다음 명령을 입력하십시오.

dmesg | grep sched

| 기호는 파이프라고 합니다. 왼쪽의 명령 (dmesg) 의 출력을 가져와 오른쪽의 명령 (grep sched) 에 입력으로 보냅니다. 그런 다음 grep sched는 수신한 입력에서 "sched"를 포함하는 줄을 검색합니다.

다음과 유사한 출력이 표시되어 시스템 시작 중 스케줄러와 관련된 메시지를 보여줄 수 있습니다.

[    0.000000] Linux version ... (gcc version ...) #... SMP ...
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-... root=... ro quiet splash vt.handoff=...
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-... root=... ro quiet splash vt.handoff=...
[    0.000000] PID scheduler: ...
[    0.000000] Mount-cache hash table entries: ... (order: ..., 65536 bytes, linear)
[    0.000000] Mountpoint-cache hash table entries: ... (order: ..., 65536 bytes, linear)
[    0.000000] CPU: Testing write buffer coherency: ...
[    0.000000] smpboot: CPU0: ...
[    0.000000] setup_percpu: System has ... CPUs.
[    0.000000] percpu: Embedded ... pages/cpu s...
[    0.000000] pcpu: PCPU: ...
[    0.000000] Built 1-level schedule group tree
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is ...
[    0.000000] rcu: Adjusting scheduler-enlistment delay with ...
[    0.000000] rcu: RCU restricting CPUs from NR_CPUS=... to nr_cpu_ids=...
[    0.000000] rcu: rcu_sched detected stalls on CPUs/tasks:
...

다시 말하지만, 정확한 출력은 다를 것입니다. 이 명령은 문제를 진단하거나 커널에 의해 스케줄러가 어떻게 초기화되었는지 이해하는 데 유용합니다.

이제 Linux 커널 스케줄러에 대한 정보를 얻는 세 가지 다른 방법을 배웠습니다. 현재 파라미터에 대한 sysctl 사용, /proc/sys/kernel/의 파일 검사, dmesg를 사용한 커널 메시지 확인.

이 랩을 완료하려면 **계속 (Continue)**을 클릭하십시오.

요약

이 랩에서는 두 가지 주요 방법을 사용하여 Linux 에서 커널 스케줄러 구성을 확인하는 방법을 배웠습니다. 먼저, sysctl kernel.sched 명령을 사용하여 다양한 스케줄러 관련 파라미터와 현재 값을 확인하여 스케줄러의 런타임 설정을 스냅샷으로 제공했습니다.

둘째, 커널 파라미터에 접근하는 대체 방법으로 /proc 파일 시스템을 탐색했으며, 특히 sysctl을 통해 접근할 수 있는 파라미터를 미러링하는 /proc/sys/kernel 경로에 중점을 두었습니다. 이러한 단계는 명령줄 유틸리티와 가상 파일 시스템을 통해 커널 스케줄러의 구성을 검사하는 방법을 보여주었습니다.