젠투 리눅스에서 설정할 수 MAKEOPTS
있는 변수 /etc/portage/make.conf
이야기하는 make
패키지를 만들 때이 병렬로 실행해야합니다 얼마나 많은 작업을. 듀얼 코어 CPU가 -j2
있으므로 코어 당 하나의 작업으로 옵션 을 사용하기로 결정했습니다 . “문제점”은 듀얼 코어 CPU를 사용하는 사용자에게 -j3
옵션 을 설정하도록 알려주는 참조가 많이 있습니다. 그들 중 일부는 다음과 같습니다.
예를 들어 젠투 핸드북은 다음과 같이 말합니다.
올바른 선택은 시스템의 CPU (또는 CPU 코어) 수에 1을 더한 것이지만이 지침이 항상 완벽하지는 않습니다.
그러나 “CPUs + 1″규칙의 근거는 무엇입니까? 왜 여분의 직업입니까?
make.conf (5) 매뉴얼 페이지는 다음과 같이 말합니다.
권장 설정은 CPU + 1과 2 * CPUs + 1 사이입니다.
또한 옵션 에 대한 make
정보 페이지 및 make
매뉴얼 페이지 설명 에서 섹션 5.4 (병렬 실행)를 읽었 -j
지만 답변이없는 것 같습니다.
답변
항상 작동하는 간단한 규칙은 없습니다. 사람들은 특정 기계에서 특정 편집을 실험했기 때문에 특정 인물을 추천 할 수 있으며 이것이 가장 좋은 설정이거나 실제와 관련이 있거나 없을 수도있는 추론을 따랐기 때문에 권장됩니다.
많은 RAM을 사용하는 경우 긴 컴파일의 제한 요소는 CPU 시간입니다. 그런 다음 CPU 당 하나의 작업과 가끔 발생하는 I / O 블록에 대해 보류중인 작업 하나가 좋은 설정입니다. 즉하게 -j3
(듀얼 CPU의 기계, 더 정확하게 또는 – 각 코어가 하이퍼 스레딩 경우, 즉 4 개의 CPU, 그렇게 될 듀얼 코어 CPU에 대한 -j5
).
RAM이 거의없는 경우 제한적인 요인은 동시 작업이 많지 않거나 계속 서로 교환 할 수 있다는 것입니다. 예를 들어 메모리에 두 개의 컴파일러 인스턴스를 편안하게 맞출 수없는 경우 make -j2
이미보다 느릴 수 있습니다 make
. 이는 RAM에 한 번에 몇 개의 컴파일러 프로세스를 적용 할 수 있는지에 따라 달라 지므로 일반적인 수치를 도출 할 방법이 없습니다.
그 사이에 더 많은 일자리를 얻는 것이 유리할 수 있습니다. 각 컴파일러 프로세스는 작지만 전체 빌드가 많은 데이터에 닿으면 디스크 I / O가 차단 요소가 될 수 있습니다. 이 경우 한 번에 CPU 당 여러 개의 작업을 원하므로 각 CPU를 사용하는 작업은 항상 있고 다른 작업은 I / O를 기다리고 있습니다. 다시 말하지만, 이것은 빌드 작업과 사용 가능한 RAM에 달려 있습니다. 여기서 데이터 캐시에 사용할 수있는 항목이 있습니다 (너무 많은 작업을 수행하면 캐시를 너무 많이 오염시키는 것이 최적입니다).
답변
나는이 좀 것 같다 발견 – 수 make
발사로 CPUs + 1
처리하는 것이 있는지 확인하는 것입니다 :
- 방금 완료 한 작업자 프로세스와 아직 실행하지 않은 작업자 프로세스 (예 : 사전 채우기 실행 큐) 간에는 차이가 없습니다.
- 실행 대기열 사전 채우기로 눈에 띄는 오버 헤드를 가져 오기에는 너무 많은 경쟁 프로세스가 없습니다.
그러나 이것은 휴리스틱 이며 FreeBSD 핸드북은 여전히 단일 CPU를 권장 make -j4
합니다.
답변
일반적으로 코어 수보다 많은 작업을 시작해야하는 이유가 있습니다. gcc를 사용한 C 컴파일의 경우, -pipe가 gcc 옵션에 정의되어 있지 않으면 임시 파일을 사용하여 조치 (전처리, 첫 실행, 최적화 및 어셈블리)를 순서대로 수행합니다. -pipe는 서브 프로세스간에 파이프를 사용하도록이를 변경합니다. (예를 들어 FreeBSD의 경우 -pipe를 추가하는 것이 기본이지만 Linux에서는 전통적이지 않습니다.) 따라서 2 개의 코어가 있고 2 개의 작업을 병렬로 허용하면 디스크 I / O에 시간이 걸립니다. 1 개의 직업을 추가하라는 권고는이 특성과 관련이있는 것 같습니다. 그러나 최종 답변을 얻으려면이 추천을 추가 한 사람을 찾아서 물어보십시오 🙂 또는 Gentoo devels의 메일 링리스트에 문의하십시오.
답변
기본적으로 그 숫자는 저자들이 상식이라고 부르는 것입니다. 기껏해야 좋은 추측입니다. 내가 아는 한, 입력 할 때 생성되는 make 프로세스 make
가 이미 계산되었으므로 -j3
두 프로세스가 컴파일되는 동안 기본 프로세스 대기로 끝날 수 있습니다.
그러나 Gentoo를 사용했을 때의 경험칙은 <#cpus>*2 + 1
입니다.
그것은 당신의 치킨 트레일, 찻잎 또는 마술 8 공이 당신이해야 할 디스크 I / O와 현재 리눅스 커널의 스케줄링에 대해 알려주는 것에 달려 있습니다. [이 게시물의 핵심 시작] 내 개인적인 경험 ( -j
젠투에 한정되지는 않음)에서 #cpus + 1과 #cpus * 2 +1 사이의 모든 항목에서 훌륭한 결과를 얻습니다 [이 게시물의 핵심 종료]. 평균적으로 차이는 거의 없습니다. 요즘 프로세서와 커널은 꽤 좋습니다.
그러나 a) 실제로 두 개 이상의 상자를 사용하여 컴파일 (du’h)하거나 b) 자신의 코드를 개발하는 경우이 모든 변경 사항
-j
속성이 높을수록 이전에 알려지지 않은 종속성이 표시 될 가능성이 높습니다.
그리고 참고 사항 : 코어 수는 사용하지 말고 CPU가 동시 스트림 수를 사용하십시오. (하이 퍼트 헤딩!)