특정 양의 CPU 성능을 프로세스에 할당하는 방법은 무엇입니까? [복사]

특정 양의 CPU 성능을 프로세스에 할당하는 방법은 무엇입니까? [복사]

성능 향상을 위해 특정 프로세스에 특정 개수의 CPU 코어를 할당하고 싶습니다.

어떻게 해야 하나요?

답변1

이미 이를 사용할 수 있는 많은 프로그램이 있습니다(예: 컴파일러).

귀하의 경우에는 프로그램이 여러 CPU 또는 CPU 스레드를 병렬로 사용하도록 설계되었는지 확인해야 합니다.

프로그램(예: Java 프로세스)이 단일 스레드이고 동시에 여러 코어를 사용할 수 없는 경우 nice명령을 사용하여 우선 순위를 높일 수 있습니다.

그러나 다중 코어를 활용하는 Java 프로그램을 작성할 수 있습니다.

이 게시물을 참조하세요

답변2

문제가 Linux 환경과 관련이 있고 시스템에 경쟁 작업 부하가 있다고 가정합니다.

CPU 수준에서 프로세스를 분리하는 가장 간단한 방법은 프로세스를 사용하고 taskset코어 sched_setaffinity세트에 할당하고 시스템의 다른 CPU 사용량이 많은 코어가 해당 코어를 사용하지 못하도록 제외하는 것입니다.

또 다른 가능성은 유사한 메커니즘 cgroups(수동으로 또는 와 같은 컨테이너 솔루션을 통해 docker)을 사용하여 대부분의 CPU 시간을 선택된 프로세스(예 shares: .

작업 부하가 성능에 민감한 경우 운영 체제 자체에서 사용되는 CPU(예: 네트워크 패킷 처리)를 확인하는 것이 좋습니다. 대부분의 처리를 수행하는 코어(있는 경우)를 확인할 수 있으며 si, 이는 일반적으로 로 표시됩니다 top. 프로세스가 해당 코어에 있는지 확인하는 것은 결과에 영향을 미칠 수 있습니다. 불행히도 둘 다 사실입니다. irqbalance여기까지 갈 수 있는지 확인해 보세요 .

마지막으로 외부 간섭을 줄이기 위해 를 사용하여 민감한 프로세스의 CPU 스케줄링 우선순위를 조정하여 민감한 프로세스의 CPU 스케줄링 우선순위를 높여볼 수 있습니다 nice.

답변3

프로세스를 특정 수의 CPU 코어로 제한하려는지 아니면 CPU 코어를 프로세스 전용으로 지정하려는지 잘 모르겠습니다.

전용 CPU 시간

내가 아는 한, 프로세스에 CPU에 대한 독점 액세스 권한을 "부여"하는 것은 불가능하거나 적어도 어렵습니다. 다른 프로세스에서 사용할 수 있도록 CPU 시간을 사용하고 있는 경우 Nice를 사용해야 합니다 nice. Nice는 기본적으로 프로세스의 우선순위 시스템이며 숫자는 -20에서 19 사이입니다(기본값은 0). 바라보다 man nice. "친숙성"이 높을수록 프로세스의 CPU 시간이 줄어들고 다른 프로세스에 대해 "더 좋다"는 의미입니다. nice 값을 낮추면 프로세스의 niceness가 감소하고 CPU 시간이 더 많이 소모됩니다. 예를 들어 다음과 같이 가장 높은 우선순위로 실행할 수 있습니다 ls.nice -20 ls

CPU 코어 제한

Linux에서는 이를 사용하여 cgroups프로세스를 제한할 수 있습니다. BSD의 다른 Unix 변형에 대해서는 잘 모르겠지만 비슷한 기능이 있다고 가정합니다.

관련 정보