저는 Linux 커널의 Completely Fair Scheduler가 CPU 대역폭 제어를 어떻게 수행하는지 이해하려고 노력해 왔습니다.
많이 읽은 후에도 CFS가 각 cgroup이 자체 CFS 주기를 정의하도록 허용하는 방법과 이것이 kernel.sched_cfs_bandwidth_slice_us
sysctl 설정과 연결되는 방법을 여전히 이해할 수 없습니다.
예 A: 단일 CPU 시스템에는 서로 다른 CFS 기간으로 정의된 두 개의 cgroup이 있습니다. 각 cgroup의 할당량은 CPU 시간의 50%를 나타내며 총 100%입니다.
cgroup-A: cpu.cfs_period_us=100ms
cpu.cfs_quota_us=50ms
cgroup-B: cpu.cfs_period_us=1000ms
cpu.cfs_quota_us=500ms
각 cgroup에 실행 중인 프로세스가 있는 경우 CFS 기간이 주어지면 이러한 프로세스는 어떻게 예약됩니까(두 프로세스 모두 항상 CPU 시간이 필요하다고 가정)?
예 B: cgroup-B의 할당량이 실제로 물리적으로 충족할 수 있는 것보다 높으면 어떻게 됩니까? cgroup-B는 CPU 시간의 90%를 설정하고, cgroup-A는 계속해서 할당량을 CPU 시간의 50%로 설정합니다.
cgroup-A: cpu.cfs_period_us=100ms
cpu.cfs_quota_us=50ms
cgroup-B: cpu.cfs_period_us=1000ms
cpu.cfs_quota_us=900ms
할당량이 초과된 경우 CFS는 어떻게 프로세스를 예약합니까?
답변1
각 cgroup에 실행 중인 프로세스가 있는 경우 CFS 기간이 주어지면 이러한 프로세스는 어떻게 예약됩니까(두 프로세스 모두 항상 CPU 시간이 필요하다고 가정)?
구성하는 것은 전체 시스템의 50%가 아니라 CPU 코어/HT의 50%를 의미합니다.
할당량이 초과된 경우 CFS는 어떻게 프로세스를 예약합니까?
위와 동일하며 초과 구독이 없으면 두 프로세스가 각각 0.5 CPU와 0.9 CPU 시간을 사용할 수 있음을 의미합니다. 이를 이해하려면 시스템에 20개의 CPU 코어/HT가 있는 상황을 생각해 보세요.