리눅스에서 cpusets란 무엇이며 cgroups와 함께 어떻게 사용하는가?

마지막 업데이트 : 17/12/2025
저자 : 이삭
  • Cpusets는 cgroups의 하위 시스템으로, 프로세스가 실행될 수 있는 CPU 및 메모리 노드와 메모리 예약 위치를 제한합니다.
  • 설정은 cgroup 파일 시스템을 통해 이루어지며, 디렉터리 계층 구조를 생성하고 cpuset.cpus 및 cpuset.mems와 같은 파일을 조정합니다.
  • CPU, 메모리 또는 blkio와 같은 추가 컨트롤러를 사용하면 CPU, RAM 및 I/O를 제한하고 관리할 수 있으며, CPU 세트를 전체 리소스 관리 전략에 통합할 수 있습니다.
  • cgroup v2에서는 CPU 및 CPUSet과 같은 컨트롤러가 단일 트리로 결합되어 cpu.max와 같은 파일을 통해 정확한 CPU 할당량을 설정할 수 있습니다.

Linux의 cpusets

서버 관련 업무를 하신다면 Linux 다양한 서비스가 탑재되어 있어서 어떻게 작동하는지 궁금하셨을 겁니다. 잘 분배하세요 CPU 및 메모리 프로세스 간에 어느 한쪽이 다른 쪽을 압도하지 않도록 합니다. 우선순위 설정 nice 고전적인 제한은 도움이 되지만, 모두가 모든 자원을 차지하려 들면 시스템은 정글이 되어버립니다.

여기서 커널의 두 가지 핵심 부분이 중요한 역할을 합니다. cgroups 및 cpuset 하위 시스템이를 통해 어떤 프로세스가 어떤 CPU와 메모리 노드를 사용할지 정확하게 결정하고, 사용량을 모니터링하고, CPU 또는 디스크 대역폭을 제한하고, 심지어 동일한 서버 내에서 "소프트 파티션"을 생성하도록 그룹화할 수도 있습니다.

cgroups란 무엇이며 왜 중요한가요?

대조군(cgroups) 이것들은 리눅스 커널의 메커니즘입니다. 그룹 프로세스를 만들고 공통 리소스 정책을 적용합니다.CPU, 메모리, 디스크 I/O, 장치, 네트워크 등. 이러한 기능은 기존 권한을 대체하는 것이 아니라, 관점에서 기존 권한을 보완하는 역할을 합니다. 얼마 한 집단만이 소비하는 것이 아니라, 각 집단이 소비합니다. 저것 접근 권한이 있습니다.

기존 도구와 비교했을 때 nice, ionice o limits.confcgroups를 사용하면 정의할 수 있습니다. 그룹 계층 구조 각 프로세스 집합은 해당 그룹 내 프로세스 수와 관계없이 미리 정의된 리소스 할당량을 받습니다.

최신 커널에서 cgroups는 다음을 통해 노출됩니다. 가상 파일 시스템 (cgroup v1 또는 cgroup v2)는 일반적으로 마운트됩니다. /sys/fs/cgroup각 하위 디렉터리는 그룹을 나타내며, 그 안의 파일을 통해 해당 그룹의 구성을 보고 변경할 수 있습니다.

cpusets: 프로세스를 CPU 및 메모리 노드에 연결하는 하위 시스템

c그룹 내에서, CPU세트 컨트롤러(하위 시스템)는 다음을 담당합니다. 어떤 CPU와 어떤 메모리 노드에 제한을 둘지 일련의 작업을 실행하고 메모리를 할당할 수 있습니다. 이는 특히 다음과 같은 경우에 유용합니다. 대형 기계 코어 수가 많고 NUMA 토폴로지를 갖춘 서버에서 특히 유용하지만, 워크로드를 격리하려는 경우 사양이 낮은 서버에서도 효과적입니다.

각 CPU 세트는 정의합니다. 두 가지 기본 세트:

  • cpuset.cpus: 그룹의 작업이 실행될 수 있는 CPU 목록입니다.
  • cpuset.mems: 해당 작업들이 메모리를 예약할 수 있는 메모리 노드 목록입니다.

프로세스가 호출할 때 sched_setaffinity(), mbind() o set_mempolicy()커널 해당 요청들을 필터링합니다. 이를 통해 해당 태스크는 현재 CPU 세트에 포함된 CPU와 노드만 사용할 수 있습니다. 또한 스케줄러는 허용된 마스크에 포함되지 않은 CPU에는 해당 태스크를 절대 스케줄링하지 않으며, 페이지 할당자는 허용된 마스크 외부에 있는 노드에 메모리를 예약하지 않습니다. mems.

CPU 세트가 대규모 시스템에서 매우 유용한 이유는 무엇일까요?

CPU와 메모리가 여러 노드에 분산된 서버에서는 처리 및 메모리 배치 이는 성능에 엄청난 영향을 미칩니다. NUMA 시스템에서 "원거리" 메모리에 접근하는 것은 CPU가 실행 중인 노드의 로컬 메모리에 접근하는 것보다 훨씬 느릴 수 있습니다.

CPUsets를 사용하면 만들 수 있습니다. 머신 부분집합 (소프트 파티션)을 생성하고 전체 작업을 이러한 하위 집합에 할당합니다. 예를 들어, 데이터베이스용 코어 및 메모리 노드 그룹, 웹 프런트엔드용 그룹, 연산 집약적 워크로드용 그룹 등으로 나눌 수 있습니다. 이러한 그룹은 다음과 같이 구성될 수 있습니다. 동적으로 조정 시스템 부하에 따라 다른 파티션에서 이미 실행 중인 작업에 영향을 주지 않고 작동합니다.

아주 흔한 전략입니다. 에서 :

  • 웹 서버 동일한 서비스의 여러 인스턴스를 실행합니다.
  • 혼합 기계 웹, 데이터베이스 및 기타 데몬이 공유됩니다. 하드웨어.
  • NUMA 및 HPC 클러스터 메모리 지연 시간에 민감한 과학 응용 프로그램을 실행합니다.

실제 사례: cgroups와 cpuset을 사용하여 욕심 많은 Apache 서버를 길들이는 방법

다음과 같은 서버를 상상해 보세요. 두 개의 코어 그리고 자식 프로세스를 동적으로 실행하는 Apache 서버입니다. 비록 모두 같은 기능을 가지고 있지만 말입니다. nice실제로 나머지 서비스에서 사용할 수 있는 CPU는 특정 시점에 활성화된 Apache 프로세스 수에 따라 달라집니다.

일반적인 우선순위로 이런 일은 흔히 일어납니다.

  • Apache는 9개의 프로세스를 실행 중이고 다른 서비스는 1개의 프로세스를 실행 중입니다. 두 번째 서비스가 수신합니다. CPU 사용률 10%.
  • Apache는 99개의 프로세스를, 다른 하나는 1개의 프로세스를 가지고 있는데, 두 번째 프로세스가 1개로 떨어집니다. CPU 사용률 1%.

우선순위는 바뀌지 않지만, 프로세스 수는 네그리고 그것은 공정성을 해칩니다. cgroups와 cpuset을 사용하면 Apache용 그룹과 나머지 모든 것을 위한 그룹, 이렇게 두 개의 그룹을 만들고 각 그룹에 특정 서비스가 할당되도록 커널에 알려줄 수 있습니다. 예를 들어, CPU의 50%그들이 설정한 프로세스 수와 관계없이.

  Valve의 Lepton 호환 레이어는 무엇이고, 어떤 용도로 사용되나요?

cpuset 파일 시스템(cgroup v1) 마운트

현재 많은 배포판에서 (페도라, 최신 RHEL, systemdcgroups는 기본적으로 마운트되며 systemd는 서비스를 자동으로 그룹화합니다. 이전 시스템(예: 클래식 구성의 Ubuntu 12.04/14.04)에서는 다음과 같이 cpuset 하위 시스템을 수동으로 마운트할 수 있습니다.

mount -t tmpfs -o size=5M cgroup_root /sys/fs/cgroup
mkdir /sys/fs/cgroup/cpuset
mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset

이렇게 해서 작은 것을 만들었습니다. tmpfs 계층 구조를 저장하기 위한 디렉토리 cpuset 이것이 마운트 지점 역할을 하게 되며, 최종적으로 파일 시스템이 마운트됩니다. cgroup 컨트롤러에 한정됨 CPU세트.

검사해 보시면 /sys/fs/cgroup/cpuset 다음과 같은 파일들을 보실 수 있습니다.:

  • tasks y cgroup.procs그룹에 속한 작업 목록과 스레드 그룹의 ID 목록입니다.
  • cpuset.cpus이 그룹에 허용된 CPU 개수.
  • cpuset.mems: 허용된 메모리 노드.
  • 몇 가지 추가 플래그: cpuset.cpu_exclusive, cpuset.mem_exclusive, cpuset.memory_migrate

하위 그룹 생성 및 CPU/메모리 할당

각 하위 디렉터리는 아래에 생성됩니다. /sys/fs/cgroup/cpuset 하는 새로운 자식 CPU 세트(작업이 없는 경우) 제거는 다음과 같이 수행됩니다. rmdir예를 들어, 시스템을 코어별로 두 그룹으로 나누려면 다음과 같이 합니다.

cd /sys/fs/cgroup/cpuset
mkdir grupo-A grupo-B

echo 0 > grupo-A/cpuset.cpus
echo 1 > grupo-B/cpuset.cpus

echo 0 > grupo-A/cpuset.mems
echo 0 > grupo-B/cpuset.mems

두 개의 CPU 세트를 생성하셨습니다. 그룹 A y 그룹-B첫 번째는 CPU 0만 사용하고 두 번째는 CPU 1을 사용합니다. 둘 다 시스템의 단일 메모리 노드 0을 공유합니다.

CPU 세트와 프로세스 연결

CPU 세트에 작업을 배치하려면 다음과 같이 하면 됩니다. PID를 파일에 적어주세요 tasks 해당 그룹의 일부일 뿐입니다. 프로세스는 특정 계층 구조 내에서 하나의 그룹에만 속할 수 있으며, 이동하면 상위 그룹 목록에서 사라집니다.

PID가 3435와 3492인 두 개의 새로운 셸을 열었다고 가정해 봅시다. 초기에는 루트 CPU 세트에 속하게 됩니다.다음과 같이 하위 그룹으로 보낼 수 있습니다.

echo 3435 > grupo-A/tasks
echo 3492 > grupo-B/tasks

그 순간부터, 해당 bash 셸에서 실행되는 모든 프로그램은 CPU 설정을 상속받습니다.쉘 3435에서 4개의 프로세스를 실행하면 consume_cpu (CPU를 무한 루프에 빠뜨리는 바이너리 파일)을 실행하면 그 안에 PID 값을 확인할 수 있습니다. grupo-A/tasks코어 0이 완전히 충전됨 코어 1은 거의 유휴 상태로 유지됩니다.

나중에 해당 프로세스 중 하나를 "복구"하여 전체 코어를 할당하려면 다음과 같이 할 수 있습니다. PID를 동일한 CPU 세트로 이동하세요.:

echo 3621 > /sys/fs/cgroup/cpuset/grupo-B/tasks

관찰할 때 top어떻게 되는지 알게 될 거예요 두 CPU 모두 작동을 시작합니다.이동된 프로세스가 CPU 1의 대부분을 차지하는 반면, 나머지 세 프로세스는 CPU 0을 사용합니다.

다른 사용 가능한 cgroup 컨트롤러

cpuset은 전체 퍼즐의 한 조각일 뿐입니다. cgroups에는 함께 사용할 수 있는 더 많은 컨트롤러가 포함됩니다. 매우 훌륭한 자원 관리:

  • cpu이는 각 그룹에 할당되는 CPU 시간의 비율을 제어합니다. 예를 들어, 한 그룹은 CPU의 80%, 다른 그룹은 15%, 또 다른 그룹은 5%를 할당받을 수 있습니다.
  • cpuacct제한하는 것이 아니라, 단지 카운트 시간 해당 그룹의 작업과 그 하위 작업들이 소비한 CPU 사용량입니다.
  • blkio블록 장치의 I/O 대역폭을 비례 할당량 또는 엄격한 제한을 통해 조절합니다.
  • memoryRAM 및 스왑 제한을 설정하고 그룹별 메모리 사용량을 보고합니다.
  • devices: 접근을 허용하거나 거부합니다 특정 장치 (예를 들어, 블록 장치를 컨테이너에 고정하는 것).
  • freezer: 일시 중지 또는 재개 그룹의 모든 과제.
  • net_cls y net_prio그들은 네트워크 트래픽에 레이블을 지정하거나 인터페이스별 우선순위를 조정하여 통합합니다. tc.
  • ns프로세스를 서로 다른 네임스페이스로 그룹화하며, 네임스페이스와 함께 사용하면 경량 가상화에 유용합니다.
  • perf_event: 이 도구를 사용하면 cgroup 작업을 모니터링할 수 있습니다. perf.

커널 내 CPUSet의 내부 세부 정보

커널 수준에서 각 태스크는 자신이 속한 cgroup 구조체에 대한 포인터를 유지합니다. cpuset은 다음과 같이 정의합니다. CPU 및 메모리 노드 마스크 해당 작업에서 요청한 어피니티 마스크 및 NUMA 정책과 교차하는 부분입니다.

몇 가지 핵심 사항 구현의 일부:

  • El 루트 CPU셋 이 저장소에는 시스템의 모든 메모리 코어와 노드가 포함되어 있습니다.
  • 각 자식 CPU 세트는 다음과 같아야 합니다. 엄격한 부분집합 아버지의 재산에서.
  • CPU 세트는 다음과 같이 표시될 수 있습니다. exclusivo CPU용 (cpuset.cpu_exclusive) 또는 메모리(cpuset.mem_exclusive): 이 경우, 그들의 자원은 그들의 자원과 중복될 수 없습니다. hermanos (네, 조상이나 후손이 있습니다.)
  • 새로운 시스템 호출은 추가되지 않습니다. 모든 것은 기존 방식을 통해 처리됩니다. cgroup 파일 시스템 그리고 가상 파일과 같은 것들 cpuset.cpus, tasks
  Linux 및 macOS에 적합한 페인트 대안

커널은 CPU셋을 연결합니다. 성능에 중요하지 않은 몇 가지 사항:

  • Init: 시작 시 루트 CPU셋을 초기화합니다.
  • 포크/출구: cpusets의 멤버십을 상속하고 해제합니다.
  • sched_setaffinity(): cpuset에서 허용하는 마스크를 사용하여 친화도를 가립니다.
  • 메모리 할당자: 허용된 노드로만 페이지를 제한합니다.
  • 기억 되찾기 그리고 작업 마이그레이션: cpuset 제한 사항은 가능한 한 준수됩니다.

cpuset의 중요 플래그 및 파일

각 CPU 세트는 다음과 같은 특징을 가지고 있습니다. cpuset.cpus y cpuset.mems, 하나 일련의 구성 파일 고급 행동을 제어하는 ​​것:

  • cpuset.memory_migrateCPU 설정을 변경하거나 수정할 때 이 값이 1로 설정되어 있으면, mems기존 페이지는 다음과 같습니다. 이주하다 새로운 노드로 이동할 때 상대적인 위치를 최대한 유지합니다.
  • cpuset.mem_hardwall y cpuset.mem_exclusive활성화되면 메모리 장벽을 강화하고 특정 공유 커널 예비 영역까지 제한합니다.
  • cpuset.memory_pressure y cpuset.memory_pressure_enabled이들은 이동 평균을 사용하여 메모리 사용량(초당 직접 회수 횟수)을 측정하는데, 이는 오케스트레이터와 배치 스케줄러에 유용합니다.
  • cpuset.memory_spread_page y cpuset.memory_spread_slab활성화된 경우 커널은 파일 캐시 페이지와 특정 슬래브를 배포합니다. 라운드 로빈 모드에서 로컬 노드를 항상 선호하는 대신 허용된 노드를 기준으로 합니다.
  • cpuset.sched_load_balance: 스케줄러가 CPU 세트 내의 CPU들 간에 부하 분산을 시도할지 여부를 제어합니다.
  • cpuset.sched_relax_domain_level계획 영역 내에서 특정 작업 마이그레이션 작업의 범위(소켓, 노드, 전체 시스템)를 조정합니다.

또한 루트 CPU 세트에서 다음을 찾을 수 있습니다. cpuset.effective_cpus y cpuset.effective_mems이는 CPU/메모리 핫플러그 이벤트를 고려하여 실제로 사용 가능한 리소스를 반영합니다. 특수 모드에서 cpuset_v2_mode이 파일들은 다음과 다를 수 있습니다. cpuset.cpus y cpuset.mems cgroup v2와 더 유사한 동작을 유지하기 위해서입니다.

스케줄러와의 상호 작용: sched_load_balance 및 sched_relax_domain_level

리눅스 스케줄러는 시스템을 다음과 같이 나눕니다. 계획 영역 로드 밸런싱 비용을 최소화하기 위해서입니다. 여러 코어에 걸쳐 밸런싱하는 것은 비용이 많이 들기 때문에 일반적으로 그룹별(소켓별, 노드별 등)로 수행합니다.

깃발 cpuset.sched_load_balance 이 설정은 스케줄러가 해당 CPU 세트 내에서 작업을 자유롭게 이동시키려면 해당 CPU 세트의 CPU들이 동일한 도메인에 있어야 하는지 여부를 나타냅니다. 루트 CPU 세트에서 이 설정을 비활성화하고 일부 하위 CPU 세트에서만 활성화하면 실시간 또는 매우 특정한 워크로드에 할당된 CPU의 불필요한 로드 밸런싱을 방지할 수 있습니다.

파일 cpuset.sched_relax_domain_level 스케줄러가 검색할 수 있는 범위를 조정할 수 있습니다.

  • 작업이 활성화되고, 근처의 비어있는 코어에 배치하려는 시도가 이루어집니다.
  • 한 CPU가 할 일이 없어지면, 다른 CPU들의 작업을 대신 처리하게 됩니다.

일반적인 값(아키텍처에 따라 다름)은 다음과 같습니다. 0 (검색하지 마세요) ~까지 5 (NUMA 시스템에서 전체 시스템 수준 검색이 가능하며, HT 형제, 동일 소켓의 코어, 노드 등 중간 수준 검색도 지원합니다.) 이는 매우 세밀한 도구이므로 지연 시간 및 캐시에 미치는 영향을 명확히 이해하고 있는 경우에만 사용해야 합니다.

cpusets를 실제로 사용하는 방법: 일반적인 흐름

워크플로 특정 CPU 세트 내에 "작업" 또는 서비스를 포함시키려면 일반적으로 다음과 같은 방법을 사용합니다.

  1. cgroup/cpuset 파일 시스템(v1 또는 v2)이 마운트되어 있는지 확인하십시오.
  2. CPU 세트를 생성합니다.mkdir 해당 계층 구조에서.
  3. 구성 cpuset.cpus y cpuset.mems 작업을 추가하기 전에.
  4. 선택적으로 다음과 같은 플래그를 활성화할 수 있습니다. memory_migrate o cpu_exclusive.
  5. 로딩을 위한 "상위" 프로세스를 시작합니다. PID를 CPU 세트로 이동합니다. 그것을 쓰는 것 tasks o cgroup.procs.
  6. 해당 부모 프로세스로부터 자식 프로세스를 실행(또는 실행하도록 허용)하면 자식 프로세스는 cpuset의 멤버십을 상속받습니다.

사용하는 경우 사용자 공간 도구 으로 cgroup-bin / libcgroup (데비안/우분투에서는) 또는 다른 배포판의 해당 명령어를 사용하면 이 문제를 더 편리하게 처리할 수 있습니다. 명령 사람 이죠 cgcreate, cgexec y cgclassify또는 다음과 같은 구성 파일을 사용하는 경우에도 마찬가지입니다. /etc/cgconfig.conf y /etc/cgrules.conf 사용자 또는 명령에 따라 그룹을 할당합니다.

cgroups v1과 cgroups v2: RHEL 8 및 유사 시스템에서의 CPU 및 cpuset 드라이버 비교

다음과 같은 최신 레이아웃에서 RHEL 8커널은 동시에 지원합니다. cgroups v1 및 v2RHEL 8 v1에서는 기본적으로 다음 위치에 마운트됩니다. 부팅하지만 커널 매개변수를 사용하여 통합 모드(v2) 사용을 강제할 수 있습니다.

  • cgroup_no_v1=all: 시작 시 모든 v1 컨트롤러를 비활성화합니다.
  • systemd.unified_cgroup_hierarchy=1: systemd에게 cgroup v2를 기본 계층 구조로 사용하도록 지시합니다.

변경 후 재시작하면 확인할 수 있습니다. mount o findmnt 더 이상 어떠한 종류의 조립품도 존재하지 않는다는 것입니다. cgroup 고전 작품들 (systemd 내부를 제외하고) 손으로 나무를 조립하기 v2, 예를 들어 /cgroups-v2:

mount -t cgroup2 none /cgroups-v2

해당 루트 디렉터리에서 (루트 컨트롤 그룹) 다음과 같이 시작하는 일반 파일들을 볼 수 있습니다. cgroup.* 그리고 그곳에서 활성화된 다른 특정 컨트롤러들(예: ...) cpuset.cpus.effective o cpu.max.

cgroup v2를 사용한 CPU 제한: CPU 드라이버와 cpuset을 함께 사용

v2에서는 다음과 같은 작업을 합니다. 독특한 나무 그리고 컨트롤러는 파일을 사용하여 서브트리에 의해 활성화됩니다. cgroup.subtree_controlCPU 사용량을 몇 개의 프로세스로 제한하는 일반적인 워크플로는 다음과 같습니다.

  1. 드라이버를 활성화하세요 cpu y cpuset 직계 자녀의 경우 뿌리 글쓰기 /cgroups-v2/cgroup.subtree_control 같은 것 +cpu +cpuset.
  2. 예를 들어 하위 그룹을 만드세요. /cgroups-v2/Example/,와 mkdir.
  3. 다음과 같은 파일들을 확인하세요 cpu.max y cpuset.cpus.
  4. 맞추다 cpuset.cpus y cpuset.mems 프로세스들이 동일한 CPU/노드(컨트롤러)에서 경쟁하도록 보장하기 위해 cpu 이는 동일한 CPU에서 경쟁하는 프로세스가 두 개 이상 있는 경우에만 적용됩니다.
  5. 구성 cpu.max 예를 들어, 수수료와 기간을 정해놓고 다음과 같이 할 수 있습니다.
echo "200000 1000000" > /cgroups-v2/Example/cpu.max

이 경우, 그룹의 모든 프로세스 이들은 초당 총 0,2초의 CPU 시간만 사용할 수 있습니다. 자연스러운 현상입니다. 나머지 기간 동안은 다음 생리가 시작될 때까지 목이 졸릴 것입니다.

  WinBoat: WinBoat란 무엇이며 Linux에서 Windows 앱을 실행하는 방법

그럼 밖에 없다 PID를 추가하세요 그룹에 제출하고 싶은 신청서를 작성해 주세요. /cgroups-v2/Example/cgroup.procs예를 들어 해당 그룹에 두 개의 집중적인 프로세스(PID 5439 및 5473)가 있는 경우 각각은 대략적인 값에 도달하게 됩니다. CPU 사용률 10%그들이 당신이 정한 20% 할당량을 나눠 갖고 있기 때문입니다.

리눅스에서 CPU, 어피니티 및 하드웨어를 이해하는 데 도움이 되는 다른 도구들

CPU 세트를 다루려면 CPU 세트에 대한 충분한 이해가 매우 유용합니다. CPU 토폴로지 그리고 시스템의 CPU 상태를 확인할 수 있습니다. 리눅스는 다음과 같은 다양한 명령어, 의사 파일 및 도구를 제공합니다. 리눅스용 CPU-X 자세한 정보를 제공하는 것들:

  • lscpu아키텍처, 논리적 및 물리적 CPU 개수, 소켓, 하이퍼스레딩, 캐시, 가상화 지원 등을 매우 읽기 쉬운 방식으로 표시합니다.
  • /proc/cpuinfoCPU 로직별로 모델, 제품군, 스테핑, 마이크로코드, 기능 플래그(SSE, AVX, VT-x, AMD-V, NX 등)와 같은 상세 정보를 표시합니다.
  • /sys/devices/system/cpu/CPU당 하나의 하위 디렉터리가 있는 매우 풍부한 디렉터리 구조 (cpu0, cpu1, …) 및 기타 cpufreq, cpuidle, 마이크로코드, 토폴로지

이내 /sys/devices/system/cpu/cpu0/cpufreq/ 예를 들어, 다음과 같은 것을 볼 수 있습니다.: (더 자세한 내용은, CPU 주파수를 확인하는 방법).

  • cpuinfo_cur_freq: 현재 주파수.
  • scaling_max_freq y scaling_min_freq: cpufreq가 확장될 수 있는 한계 범위.
  • scaling_governor: 활성 정책(성능, 절전, 주문형등).
  • scaling_available_governors y scaling_driver: 사용 중인 모드 및 드라이버 (예: intel_pstate).

En /sys/devices/system/cpu/cpu0/cpuidle/ 휴식 상태를 보게 될 것입니다.state0, state1지연 시간 및 소비량은 하위 시스템에서 처리됩니다. cpuidle이것은 다음과 함께 CPU 주파수 스케줄러는 부하에 따라 에너지를 절약하기 위해 코어를 끄거나 주파수를 낮추는 시점을 결정합니다.

En 모바일 사용되기 시작합니다 에너지 효율적인 스케줄링(EAS)이는 cpuidle, cpufreq 및 스케줄러의 결정을 보다 지능적으로 통합하여 다른 활성 코어를 사용할 수 있을 때 전원이 꺼진 코어를 깨우는 것과 같은 불일치를 방지합니다.

프로세스별 및 그룹별 CPU 사용량을 측정하고 모니터링합니다.

CPU 세트와 CPU 드라이버를 다룰 ​​때는 다음과 같은 도구가 필요합니다. 설정한 내용이 효과가 있는지 확인해 보세요.예를 들어, VM이 다음과 같은 경우 VirtualBox가 CPU를 너무 많이 사용합니다.가장 일반적인 옵션은 다음과 같습니다.

  • top전체 CPU 사용량, CPU별 사용량, 프로세스별 사용량을 보여주는 동적 시스템 보기입니다. CPU % 이 기능을 통해 어떤 작업이 시스템에 과부하를 일으키는지 확인할 수 있습니다.
  • mpstat (포장에서) sysstatCPU 및 전체 통계는 부하 분산 및 유휴 시간(유휴, iowait, steal 등)을 확인하는 데 유용합니다.
  • ps~와 결합됨 sort예를 들어, CPU 사용량이 가장 많은 프로세스 목록을 확인할 수 있습니다.
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

또한, 회계 파일과 같은 파일들도 있습니다. cpuacct.usage y cpuacct.usage_percpu (v1에서) 또는 cgroup v2의 내장 카운터를 사용하면 특정 그룹이 생성된 이후 사용한 CPU 사용량을 알 수 있으므로 내부 청구 또는 여러 애플리케이션의 영향 비교에 이상적입니다.

궁극적으로 cpuset과 cgroup을 사용하면 다음과 같은 기능을 활용할 수 있습니다. 시스템을 리소스 "섬"들의 집합으로 모델링하세요.CPU, 메모리 및 I/O 분배 방식을 실시간으로 조정하고 작업을 할당합니다. 파일에 대한 철저한 이해가 필요합니다. /sys/fs/cgroup/sys/devices/system/cpu모니터링 도구와 함께 사용하면 "서버 상태를 단순히 확인하는 것"에서 나아가 어떤 프로그램이 어디서 실행되는지, 얼마나 많은 리소스를 소비하는지, 그리고 부하가 심해질 때 어떻게 동작을 개선할 수 있는지 등을 매우 세밀하게 제어할 수 있습니다.

리눅스용 cpu-x
관련 기사 :
Linux용 CPU-X: 완전한 가이드를 갖춘 CPU-Z의 무료 대안