Windows 성능 옵션(프로그램 vs 백그라운드 서비스)을 이해하다
Windows NT부터 Windows 7에서 까지 ‘시스템 속성 > 성능 > 설정 > 성능 옵션 > 고급 > 프로세서 사용 계획’ 에 ‘프로그램’과 ‘백그라운드 서비스’ 옵션 두 가지 중 하나를 사용자가 선택할 수 있습니다. 이 두 개의 옵션에 대해서 여러 의견(?)들이 난무하는데요, 이번 포스팅에서는 이 두 가지 옵션이 어떤 의미를 가지는지 그리고 여러분은 어떤 상황에서 두 옵션 중 하나를 선택할 것인지를 설명 드릴까 합니다.
[그림 1. Windows 7, 프로세서 사용 계획]
잘못된 오해
많은 분들께서 이 옵션에 대해서 아래와 같이 잘못 이해하고 계십니다.
{‘프로그램’은 실제 사용자가 실행하는 응용 프로그램이고 ‘백그라운드 서비스’는 ‘서비스 관리자(services.msc)’에서 실행되는 서비스를 의미한다. 그래서 프로세서 사용계획의 설정에 의해 ‘프로그램’을 선택하면 사용자 프로그램에 더 많은 CPU 사용량을 할당하고 ‘백그라운드 서비스’를 선택하면 서비스(Service)에 더 많은 CPU 사용량을 할당한다} => NO, NO, NO 이렇게 이해하고 계시면 안됩니다.
진실을 말씀 드리겠습니다.
(이 옵션을 이해하기 위해서는 먼저 스레드와 컨텍스트 스위치 두가지 개념을 이해하셔야 합니다 그래서 이 단어의 정의를 설명드리면서 옵션을 이해하도록 하겠습니다)
우리가 사용하는 프로그램이란 것은 알고 보면 실행 파일이 프로세스(Process)로 만들어 진 후 스레드(Thread)에서 명령이 실행되는 것 입니다, 여기서 스레드란 명령어가 CPU를 사용하여 실행되는 단위로 정의 할 수 있습니다. (그밖에 많은 복잡한 이야기들이 있지만 여기서는 이정도 까지만 이해하시면 되겠습니다)
우리가 컴퓨터를 사용할 때 우리는 모르지만 네트워크 처리, HDD 처리, 커널에서의 작업, 응용프로그램 처리 등등 너무나도 많은 작업들이 동시 다발적으로 이뤄지고 있습니다. 다른 예로, 사용자가 인터넷에서 파일을 다운로드 하면서 Word와 WMP를 함께 사용하는 경우도 생각해 볼 수 있습니다. 이러한 것들은 모두 스레드 단위로 작업이 이뤄지며 작업에 따라 스레드 처리 시간이 길수도 짧을 수도 있습니다.
일상 생활에서도 금방 끝나는 일이 있고 오래 걸리는 일들이 있듯이 스레드도 처리 하는데 시간이 긴 작업과 짧은 작업들이 섞여 있는데 만약 그림처럼 CPU에서 하나의 스레드가 끝날 때까지 다른 스레드들은 기다려야 한다면 스레드 A가 끝날 때 까지는 스레드 B, C는 기다리고만 있어야 할 것 입니다.
[그림 2]
위 그림 2처럼 하나의 스레드가 자신의 명령이 끝날 때가지 계속 CPU 독점해서 사용한다고 하면 오랜 시간 동안 다른 스레드들(프로그램)이 실행되지 못할 것입니다, 그렇게 되면 다른 프로그램의 성능에 영향을 주겠죠? 특히 스레드 B의 입장에서는 잠시 CPU를 사용하면 금방 끝날 일인데 앞에서 스레드 A의 작업이 끝나기를 기다려야 하니 답답한 노릇일 것입니다.
그래서 좀더 효율적으로 동시 작업이 가능 하도록 하나의 스레드가 시작해서 끝날 때까지 무작정 CPU를 사용하는 것이 아니고 그림 3. 처럼 스레드의 실행 시간을 짧은 시간 단위로 잘라낸 뒤 순서대로 세워 놓고 실행하다 자신에게 할당된 시간이 끝나면 하던 일을 멈추고 다음 스레드에게 CPU를 사용할 수 있도록 한 뒤 다시 자기 차례가 돌아오면 자신의 일을 다시 합니다. 스레드가 CPU를 얼마 동안 사용할지를 정의한 시간 단위를 바로 퀀텀(Quantum)이라고 합니다. 그러면 그림에서처럼 스레드 B는 다음 순번에서 바로 작업을 끝낼 수 있습니다. (그림 3의 ‘A B C A B C A C A C A A A’ 순서를 보시면 이해가 좀 쉬우실 것입니다)
[그림 3]
이 퀀텀을 사용자가 길게도 혹은 짧게도 설정 할 수 있는데 이것이 바로 ‘프로세스 사용 계획 옵션’입니다. 그래서 ‘프로그램’으로 설정하면 모든 스레드의 퀀텀을 짧게(6, 대략 2 Click) 설정하고 반대로 ‘백그라운드 서비스’로 설정하면 길게(36, 대략 12 Click) 설정 합니다.
그렇다면 퀀텀(스레드 실행 시간)을 짧게 혹은 길게 설정 하는 것은 어떤 차이가 있을까요?
차이와 그에 따른 장단 점을 이해 하시려면 Context Switch라는 의미를 이해 해야 합니다.
[그림 4, Context Switch]
그림 4.와 같이 퀀텀에 정의된 시간이 끝나 CPU를 떠나야 하는 스레드 A는 CPU를 떠나기 전에 자신이 어디까지 작업을 했는지를 저장합니다, 그래야 다음 차례에 다시 A가 실행될 때 앞에서 마지막으로 진행했던 부분부터 다시 시작 할 수 있기 때문입니다, 또한 B는 자신이 앞에서 실행 했던 부분부터 다시 시작 하기 위해 앞에서 저장했던 실행정보를 불러옵니다, 바로 이런 일련의 작업을 컨텍스트 스위치(Context Switch)라고 합니다.
이 Context Switch 자체는 미약(?)하기는 하지만 전체적으로 보면 성능에 영향을 줄 수 있는 작업입니다. 그래서 만약 다른 작업은 거의 없고 CPU에서 스레드를 처리하는데 긴 시간이 필요한 단일 응용프로그램(SQL Server 혹은 그래픽 랜더링 작업 같은)만 실행하는 환경이라면 ‘백그라운드 서비스’로 설정해 Context Swith를 최소화하고 해당 프로그램의 스레드가 긴 시간 CPU를 사용 할 수 있도록 하는 것이 효과적일 것입니다.
반대로 일반 사용자의 컴퓨터 사용 패턴은 아주 소소한 아이콘 클릭 같은 작업을 포함해 IE같은 웹 브라우저 사용과 함께 음악을 듣는 것과 같이 동시에 여러 프로그램을 실행하는 패턴을 보입니다. 이런 경우 스레드에 긴 시간을 주면 스레드가 끝나기를 기다리는 시간이 오래 걸리기 때문에 다른 작업으로 넘어가는데 시간이 걸려 반응속도를 늦출 수 있지만, 일정한 시간 내에 여러 스레드들이 실행 될 수 있도록 퀀텀을 작게 설정하면 사용자 측면에서 반응속도를 높일 수 있습니다..
두 옵션은 아래와 같이 정의 할 수 있습니다
프로그램: 여러 작업을 동시에 수행하는 일반 사용자 환경에서 쾌적한(?) 반응 속도를 보여준다.
백그라운드 서비스: 계속해서 한가지 작업을 실행하는 응용프로그램을 실행 하는 경우 높은 처리 효율을 가진다.
* 이 두 옵션을 그 반대의 환경에 설정하였다면 반드시 나쁘다고는 말할 수 없겠지만 성능 효율면에서는 떨어질 것입니다.
그래서 기본적으로 Windows 2000 Professional, XP, Vista그리고 Windows 7과 같이 일반 사용자를 위한 Windows 클라이언트에서는 ‘프로그램’으로 설정 되어 있으며 Windows Server 2000, 2003, 2008에서는 ‘백그라운드 서비스’로 설정 되어 있습니다. 만약 윈도우 클라이언트지만 그래픽 랜더링 작업 같이 CPU를 많이 사용하는 하나의 작업을 주로 사용하는 환경이라면 ‘백그라운드 서비스’를 선택 할 수 있을 것이고 반대로 윈도우 서버지만 클라이언트 환경같이 사용한다면 ‘프로그램’ 옵션을 선택하면 성능에 효과적일 것입니다.
조금 자세한 추가 설명
‘프로그램’으로 설정 되어 있으면 스레드는 2 Clock interval 기간 동안 실행이 가능하며 ‘백그라운드 서비스’는 12 Clock interval 기간 동안 실행할 수 있습니다.
퀀텀에서는 Clock interval의 3배수로 설정됩니다, 그래서 ‘프로그램’으로 설정 되어 있으면 Short 값인 6(‘실제 Clock 2개’ x 3배수)을 가지고, ‘백그라운드 서비스’로 설정 되어 있으면 퀀텀 Long 값인 36(‘실제 Clock 12개’ x 3배수)을 가집니다. 그래서 클럭인터럽트가 걸릴 때마다 퀀텀 값을 3단위로 줄여가 결국 0이 되면 일단 그 스레드가 이번에 실행될 시간은 모두 끝내고 기다리고 있던 다음 스레드가 실행 되도록 합니다.
이해를 돕고자 상당 부분 단순화 썼습니다. 좀더 자세한 정보가 필요하신 분들께서는 Windows Internals의 Thread 부분을 참고 하시기 바랍니다.
[참고문서]
Windows Internals 4’th, Chapter 6, Controlling the Quantum
Comments
Anonymous
January 01, 2003
읽으면서 아하~ 하고 무릎을 쳤습니다. 그림으로 설명되어 있어서 더욱 좋았습니다.ㅋAnonymous
January 01, 2003
:) 감사합니다. 즐거운 하루 되세요~~Anonymous
January 01, 2003
저도 이걸 공부하기 전에 이해가 안되 고민 많이 했었답니다 ^^. 알게 된후 적당한 단어가 뭐가 있을까 생각해 봤는데 도무지 적절한 단어가 떠오르지 않더라고요.. 어렵고 복잡한 의미를 한단어나 한두줄로 표현한다는것, 참으로 어려운 일인것 같습니다.Anonymous
January 01, 2003
아크몬드님께서 일반 사용자를 위한 버전으로 한번 더 풀어서 써주심이 어떠실지요? :)Anonymous
January 01, 2003
안녕하세요? 먼저 답변이 늦어 죄송합니다. ^^; 해당 링크 내용은 적합해 보입니다, 하지만 자신의 시스템이 어떤 용도에 어떤 로직으로 사용하느냐에 따라 달라질 수 있으므로 어떤것이 정답이라고 100%라고 말하기는 어렵습니다. 특히 performance, Sizing이 말하기 참 어렵습니다. 수고하세요~Anonymous
January 01, 2003
안녕하세요:) 해당 옵션이 Context Swith를 줄이는게 목적이라는 것을 핵심에 두고 보면 Core가 하나건 여러개건 기준이 크게 달라질것은 없을 거라 생각됩니다. 조금 극단적인 생각이지만 수많은 CPU의 Core들이 만들어 내는 Context swith를 생각한다면??? ^^ 방문 감사드리고요, 좋은 하루되세요~ :)Anonymous
January 01, 2003
시작프로그램 혹은 어디서 로그온 시작으로 잡혀있는것 같은데, Autoruns로 한번 찾아 보심이 어떠실런지요? Autoruns관련해서는 아래와 같이 포스팅 되었습니다. blogs.technet.com/.../autoruns-windows.aspxAnonymous
January 01, 2003
정말 유용한 글 잘 읽었습니다. 근데 요즘같이 다수의 스레드를 동시에 실행할 수 있는 멀티코어 시스템이 보편화되는 추세라면 '백그라운드 서비스' 설정이 오히려 '프로그램' 설정보다 효율면에서 더 낫지 않을까 단순히 생각하게 되는데요, 기술적인 면에서 이 부분은 어떻게 판단해야 될런지요..^^Anonymous
June 23, 2009
쉽게 풀어서 써 주셔서 감사합니다:) 덕분에 제대로 이해한 듯 합니다. 왜 명칭을 이렇게 사람들 헷갈리는 걸로 붙여놓은걸까요;;Anonymous
August 29, 2009
좋은정보 고맙습니다 ^^ 많은 도움이 되었습니다 ㅎㅎAnonymous
July 29, 2010
많은 도움이 되었습니다.. 그런데 저는 저 성능옵션 화면이 매번 부팅할때마다 뜹니다... 어떻게 안뜨게 할수 없을까요?Anonymous
November 24, 2010
차후에는 운영체제가 작업 상황을 판단하여 두가지 모드를 바꿔가며 작업을 하면 좋겠군요. 글 잘보고 갑니다. :DAnonymous
January 12, 2011
sankim님 몇가지 질문 드려되 되나요? windwos server 2003 관련해서 자료를 검색하다가 보고 말씀드립니다. 성능옵션에서 웹사이트(IIS) 서비스를 한다는 기준으로 보면 프로세스 사용계획은 "백그라운드 서비스" 메모리 사용계획은 "프로그램"으로 설정하는 것이 적합한건지요? nexondbteam.tistory.com/54 이런 내용에 설정이 적합한건지 궁금합니다. 효과에 대해서는 어떻게 예상을 해야 할까요?Anonymous
October 16, 2013
정말 좋은 정보내요! 댓글잘 않남기는데 좋은정보에 감탄하고 글남김니다!Anonymous
October 02, 2014
PC 한대를 AUTOSET 기반 WAMP시스템으로 만들어 OWNCLOUD, WORDPRESS, 그누보드 등으로 활용하는데 바로 이 옵션을 어떻게 세팅할까 고민하다가 님의 유익하고 문장력 좋은 글을 즐겁게 보고 갑니다.
제 경우는 퀀텀을 길게 잡아주는 백그라운드가 적합할까요?Anonymous
October 07, 2014
정말 도움이 많이 되었습니다! 좋은 글 감사합니다!!Anonymous
January 18, 2017
데드락현상이발생하는데 이 설정을 바꾼다고해서 효과가있을까요??가끔씩 스레드대기상태에 걸려서 미치겠네요 ㅠ