2.4GHz 프로세서를 탑재한 서버가 있습니다. 그리고 여러 cgroup이 있으며 각 cgroup은 CPU의 25%를 사용할 수 있습니다. 이는 600MHz에 해당합니다.
그런 다음 CPU를 더 빠른 3.0GHz로 변경했습니다. 내가 cpu.shares
사용한다면
이는 CPU를 변경한 후 cgroup이 CPU의 20% 이하를 소비하도록 cgroup을 재구성해야 함을 의미합니다.
CPU를 업그레이드할 때 이 문제를 피할 수 있는 방법이 있습니까?
답변1
그룹 간 지분은 상대적입니다. 예를 들어, CPU의 25%를 할당한다는 것은 cgroup이 "적어도" 그만큼의 CPU를 보게 되지만 더 많이 사용할 수 있다는 의미입니다. ~에서cgroup에 대한 Red Hat 문서:
CPU 시간 공유는 멀티 코어 시스템의 모든 CPU 코어에 분산됩니다. cgroup이 멀티 코어 시스템에서 CPU의 100% 미만으로 제한되더라도 각 개별 CPU 코어를 100% 사용할 수 있습니다.
...
cgroup에 사용 가능한 실제 CPU 시간은 시스템에 존재하는 cgroup 수에 따라 달라질 수 있습니다. 한 cgroup의 상대적 점유율이 1000이고 다른 두 cgroup의 상대적 점유율이 500인 경우 모든 cgroup의 프로세스가 CPU의 100%를 사용하려고 하면 첫 번째 cgroup이 전체 CPU 시간의 50%를 가져옵니다. 그러나 상대 공유가 1000인 다른 cgroup을 추가하면 첫 번째 cgroup은 CPU의 33%만 사용할 수 있습니다(나머지 cgroup은 CPU의 16.5%, 16.5% 및 33%를 얻습니다).
CPU 대역폭에 엄격한 제한을 적용하려면 cpu.cfs_quota_us
및 를 사용할 수 있습니다 cpu.cfs_period_us
. ~에서커널에 대한 CFS 문서:
할당량과 기한을 사용하여 그룹에 허용되는 대역폭을 지정합니다. 그룹은 주어진 각 "기간"(마이크로초) 동안 최대 "할당량" 마이크로초의 CPU 시간만 사용할 수 있습니다. 그룹의 CPU 대역폭 소비가 해당 기간 동안 이 제한을 초과하면 해당 계층에 속한 작업이 제한되고 다음 기간까지 다시 실행이 허용되지 않습니다.
그러나 두 옵션 모두 cgroups 구성을 변경하지 않고 서로 다른 CPU 간에 그룹을 마이그레이션하는 것을 허용하지 않습니다.