[unix] 사용자간에 리소스를 공정하게 공유하도록 cgroup을 구성하려면 어떻게해야합니까?

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



답변

커널 문서 는 예제와 함께 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 Rules Daemon (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’사이의 CPU 리소스를 약 50-50으로 공유합니다.


답변