2010년 5월 18일 화요일

성능 옵션(프로그램 vs 백그라운드 서비스)의 이해

‘시스템 속성 > 성능 > 설정 > 성능 옵션 > 고급 > 프로세서 사용 계획’에서 ‘프로그램’과 ‘백그라운드 서비스’ 옵션 중 하나를 아래 그림과 같이 선택할 수 있습니다.

성능옵션

많은 분들이 이 옵션에 대해서 아래와 같이 잘못 이해하고 있습니다.

{‘프로그램’은 실제 사용자가 실행하는 응용 프로그램이고 ‘백그라운드 서비스’는 ‘서비스 관리자(services.msc)’에서 실행되는 서비스를 의미한다. 그래서 설정에 의해 사용량을 할당 조정한다.}

하지만 이는 잘못된 해석입니다. 또한 다이얼로그 창의 표시 문구도 충분히 오해를 불러올 수 있을 것 같습니다. 

이 옵션을 이해하기 위해서는 먼저 스레드(Thread)와 컨텍스트 스위치(Context Switch) 두 가지 개념을 이해해야 합니다.


프로그램이란 것은 실행 파일이 프로세스(Process)로 만들어 진 후 스레드(Thread)에서 명령이 실행되는 구조입니다. 그리고 스레드는 명령어가 CPU를 사용하여 실행되는 단위로 정의 할 수 있습니다.

컴퓨터를 사용할 때 네트워크 처리, HDD 처리, 커널 작업, 응용프로그램 처리 등등 너무나도 많은 작업들이 동시 다발적으로 이뤄지고 있습니다. 다른 예로, 사용자가 인터넷에서 파일을 다운로드 하면서 Word와 WMP를 함께 사용하는 경우도 생각해 볼 수 있습니다. 이러한 것들은 모두 스레드 단위로 작업이 이뤄지며 작업에 따라 스레드 처리 시간이 길수도 짧을 수도 있습니다.

일상 생활에서도 금방 끝나는 일이 있고 오래 걸리는 일들이 있듯이 스레드도 처리 하는데 시간이 긴 작업과 짧은 작업들이 섞여 있는데, 만약 아래 그림처럼 CPU에서 하나의 스레드가 끝날 때까지 다른 스레드들은 기다려야 한다면, 스레드 A가 끝날 때 까지는 스레드 B, C는 기다리고만 있어야 합니다.

성능옵션2

 

좀더 효율적으로 동시 작업이 가능 하도록 하나의 스레드가 시작해서 끝날 때까지 무작정 CPU를 사용하는 것이 아니고, 아래 그림처럼 스레드의 실행 시간을 짧은 시간 단위로 잘라낸 뒤 순서대로 세워 놓고 실행하다가, 자신에게 할당된 시간이 끝나면 하던 일을 멈추고 다음 스레드에게 CPU를 사용할 수 있도록 한 뒤 다시 자기 차례가 돌아오면 자신의 일을 다시 시작하게 됩니다. 스레드가 CPU를 얼마 동안 사용할지를 정의한 시간 단위를 바로 퀀텀(Quantum)이라고 합니다. 그러면 스레드 B는 다음 순번에서 바로 작업을 끝낼 수 있습니다.

성능옵션3

 

이 퀀텀을 사용자가 길게도 혹은 짧게도 설정 할 수 있는데 이것이 바로 ‘프로세스 사용 계획 옵션’입니다. ‘프로그램’으로 설정하면 모든 스레드의 퀀텀을 짧게(6, 대략 2 Click) 설정하고, 반대로 ‘백그라운드 서비스’로 설정하면 길게(36, 대략 12 Click) 설정합니다.

2가지의 차이와 장단 점을 이해하려면, Context Switch를 먼저 이해해야 합니다.

성능옵션4

 

위 그림과 같이 퀀텀에 정의된 시간이 끝나 CPU를 떠나야 하는 스레드 A는 CPU를 떠나기 전에 자신이 어디까지 작업을 했는지를 저장한다. 그래야 다음 차례에 다시 A가 실행될 때 앞에서 마지막으로 진행했던 부분부터 다시 시작 할 수 있기 때문이다. 또한 B는 자신이 앞에서 실행 했던 부분부터 다시 시작 하기 위해 앞에서 저장했던 실행정보를 불러오는데, 바로 이런 일련의 작업을 컨텍스트 스위치(Context Switch)라 합니다.

 

이 Context Switch 자체는 미약하지만 전체적으로 보면 성능에 영향을 줄 수 있는 작업입니다. 그래서 만약 다른 작업은 거의 없고 CPU에서 스레드를 처리하는데 긴 시간이 필요한 단일 응용프로그램(SQL Server 혹은 그래픽 랜더링 작업 같은)만 실행하는 환경이라면, ‘백그라운드 서비스’로 설정해 Context Swith를 최소화하고 해당 프로그램의 스레드가 긴 시간 CPU를 사용 할 수 있도록 하는 것이 효과적입니다.

반대로 일반 사용자의 컴퓨터 사용 패턴은 아주 소소한 아이콘 클릭 같은 작업을 포함해 IE같은 웹 브라우저 사용과 함께 음악을 듣는 것과 같이 동시에 여러 프로그램을 실행하는 패턴을 보이는데, 이런 경우 스레드에 긴 시간을 주면 스레드가 끝나기를 기다리는 시간이 오래 걸리기 때문에 다른 작업으로 넘어가는데 시간이 걸려 반응속도를 늦출 수 있다. 따라서 일정한 시간 내에 여러 스레드들이 실행 될 수 있도록 잦은 Context Switch 시간의 부하를 감수하더라도 퀀텀을 작게 설정하여, 사용자 측면에서 반응속도를 높일 수 있습니다.

그래서 두 옵션은 아래와 같이 정의 할 수 있습니다

프로그램: 여러 작업을 동시에 수행하는 일반 사용자 환경에서 반응 속도를 높여준다.
백그라운드 서비스: 계속해서 한가지 작업을 하는 응용프로그램을 실행 하는 경우, 처리 효율을 높인다.

댓글 없음:

댓글 쓰기

이 블로그 검색

팔로어

블로그 보관함