검색

3.9. 스케줄러 TuneD 플러그인의 기능

download PDF

스케줄러 TuneD 플러그인을 사용하여 스케줄링 우선 순위, CPU 코어 격리 및 프로세스, 스레드 및 IRQ afinities를 제어하고 조정합니다.

CPU 격리

프로세스, 스레드 및 IRQ가 특정 CPU를 사용하지 못하도록 하려면 isolated_cores 옵션을 사용합니다. 프로세스 및 스레드 특성을 변경하고 IRQ에 대한 default_smp_affinity 매개변수를 설정합니다.

CPU 선호도 마스크는 sched_setaffinity() 시스템 호출의 성공 여부에 따라 ps_whitelist 옵션과 일치하는 모든 프로세스 및 스레드에 맞게 조정됩니다. ps_whitelist 정규식의 기본 설정은 모든 프로세스 및 스레드 이름과 일치하는 .* 입니다. 특정 프로세스 및 스레드를 제외하려면 ps_blacklist 옵션을 사용합니다. 이 옵션의 값은 정규식으로도 해석됩니다. 프로세스 및 스레드 이름은 해당 표현식과 일치합니다. 프로필 롤백을 사용하면 일치하는 모든 프로세스 및 스레드를 모든 CPU에서 실행하고 profile 애플리케이션 전에 IRQ 설정을 복원합니다.

ps_whitelistps_blacklist 옵션은 .로 구분된 여러 정규식이 지원됩니다. \; 은 문자 그대로 사용됩니다.

예 3.9. CPU 2-4 분리

다음 구성은 CPU 2-4를 분리합니다. ps_blacklist 정규식과 일치하는 프로세스 및 스레드는 격리와 관계없이 모든 CPU를 사용할 수 있습니다.

[scheduler]
isolated_cores=2-4
ps_blacklist=.*pmd.*;.*PMD.*;^DPDK;.*qemu-kvm.*

IRQ SMP 선호도

/proc/irq/default_smp_affinity 파일에는 모든 비활성 인터럽트 요청(IRQ) 소스에 대해 시스템의 기본 대상 CPU 코어를 나타내는 비트마스크가 포함되어 있습니다. IRQ가 활성화되거나 할당되면 /proc/irq/default_smp_affinity 파일의 값이 IRQ의 선호도 비트마스크를 결정합니다.

default_irq_smp_affinity 매개변수는 /proc/irq/default_smp_affinity 파일에 쓰는 TuneD 를 제어합니다. default_irq_smp_affinity 매개변수는 다음 값과 동작을 지원합니다.

calc

isolated_cores 매개변수에서 /proc/irq/default_smp_affinity 파일의 내용을 계산합니다. isolated_cores 매개변수의 반전은 격리되지 않은 코어를 계산합니다.

그러면 격리되지 않은 코어와 /proc/irq/default_smp_affinity 파일의 이전 콘텐츠가 /proc/irq/default_smp_affinity 파일에 기록됩니다.

default_irq_smp_affinity 매개변수가 생략된 경우 기본 동작입니다.

ignore
tuned/proc/irq/default_smp_affinity 파일을 수정하지 않습니다.
CPU 목록

1 과 같은 단일 숫자 형식, 1,3 과 같은 쉼표로 구분된 목록 또는 3-5 와 같은 범위를 가져옵니다.

CPU 목록의 압축을 풀고 /proc/irq/default_smp_affinity 파일에 직접 씁니다.

예 3.10. 명시적 CPU 목록을 사용하여 기본 IRQ smp 유사성 설정

다음 예제에서는 명시적 CPU 목록을 사용하여 기본 IRQ SMP 선호도를 CPU 0 및 2로 설정합니다.

[scheduler]
isolated_cores=1,3
default_irq_smp_affinity=0,2

스케줄링 정책

프로세스 또는 스레드 그룹의 우선 순위 및 선호도를 조정하려면 다음 구문을 사용합니다.

group.groupname=rule_prio:sched:prio:affinity:regex

여기서 rule_prio 는 규칙의 내부 TuneD 우선 순위를 정의합니다. 규칙은 우선 순위에 따라 정렬됩니다. 이는 상속이 이전에 정의된 규칙을 다시 정렬할 수 있도록 하는 데 필요합니다. 동일한 rule_prio 규칙을 정의한 순서대로 처리해야 합니다. 그러나 이것은 Python 인터프리터에 의존하는 것입니다. 그룹 이름에 대해 상속된 규칙을 비활성화하려면 다음을 사용합니다.

group.groupname=

Sched는 다음 중 하나여야 합니다.

f
for first in, first out (FIFO)
b
일괄 처리의 경우
r
라운드 로빈의 경우
o
기타의 경우
*
for do not change

유사성 은 16진수의 CPU 선호도입니다. 변경하지 않으려면 * 를 사용하십시오.

P rio 는 스케줄링 우선 순위입니다( chrt -m참조).

regex 는 Python 정규식입니다. ps -eo cmd 명령의 출력과 일치합니다.

지정된 프로세스 이름은 둘 이상의 그룹과 일치할 수 있습니다. 이러한 경우 마지막 일치 regex 는 우선 순위 및 스케줄링 정책을 결정합니다.

예 3.11. 스케줄링 정책 및 우선순위 설정

다음 예제에서는 스케줄링 정책 및 우선순위를 커널 스레드 및 워치독으로 설정합니다.

[scheduler]
group.kthreads=0:*:1:*:\[.*\]$
group.watchdog=0:f:99:*:\[watchdog.*\]

스케줄러 플러그인은 perf 이벤트 루프를 사용하여 새로 생성된 프로세스를 식별합니다. 기본적으로 perf.RECORD_COMMperf.RECORD_EXIT 이벤트를 수신합니다.

perf_process_fork 매개변수를 true 로 설정하면 플러그인이 perf.RECORD_FORK 이벤트를 수신 대기하도록 지시합니다. 즉, fork() 시스템 호출에 의해 생성된 하위 프로세스가 처리됩니다.

참고

perf 이벤트를 처리하면 상당한 CPU 오버헤드가 발생할 수 있습니다.

스케줄러 런타임 옵션을 사용하여 0 으로 설정하여 스케줄러 플러그인의 CPU 오버헤드를 완화할 수 있습니다. 이렇게 하면 동적 스케줄러 기능이 완전히 비활성화되고 perf 이벤트가 모니터링되지 않고 작동합니다. 이에 대한 단점은 프로세스 및 스레드 튜닝이 프로필 애플리케이션에서만 수행된다는 것입니다.

예 3.12. 동적 스케줄러 기능 비활성화

다음 예제에서는 CPU 1과 3을 격리하는 동안 동적 스케줄러 기능을 비활성화합니다.

[scheduler]
runtime=0
isolated_cores=1,3

mmapped 버퍼는 perf 이벤트에 사용됩니다. 로드가 많은 경우 이 버퍼가 오버플로될 수 있으므로 플러그인이 누락된 이벤트를 시작하고 새로 생성된 일부 프로세스를 처리하지 못할 수 있습니다. 이러한 경우 perf_mmap_pages 매개변수를 사용하여 버퍼 크기를 늘립니다. perf_mmap_pages 매개변수의 값은 2의 power여야 합니다. perf_mmap_pages 매개변수가 수동으로 설정되지 않은 경우 기본값 128이 사용됩니다.

cgroup을 사용한 제한

스케줄러 플러그인은 cgroups v1을 사용하여 프로세스 및 스레드 제한을 지원합니다.

cgroup_mount_point 옵션은 cgroup 파일 시스템을 마운트할 경로를 지정하거나 TuneD 에서 마운트할 것으로 예상합니다. 설정되지 않은 경우 /sys/fs/cgroup/cpuset 이 예상됩니다.

cgroup_groups_init 옵션이 1 로 설정된 경우TuneDcgroup* 옵션으로 정의된 모든 cgroup 을 생성하고 제거합니다. 이는 기본 동작입니다. cgroup_mount_point 옵션이 0 으로 설정된 경우 다른 방법으로 cgroup 을 사전 설정해야 합니다.

cgroup_mount_point_init 옵션이 1 로 설정된 경우TuneD 는 cgroup 마운트 지점을 생성하고 제거합니다. cgroup_groups_init = 1 임을 의미합니다. cgroup_mount_point_init 옵션이 0 으로 설정된 경우 cgroups 마운트 지점을 다른 방법으로 사전 설정해야 합니다. 이는 기본 동작입니다.

cgroup_for_isolated_cores 옵션은 isolated_cores 옵션 기능의 cgroup 이름입니다. 예를 들어 시스템에 CPU가 4개인 경우 isolated_cores=1Tuned 가 모든 프로세스와 스레드를 CPU 0, 2 및 3으로 이동함을 의미합니다. 스케줄러 플러그인은 계산된 CPU 선호도를 지정된 cgroup의 cpuset.cpus 제어 파일에 작성하고 일치하는 모든 프로세스 및 스레드를 이 그룹으로 이동하여 지정된 코어를 분리합니다. 이 옵션이 설정되지 않은 경우 sched_setaffinity() 를 사용하여 클래식 cpuset 선호도가 CPU 선호도를 설정합니다.

cgroup.cgroup_name 옵션은 임의의 cgroup 에 대한 연결을 정의합니다. hierarchic cgroups도 사용할 수 있지만 계층 구조를 올바른 순서로 지정해야 합니다. tunedcgroup_mount_point 옵션에 의해 지정된 위치에 cgroup 을 강제 적용하는 것을 제외하고 여기에 정당성 검사를 수행하지 않습니다.

group 으로 시작하는 스케줄러 옵션의 구문은 16진수 선호도 대신 cgroup.cgroup_name 을 사용하도록 보강되었습니다. 일치하는 프로세스가 cgroup cgroup_name 으로 이동합니다. 위에 설명된 대로 cgroup. 옵션에 정의되지 않은 cgroup을 사용할 수도 있습니다. 예를 들어 cgroupTuneD 에서 관리하지 않습니다.

모든 cgroup 이름은 모든 마침표(.)를 슬래시(/)로 교체하여 종료됩니다. 이렇게 하면 플러그인이 cgroup_mount_point 옵션으로 지정된 위치 외부에 기록되지 않습니다.

예 3.13. 스케줄러 플러그인과 함께 cgroups v1 사용

다음 예제에서는 cgroup 2개,group1group2 를 생성합니다. cgroup group1 선호도를 CPU 2로 설정하고 cgroup group2 를 CPU 0 및 2로 설정합니다. 4 CPU 설정이 지정된 경우 isolated_cores=1 옵션은 모든 프로세스와 스레드를 CPU 코어 0, 2 및 3으로 이동합니다. ps_blacklist 정규식으로 지정된 프로세스 및 스레드는 이동되지 않습니다.

[scheduler]
cgroup_mount_point=/sys/fs/cgroup/cpuset
cgroup_mount_point_init=1
cgroup_groups_init=1
cgroup_for_isolated_cores=group
cgroup.group1=2
cgroup.group2=0,2

group.ksoftirqd=0:f:2:cgroup.group1:ksoftirqd.*
ps_blacklist=ksoftirqd.*;rcuc.*;rcub.*;ktimersoftd.*
isolated_cores=1

cgroup_ps_blacklist 옵션은 지정된 cgroup 에 속하는 프로세스를 제외합니다. 이 옵션으로 지정된 정규식은 /proc/PID/cgroupscgroup 계층 구조와 일치합니다. 쉼표(,)는 정규식과 일치하기 전에 cgroup v1 계층을 /proc/PID/cgroups 에서 분리합니다. 다음은 정규식이 일치하는 콘텐츠의 예입니다.

10:hugetlb:/,9:perf_event:/,8:blkio:/

여러 정규 표현식은 together(;)으로 구분할 수 있습니다. together는 논리 '또는' 연산자를 나타냅니다.

예 3.14. cgroup을 사용하여 스케줄러에서 프로세스 제외

다음 예에서 스케줄러 플러그인은 cgroup /daemons 에 속하는 프로세스를 제외하고 모든 프로세스를 코어 1에서 이동합니다. \b 문자열은 단어 경계와 일치하는 정규식 메타 문자입니다.

[scheduler]
isolated_cores=1
cgroup_ps_blacklist=:/daemons\b

다음 예에서 스케줄러 플러그인은 hierarchy-ID가 8이고 controller-list blkio 인 cgroup에 속하는 모든 프로세스를 제외합니다.

[scheduler]
isolated_cores=1
cgroup_ps_blacklist=\b8:blkio:

최근 커널은 sysctl 유틸리티에서 관리하는 /proc/sys/kernel 디렉터리에서 일반적으로 /sys/kernel/ debug 디렉터리에 마운트된 일부 sched_numa_balancing_ 커널 런타임 매개변수를 /proc/sys/kernel 디렉터리에 이동했습니다. tuned는 스케줄러 플러그인을 통해 다음 매개변수에 대한 추상화 메커니즘을 제공합니다. 여기서 사용된 커널을 기반으로 TuneD 는 지정된 값을 올바른 위치에 씁니다.

  • sched_min_granularity_ns
  • sched_latency_ns,
  • sched_wakeup_granularity_ns
  • sched_tunable_scaling,
  • sched_migration_cost_ns
  • sched_nr_migrate
  • numa_balancing_scan_delay_ms
  • numa_balancing_scan_period_min_ms
  • numa_balancing_scan_period_max_ms
  • numa_balancing_scan_size_mb

    예 3.15. 마이그레이션 결정에 대한 작업의 "캐시 핫" 값을 설정합니다.

    이전 커널에서 다음 매개변수를 설정하면 sysctl/proc/sys/kernel/sched_migration_cost_ns 파일에 500000 값을 작성했습니다.

    [sysctl]
    kernel.sched_migration_cost_ns=500000

    이는 스케줄러 플러그인을 통해 다음 매개변수를 설정하는 것과 동일한 최신 커널에서 다음과 같습니다.

    [scheduler]
    sched_migration_cost_ns=500000

    TuneD/sys/kernel/debug/sched/migration_cost_ns 파일에 500000 값을 씁니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.