부팅 성능
편집자 메모:이 글은 개발팀 시니어 멤버인 Michael Fortin가 작성한 첫 번째 글입니다. 그는 Microsoft의 Distinguished Engineers 로, 핵심 운영 체제 그룹의 Fundamentals feature team 리더로 Windows플랫폼 전반의 성능과 안정성 분야를 담당하고 있습니다. - Steven(추신: www.microsoft.com/ie에서 Internet Explorer 8 베타 2를 평가해 주세요)
Windows7의 시작 성능을 전문에 담당하는 팀이 있습니다. 그러나 이 업무는 실제로는 Windows 그룹 전체 또 그 이상으로 확대됩니다. 우리와 긴밀히 협업하고 있는 많은 하드웨어 및 소프트웨어 파트너분들도 우리 팀과의 연장선에 있습니다.
시작(Startup)이란 다음 세 가지 중의 하나를 말합니다. 부팅, 절전모드에서 다시 시작, 최대 절전 모드에서 다시 시작하기 입니다. 절전모드에서 다시 시작이 먼저 설정되어 있고, 일반적인 하드웨어의 표준 소프트웨어에서는 보통 2~5초내에 로드됩니다. 그러나 이 글에서는 자주 댓글이 달리는 부팅에 대해 논의할 것입니다. Windows 7의 목표는 매우 양호한 부팅 시간을 얻을 수 있는 시스템(PC)의 수를 비약적으로 늘리는 것입니다. 테스트 결과에서는 성능이 좋은 시스템이란 15초 미만으로 부팅되는 시스템을 말합니다.
PC가 신속히 부팅되려면, 다음과 같이 많은 작업이 효율적이고, 높은 수준의 병렬 처리 수행을 할 수 있어야 합니다.
- 파일이 메모리에 로드된다
- 시스템 서비스가 초기화된다
- 장치가 특정되어 시작 된다
- 로그인에 필요한 사용자의 자격 정보가 증명된다
- 데스크톱이 구성되어 표시된다
- 시작(Startup)·응용 프로그램이 실행된다
시스템과 구성의 차이에 따라, 부팅 시간은 크게 달라질 수 있습니다. 이것은 많은 실습에서 유효성 검사로 확인되었지만, 독립적 기관의 분석 데이터, 예를 들어 Ed Bott에서 실행한 것에서도 볼 수도 있습니다. Ed 에서 분석한 시스템 샘플·데이터에서는 부팅에서 사용자 조작이 가능해질 때까지의 시간이 30초 미만인 시스템이 35% 였습니다. Ed의 데이터는 비교적 모집단이 작은 편이지만, 결과는 우리의 분석 결과와 많은 부분이 일치합니다. Windows Vista SP1의 데이터(아래와 같이)도 약 35%의 시스템이 30초 미만으로 부팅되고, 75%의 시스템이 50초 미만으로 부팅되는 것을 보여줍니다. Vista SP1의 데이터는 실제 환경에서 측정으로 얻은 데이터입니다. 이 데이터는 Customer Experience Improvement Program을 통해서 사용자가 Microsoft에 익명으로 송신한 수백만의 시스템에서 얻은 것입니다.
항상 원하는 만큼 빨리 부팅되는 시스템이 너무 적고 , 우리는 더 효율적으로 일해야 합니다. 분명한 것은 60초 이상 걸리는 시스템은 개선시켜야 한다는 것으로 - 원인이 장치 문제이건, 네트워크 문제 또는 소프트웨어 문제라 해도 그렇습니다. 물론, 부팅 시간이 오래 걸리는 시스템도 일부 있습니다. PC 세계에서 우리가 관찰하는 것의 하나는 이 다양한 성능입니다. 이것은 선택사항의 다양성이나 PC의 다양한 구성요소인 품질의 다양성에서 기인합니다. 몇 가지 시스템·유지 관리 작업도 부팅 시간을 길어지게 만들기도 합니다. 만약 사용자가 대량 소프트웨어의 업데이트를 설치하는 것을 선택했을 경우, 실제의 시스템 업데이트는 다음 부팅시의 한중간에 일어날지도 모릅니다. 우리의 데이터는 이것들을 파악하여, 그것들은 완료하는데 몇 분 걸리기도 합니다. 원인과 관계없이 PC 에코시스템의 멤버인 우리가 해야 할 중요한 일의 하나는 오랜 부팅 시간의 문제에 대처하는 것입니다.
Ed 샘플이나 우리의 데이터 분석에서 부팅 시간은 컴퓨터가 준비되어, 사용자의 응답에 준비된 상태를 의미합니다. 이것은 시스템 로그인, 사용 가능한 데스크톱 획득 시간을 포함합니다. 이것이 완벽한 지표는 아닐지도 모르지만, 여러 가지 주요한 문제를 보여줍니다. Windows 7과 Vista 시스템에서 이 지표는 자동적으로 취득되어 시스템 이벤트 로그에 기록됩니다. Ed의 블로그 문서는 이 문제에 대해 다루고 있습니다.
그 외에도 사용자는 예를 들면 디스크가 정지할 때, 응용 프로그램이 완전히 시작될 때 혹은 시작 메뉴나 데스크톱이 사용 가능하게 되었을 때,부팅 시간이 반영된 것으로 간주합니다. 추가적으로 「부팅 후」시간(시작 그룹에 있는 응용 프로그램이 실행되어 지연 서비스가 실행되었을 때), Windows의 부팅이 시작되기 전의 시간, 그리고 BIOS가 소비하는 시간 등이 중요하게 될 수 있겠지요. 우리의 활동에서는 부팅 시간을 생각할 때 사용자가 무엇을 중요하게 생각하는지 고려하고 있습니다.
Windows 7에 대한 우리의 활동을 소개하기 전에 현재 진행중의 파트너와의 중요한 협력 관계를 말씀드리고 싶습니다. 여러 시스템 조사를 하는 가운데, 많은 개선이 가능한 부분을 발견하여 변경을 추가했습니다. 구체적으로는 실제 시스템의 다음 데이터를 살펴봐 주세요. 이 시스템이 저희에게 전달되었을 때, 공장 출하시의 구성에서는 부팅에 45초 정도의 시간이 걸렸습니다. 이 같은 시스템에 Vista SP1를 클린 설치를 하면 부팅은 23초가 되었습니다. 물론, 클린 설치에 의해서 프로세스나 서비스 수는 훨씬 적게 되어, 설치 되는 드라이버가 조금 다릅니다 (특히 버전이 다릅니다).그러나 우리는 공장 출하시의 구성을 최적화 해서 부팅 시간을 21초로 할 수 있었습니다. 클린 설치 때보다 2초 짧은 것으로, 이것은 몇 가지의 드라이버나 BIOS의 변경에 의해 최적화된 구성으로 할 수 있었기 때문입니다.
이 같은 시스템에 대해 주목해야 할 점은 절전 모드에서 다시 시작이 거의 순간과 동일한 2초를 달성했다고 하는 것입니다. 우리는 사용자가 절전을 부팅의 대체 수단으로 선택하기를 강력히 권장합니다.
Windows 7에 대한 활동의 예로서 우리는 시스템 서비스에 대해서 많은 노력을 하고 있습니다. 우리는 시스템 서비스에서 사용하는 CPU 시간이나 디스크, 메모리 필요량 삭감뿐만 아니라 그러한 수의 극적인 삭감을 기대합니다. 이것에 대한 우리의 생각은 단순합니다. 만약 서비스가 반드시 필요한 것이 아니면 시작되어서는 안되고, 그 때만 서비스가 동작하는 보기 드문 조건을 처리하기 위한 트리거가 존재한다는 것입니다.
물론, 자주 발생하는 일이 아니기 때문이겠지만, 사용자를 위해 존재하는 서비스입니다. 새로운 키보드, 마우스 혹은 태블릿 하드웨어의 것이 시스템이 오프 사이에 추가된다고 생각해 보세요. 만약 이 새로운 하드웨어가 검색되지 않고, 시작 시에 이것들을 동작시키기 위한 드라이버가 설치 되지 않으면, 사용자는 인증 정보를 입력하여 시스템에 로그인 할 수 없을 것입니다. 어떤 종류의 사용자에서 이것은 좀처럼 없는 혹은 전혀 없는 사상일지도 모릅니다. 그러나 1억 명의 사용자를 생각했을 경우, 이것은 지원 하는 것에 적합할 정도로 빈번히 일어날 수 있는 사상입니다. Windows 7에 대하고, 한층 더 광범위의 서비스 트리거 기구가 생성 되었으므로, 우리는 소수의 자동 시작 서비스로 이 시나리오와 다른 많은 시나리오를 지원합니다.
앞에서 언급한 것처럼, 장치와 드라이버의 초기화도 큰 한 요인이 될 가능성이 있습니다. Windows 7에서는 우리는 드라이버의 초기화를 가능한 한 병렬화하도록 주력했습니다. 이와 같이 병렬화하는 것으로, 몇 가지 초기화에 시간이 걸리는 장치 드라이버가 전체의 실행 시간에 대해서 영향을 줄 가능성을 줄여 줄 수 있습니다.
디스크에서 파일을 로드하는 것을 생각했을 경우, Windows 7에서는“프리페치(prefetching)” 로직과 메커니즘을 향상시켰습니다. 프리페치(prefetching)는 Windows XP에서 구현되지만, 그 당시에 비해 디스크 성능 및 특성이 변화되었고, 그러한 변화에 대응하여 효율적으로 실행할 수 있도록 스케줄링 로직으로 변경했습니다. 예로서는 우리는 최근의 솔리드 스테이트 드라이브(solid state storage devices)에 대해 프리페치(prefetching)가 원래 필요없는 것이 아닌가 라는 관점도 포함하여 평가하고 있습니다. 최종적으로는 각각의 시스템에서 얻을 수 있던 분석 결과에 의해 우리가 프리페치(prefetching)를 얼마나 활용하는지를 판단하겠습니다.
Windows 7은 진단 기능도 개선되었습니다. 우리는 각각의 시스템에서 특정 문제를 신속히 발견하고, 그 문제 해결에 결정적인 도움을 제공하기 위해 노력하고 있습니다. 예를 들면 시작 시에 등록된 응용 프로그램이 너무 많거나 몇 가지 도메인에 고유한 시간이 걸리는 로그온 스크립트 등의 문제에 대해 사용자에 정보를 제공합니다. 여러분이 아시는 바와 같이, 시작시에 등록된 응용 프로그램이 많으면 실행 시간이 길어지는 한 요인이 됩니다. 그러나 별로 알려지지 않은 것은 문제가 있는 부팅 또는 로그온 스크립트에 기인하는 문제도 있습니다. Windows XP, Vista, Windows 7의 기본 동작은 사용자에 시간이 소요될 가능성이 있는 네트워크의 초기화 또는 스크립트가 실행되는 것을 기다리지 않고 사용자를 데스크톱에 로그온 되도록 합니다. 그러나 기업 환경 아래에서는 IT부문이 클라이언트 시스템을 네트워크 경유로 서버와 접속되도록 기본 동작을 변경하는 것이 가능합니다. 아쉽지만, 클라이언트를 이러한 설정으로 하는 도메인 관리자는 잠깐, 이것들을 동기, 배타적으로 스크립트가 실행되도록 설정합니다. 네트워크로 타임아웃이 발생하거나 서버 인증 문제가 있는 경우에는 결과적으로는 실행과 로그온에 몇 분이 소요되는 경우도 있습니다. 또한 이러한 스크립트에서는 CPU, 디스크, 메모리의 리소스를 많이 소비하는 프로그램조차도 실행됩니다.
Windows 7의 각각의 기능이나 서비스 개발에 추가하여, 우리는 도구, 테스트 데이터 등을 파트너에게 제공하고 있습니다. 이러한 도구는 특히 흥미를 가지고 계신 사용자 분들에게도 제공됩니다. 우리가 사내에서 실행 때에 발생하는 문제를 분석·수정하기 위해서 사용하는 이러한 도구는 Windows Performance Toolkit 으로, 여기에서 다운로드 할 수 있습니다. 이것은 일반적인 사용자를 위한 것이 아니지만, 일부 사용자들에게는 매우 유익합니다.
앞으로 다루고 싶은 주제 중 하나는 이미 많이 쓰여졌고, 댓글이 많이 달리기도 했던 주제입니다. Windows에 추가된 소프트웨어가 전체적인 시스템 성능에 어떻게 영향을 미치는지에 관한 글입니다. 정말로 넓고 깊은 용도의 Windows용 소프트웨어는 특정 사람만이 만족하는 품질이면 된다는 것이 아니라, 압도적 다수의 사람들이 매우 좋다고 생각하는 것입니다. Microsoft는 높은 성능의 소프트웨어를 개발하기 위한 도구를 계속 제공해야 합니다. Windows 그 자체에서는 성능 저하의 원인으로 될만한 소프트웨어를 검색하여 사용자에 알려주는 방어적 방법을 한층 더 개선해 나가야 합니다.
사용자가 시스템 설정을 변경하는 것에 대하여는 앞으로 좀 더 언급될지도 모릅니다. 시스템 설정을 변경하는 정보 가운에 대부분이 전혀 도움이 되지 않습니다. 예를 들어, “레지스트리를 조금 변경한다” 와 같은 정보의 대부분이 사실이 아닌 것이 밝혀졌습니다. 이런 것들은 재미있지만, Live Search에서 “Enable Superfetch on XP” 를 검색해 보면, 많은 검색 결과를 얻을 수 있습니다. 그러나 Windows XP 에는 Superfetch 기능은 없고, 이러한 웹 사이트에 기재되어 있는 레지스트리 키의 설정 값이 없습니다. 마찬가지로 CPU 스케줄링, 메모리 관리, 그 외의 설정은 시스템 성능 향상에는 별로 도움이 되지 않습니다.
시작(Startup)은 성능에 관한 많은 주제들의 하나로 앞으로도 이것에 대해는 계속 논의해갈 예정입니다. 그 외, 앞으로 어떤 일에 대안 이야기들을 듣고 싶은지 좋은지 알려주세요.
Michael Fortin