2011-11-20 2 views
1

나는 우분투가 설치된 내 컴퓨터에 리눅스 2.6.x 커널을 사용하고있다. (우분투는 방금 언급 한 바있다.) 커널은 8 개의 코어가있는 시스템에서 실행됩니다. 기계도 openvz를 실행하지만 이것이 질문의 컨텍스트를 변경하지 않는다고 생각합니다.cpumask는 리눅스 커널의 다른 프로세스 스케줄링에 어떤 영향을 줍니까?

두 개의 CPU 사용을 허용하고 첫 번째 두 CPU에 하드 CPU 선호도를 설정하는 소프트웨어가 설치되어 있습니다 (cpumask 3). 나는 다른 프로세스의 스케줄링이 어떻게 영향을 받는지 스스로에게 묻고있다. 나는 그것에 대해 뭔가 읽은 것 같지만 지금은 프로세스가 첫 번째 CPU에 연결될 가능성이 있다고 가정합니다. 그리고 커널은 캐시 무효화를 피하기 위해 동일한 CPU에 프로세스를 항상 유지하려고합니다.

컴퓨터에는 상당히 많은 프로세스가 실행 중입니다. 커널은이 상황을 어떻게 처리합니까? 혼잡 한 영역에 바인딩되는 동안 영향을 받기 때문에 프로세스가 느리게 실행되는 하드 CPU 친화력 프로세스 일 수 있습니까? 커널은 하드 어피 니티를 어떻게 신경 씁니까?

+0

하드웨어 인터럽트가 일부 첫 번째 CPU에서도 잠길 수 있습니다. 또한 NUMA가 있으면 프로세스와 데이터를 닫아두기위한 커널 노력이 필요합니다. 그러나 1 & 2 CPU에 잠긴 (그리고 두 CPU가 활발하게 사용되는) 소프트웨어가있는 경우 다른 소프트웨어가 코어 3-8에서 계획 될 확률이 적어로드가 적습니다. – osgx

답변

2

장기간에 일어날 일은 스케줄러의로드 밸런싱 코드가이 태스크가 첫 번째 2 개에 바인딩되는 것을 고려하여 더 많은 언 바운드 태스크를 나머지 CPU로 이동시키는 것입니다.

작동 방식은 각 작업이 작성된 CPU에서 시작되고 마이크로 레벨에서 Linux 작업 스케줄러가 다른 작업에 관계없이 각 CPU에 대해 결정을 내리는 것입니다. 그러나 더 많은 매크로 레벨 프로세스 마이그레이션로드 밸런싱 코드가 있습니다. "이 큐에서 실행 대기열 (예약 대기중인 프로세스 목록)이이 CPU보다 길기 때문에로드 균형을 조정하기 위해 이동하십시오. ".

물론 특정 작업이 첫 번째 두 CPU에 바인딩되어 있기 때문에로드 균형이 다른 작업을 선택하여 장기간에 묶여있는 다른 작업이 다른 비 바인드 작업을 충분히 "밀어 낼"것입니다. 다른 CPU 및 잔액은 보존됩니다.

+0

답변 해 주셔서 감사합니다. 프로세스 생성은 어떻습니까? 그들은 항상 같은 장소에서 만들어지고 움직입니다. 또는 프로세스 생성시 작업 목록의 길이가 평가되고 프로세스가 빈 공간에 생성됩니까? –

+0

내가 아는 한 새로운 스레드 (멀티 스레드 프로그램의 새 스레드 또는 새 프로세스의 첫 번째 스레드)는 항상 CPU에서 생성되며 스레드를 생성하는 스레드 (복제 시스템 호출을 호출 한 스레드)는 그때에 달렸어. 그 후 곧 움직일 수도 있습니다 (또는 심지어 그것을 만드는 중도). – gby

+0

아, 그 말이 맞습니다. 그리고이 내 질문에 대한 자세한 답변. 이렇게하면 프로세스가 다른 CPU로 이동하자마자 다른 CPU에서 하위 프로세스를 생성하고 첫 번째 프로세스에서 실행하도록 주장하는 것에 영향을 미치지 않기 때문에 (문제는 없습니다) –

관련 문제