본문 바로가기
Bioinformatics/Technology

리눅스에서 사용할 CPU 갯수 지정하기

by 임은천 2013. 3. 7.

어떤 상황에서 CPU 개수를 조정해야 하는 상황이 올까? 바로 다음과 같은 상황이다.


가령 비트 연산을 많이 하는 코드를 작성했다고 하자. 일반적으로 비트 연산은 속도가 빠른데다가 최적화가 더해지면 원하든 원치 않든 하이퍼 쓰레딩과 동작하게될 가능성이 있다. 개인 컴퓨터 환경에서는 그러나 저러나 별 상관이 없다.


하지만, 자원을 나눠쓰는 서버가 있고, 이 서버에서 여러분의 프로세스가 과도하게 많은 프로세서를 사용한다면 이를 제한해서 다른 사람들이 CPU를 이용할 수 있도록 해줘야 할 것이다.


그렇다면, 어떻게 하면 되는가?


이것은 프로세서 어피너티(processor affinity)에 의해서 조절된다. 리눅스의 경우 다음 명령어로 사용하려는 CPU를 조절할 수 있다.


taskset -c 0-7 명령 &


간단한 명령이지만 남에게 피해를 주지 않고, 작은 작업을 수행할 때 유용하게 사용할 수 있다.


이해를 위해서 내가 겪은 상황을 좀 더 자세히 적어 보자면 다음과 같다.

단일 CPU에서 동작하는 것을 생각하고 비트 연산을 많이 하는 코드를 작성했다. 하지만, 서버에는 64개의 프로세서가 장착 되어 있었다. 이클립스를 수행해서 코드를 동작시키니 이게 왠걸.. 프로세서를 43개나 사용하는 것이었다. 43개를 사용하니 속도는 당연히 빠르겠지? 라고 기대를 했지만.. 실제 속도는 오히려 더 느려졌다.

추측하기엔 불필요하게 프로세서가 자원을 공유하고, 각 프로세서가 처리하고, 결과를 조합하는 과정에서 프로세서 숫자가 많기 때문에 오히려 더 시간이 오래 걸린 것으로 보인다.

결국 이런 문제를 해결하기 위해서 프로세서 어피너티를 조절하게 되었다. 이클립스를 시작할 때, 미리 조절해 두면 이클립스 안에서 실행하는 코드는 동일한 프로세서를 사용하게 된다. 결론은 이클립스에만 조절 명령을 해주면 되는 것이다.


taskset -c 0-7 eclipse &


다른 의미로는 해당 프로세스를 일반적인 프로세스 스케줄러와 고립 시키는 것이라고도 볼 수 있다. 이 내용에 대한 추가적인 궁금증이 있다면 다음 내용도 확인하기 바란다.


http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html



댓글