AWS/GCP에서 CPU 격리: cpuset 마운트 오류

AWS/GCP에서 CPU 격리: cpuset 마운트 오류

AWS/GCP에 2개의 32개 vCPU 인스턴스가 있습니다. CPU 0, 1은 시스템에서 사용하고 CPU 2-31은 보호되어 사용자 공간 스레드에서만 명시적으로 사용되도록 CPU 보호를 설정하려고 합니다.

시스템 정보:

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy
$ cat /proc/filesystems | grep cpuset
nodev   cpuset

그러나 를 실행하려고 하면 cset shield마운트와 관련하여 오류가 발생합니다.

mount: /cpusets: none already mounted on /run/credentials/systemd-sysusers.service.
cset: **> mount of cpuset filesystem failed, do you have permission?

나는 cset 코드를 조금 파헤쳤는데 실패한 호출은 다음과 같은 것 같습니다.

$ sudo mount -t cpuset cpuset /cpusets
mount: /cpusets: cpuset already mounted or mount point busy.

/cpusets은 새로 생성된 폴더이고 $ cat /proc/mounts | grep cpuset비어 있으므로 cpuset이 다른 곳에 마운트되지 않은 것 같습니다.

관련성이 있을 수 있음:

$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot 0 0

내 생각엔 AWS/GCP가 하이퍼바이저에 CPUset 등을 사용하는 것 같습니다. AWS/GCP에서 CPU를 분리할 수 있습니까? 어떻게 해야 하나요?

답변1

이미 v2("통합") cgroup을 마운트한 systemd를 사용하고 있으므로 제어 그룹을 관리하는 것이 아니라 systemd입니다. 다음을 통해 그렇게 하라고 지시하세요.CPUAffinity= [Manager]파일 섹션 /etc/systemd/system.conf.d/50-my-cpuset-options.conf의 관련 옵션 및. 그런 다음 CPUAffinity=전역 기본값에서 제외하려는 특정 unit.service 파일에 대해 (재설정하려면 비어 있고, 추가하려면 비어 있지 않음) 을 사용할 수 있습니다 .

systemd API를 사용하여 명령을 통해 이미 실행 중인 서비스의 리소스 옵션을 일시적으로(재부팅할 때까지) 수정할 수도 있습니다 systemctl --runtime set-property example.service ExampleOption=Value. 이를 사용하여 결과 cgroup 설정을 확인하고 시스템 성능에 어떤 영향을 미치는지 측정합니다. CPU를 100% 활용하는 스케줄러 기능을 손상시키는 대신 전체 기능을 향상시키면 전역 기본값 대신 혼잡 시 시스템 안정성이 눈에 띄게 향상될 것이라고 생각합니다. 실행하고 싶지만 시스템의 나머지 부분에 영향을 주지 않으려는 우선순위가 낮은 특정 비동기 백그라운드 작업을 사용하여 우선순위를 보다 밀접하게 일치시키십시오. 그러나 선호도 큰 망치는 사용하지 않은 상태로 Nice=두십시오 .IOSchedulingClass=


이론적으로 다음과 같은 유틸리티는cset대신 cgroup2 시스템 관리자와 인터페이스하고 백그라운드에서 systemds system.slice및 장치 기본값을 수정하는 동안 이전과 실질적으로 동일한 추상화를 제공하도록 업데이트할 수 있지만이 토론 소리지금까지 아무도 그런 일을 해본 적이 없는 것처럼. 그리고 이후모든 것을 포괄하는 거대 덩어리 C커널이 배운 모든 깔끔한 기능에 대해 훨씬 더 풍부하고 잘 문서화되었으며 틀림없이 더 다양한 제어를 제공하지만 더 이상 그럴 필요가 없을 수도 있습니다.

답변2

언급한 대로 systemd는 내 필요에 따라 cset와 잘 작동하지 않는 자체 cgroup2 계층 구조를 만듭니다.

Ubuntu 22.10에서 이 동작을 비활성화하기 위해 /etc/default/grub의 GRUB_CMDLINE_LINUX_DEFAULT 값에 다음을 추가했습니다.

완료되면 줄이 다음과 같이 표시됩니다.

GRUB_CMDLINE_LINUX_DEFAULT="systemd.unified_cgroup_hierarchy=false <your_other_params>"

완료한 후에는 루트로 실행해야 합니다.

update-grub
grub-install

그런 다음 재부팅하십시오. 재부팅 후 CSET를 사용하여 Ryzen CPU에서 CCX를 성공적으로 보호하고 모든 사용자 영역 및 시스템 작업을 마이그레이션할 수 있었습니다.

추가 배경 지식이 필요한 경우를 대비해 제가 발견한 이 문제에 대한 추가 참고 자료는 다음과 같습니다. https://github.com/systemd/systemd/issues/13477#issuecomment-528113009 https://github.com/lxc/lxd/issues/10441

관련 정보