더북(TheBook)
<Note> cores 개수의 결정

cores의 지정에는 크게 두 가지 측면을 고려할 수 있다.

첫째로 어느 정도의 입출력 작업이 있는가 하는 점이다. 디스크, 데이터베이스, 네트워크 입출력이 발생하면 기기(디스크나 네트워크 인터페이스 카드)에서 응답이 올 때까지 해당 프로세스는 CPU를 사용하지 않는다. 따라서 입출력 작업이 많다면 코어보다 프로세스의 수를 더 많게 정해 입출력을 대기 중인 프로세스가 CPU를 사용하지 않는 동안 다른 프로세스들이 해당 CPU를 사용할 수 있게 할 수 있다. 그러나 입출력 작업이 거의 없는 상태에서 다수의 프로세스를 실행하게 되면, 하나의 CPU 코어가 여러 프로세스를 실행해야 하고, 이 경우 하나의 CPU 자원을 위해 여러 프로세스가 경쟁하게 되어 전체 성능은 오히려 떨어질 수 있다.

둘째로 여러 프로세스를 실행하면 각각이 메모리를 소비하게 된다는 점이다. 특히 사용 중인 알고리즘이나 모델링 패키지에 따라서 이 용량은 매우 커질 수 있다. 예를 들어, 어떤 데이터를 분석하는 데 통상 100MB 메모리가 소요된다고 하자. 만약 프로세스가 4개라면 각 프로세스가 25MB씩 소모하여 총 100MB 메모리를 차지할 것 같지만 실제로는 이들 프로세스를 관리하는 데 따라 발생하는 오버헤드 때문에 그보다 큰 메모리를 사용할 수 있다. 따라서 사용 중인 컴퓨터의 메모리를 잘 관찰해 메모리 여분이 충분히 남는지, 그리고 불필요한 페이징이나 스와핑10 이 발생하지 않는지 등 메모리 사용량을 유심히 지켜볼 필요가 있다. 만약 페이징이나 스와핑이 발생한다면 디스크 입출력 작업으로 성능이 오히려 더 떨어질 수 있다.

모든 경우에 맞는 프로세스의 수 결정 공식이란 존재하지 않으므로 프로세스의 수는 상황에 따라 적절히 조절해나가야 한다. 만약 적절한 입출력이 있는 경우라면 프로세스의 수를 코어 개수×2로부터 시작할 것을 추천한다. 하지만 CPU 작업이 대부분이라면 코어 개수만큼 프로세스의 수를 설정하거나 또는 registerDoParallel( )의 기본값처럼 코어 개수의 절반을 선택할 수도 있다.


10 메모리가 부족하면 운영체제는 사용 중이지 않은 프로세스를 디스크로 옮기거나, 디스크를 가상적인 메모리로 활용하게 된다. 메모리가 부족하면 이러한 디스크 사용이 급격히 증가하기 시작하며, 디스크 입출력 때문에 프로그램 수행 성능이 저하될 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.