사용자 간에 리소스를 공평하게 공유하도록 cgroup을 어떻게 구성합니까?

사용자 간에 리소스를 공평하게 공유하도록 cgroup을 어떻게 구성합니까?

sched_user 또는 이와 유사한 cgroups 아래에 커널 구성 옵션이 있었습니다. (내가 아는 한) 이를 통해 모든 사용자는 시스템 리소스를 공평하게 공유할 수 있습니다. 2.6.35에서는 사용할 수 없습니다. 모든 사용자(루트 포함) 간에 io/cpu/memory 리소스를 자동으로 공유하도록 시스템을 구성하는 방법이 있습니까? 이전에 cgroup을 설정한 적이 없습니다. 좋은 튜토리얼이 있습니까? 매우 감사합니다.

답변1

핵심문서cgroup에 대한 일반적인 내용은 예제와 함께 제공됩니다.

배포판에서 이미 제공한 패키지(해당 내용에 따라 다름)는 괜찮습니다 cgroups-bin.libcgroup1

구성은 다음 두 파일을 편집하여 수행됩니다.

/etc/cgconfig.conf

제어 그룹, 해당 매개변수 및 마운트 지점을 정의하기 위해 libcgroup에서 사용됩니다.

/etc/cgrules.conf

프로세스가 속한 제어 그룹을 정의하기 위해 libcgroup에서 사용됩니다.

이러한 구성 파일에는 이미 예제가 있으므로 요구 사항에 맞게 조정해 보세요. 매뉴얼 페이지는 구성에 대한 좋은 소개를 제공합니다.

그런 다음 워크로드 관리자 및 규칙 데몬을 시작합니다.

service cgconfig restart
service cgred restart

워크로드 관리자(cgconfig)는 리소스 할당을 담당합니다.
관리자에 새 프로세스를 추가합니다.

cgexec [-g <controllers>:<path>] command [args]

이미 실행 중인 프로세스를 관리자에 추가합니다.

cgclassify [-g <controllers>:<path>] <pidlist>

또는 새로 생성된 각 프로세스가 cgrules.conf 파일과 CGroup 규칙 데몬(cgred)을 통해 지정된 그룹에 들어가도록 자동으로 강제 실행합니다.


예 /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

예 /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

이는 사용자 "alice"와 "bob" 간에 약 50-50 CPU 리소스를 공유합니다.

관련 정보