Windows 8의 부팅 시간 단축

'기반 기술'과 관련된 본 게시물에서는 우선 가장 많이 논의되고 측정되는 부팅 시간을 살펴보겠습니다. 저희는 Windows 8을 자주 부팅할 필요가 없도록 디자인했고, 실행 코드에 패치를 적용하는 데 필요한 재시작 횟수를 줄이기 위해서도 꾸준히 노력하고 있습니다. 그러나 불가피하게 부팅을 해야 하는 경우도 있으므로 부팅 시간을 최대한 줄여야 합니다. 이 주제는 상당히 전문적인 내용을 다루기 때문에 많은 관계자들이 논의에 참여하고 있습니다. 부팅 시간은 전체 생태계에서 상호 작용하는 데 무엇보다도 중요하기 때문에 Windows 8에서는 이전 버전보다 부팅 시간을 단축하도록 대폭 개선했습니다. 이 글은 기반 기술을 다루는 연재 게시물의 첫 번째 글로, Windows의 프로그램 관리 이사인 Gabe Aul이 작성했습니다.
- Steven

Windows에서 부팅만큼 철저하게 조사하고 측정하며 관심을 기울인 부분도 없을 것입니다. 부팅 시간은 전반적인 시스템 성능을 잘 나타내는 요소일 뿐 아니라 고객에게 적절한 부팅 경험을 제공하는 것이 대단히 중요하다는 점을 너무나 잘 알고 있기 때문입니다. 조사 자료에 따르면 데스크톱 PC 사용자의 57%와 노트북 컴퓨터 사용자의 45%가 컴퓨터를 절전 모드로 전환하지 않고 종료하는 것으로 나타났습니다. 다시 말해서, 대략 절반에 이르는 사용자가 컴퓨터를 절전 모드로 전환하지 않고 종료한다는 것입니다.

Windows 7 노트북 컴퓨터의 전원 전환 방식을 보여주는 파이 차트. 여기서 사용자의 45%는 절전, 11%는 최대 절전, 45%는 종료(재시작 포함)하는 것으로 나타납니다.
Windows 7 데스크톱의 전원 전환 방식을 보여주는 파이 차트. 여기서 사용자의 42%는 절전, 1%는 최대 절전, 57%는 종료(재시작 포함)하는 것으로 나타납니다.

PC를 완전히 '끄려는' 성향에 대해 사용자들은 전력 소모를 방지하여 배터리를 절약하거나 에너지 사용량을 줄이기 위해서라고 말합니다. 최대 절전 모드로 전환하는 것도 전력을 소모하지 않는 좋은 방법이기 때문에 사용자들이 선호합니다. 그러나, 무엇보다 이전 세션의 일부가 계속해서 실행되지 않고 완전히 '새롭게 시작'되도록 PC를 다시 켜려는 성향이 있기 때문에 최대 절전 모드를 사용하지 않는 사람이 많습니다. 요즘 사용하는 PC를 신속히 켜고 끄기 위해서는 절전/재시작을 선택하는 것이 최선의 방법이지만, 이 경우에도 RAM에 저장된 정보를 보존하기 위해 약간의 전력이 소모됩니다. 최적화된 시스템에서도 적은 양이지만 전력이 소모됩니다. 오늘날 사용되는 휴대 전화는 다시 시작하는 일이 거의 없고 항상 절전과 비슷한 상태에서 사용된다는 점에서 시사하는 바가 큽니다.

따라서 특별한 하드웨어를 새롭게 도입하지 않고 오늘날의 PC에 대해 이러한 요구를 충족할 방법을 찾기 위해 다음과 같은 목표를 세웠습니다.

  • 시스템을 끌 때 실질적인 전력 소모를 없앰
  • 부팅 후 세션을 새롭게 시작
  • 전원 단추를 누르고 PC를 사용할 수 있을 때까지의 시간을 대폭 단축

Windows 7에서는 장치 드라이버의 동시 초기화와 트리거-시작 서비스 등 부팅 경로가 많이 개선되었지만 위의 모든 목표를 충족할 수 있도록 빠른 부팅 성능을 실현하려면 기능을 점차 추가하기보다는 분명 더 창의적인 발상을 통해 개선해야 합니다.

이런 배경에서 나온 솔루션이 바로, 기존의 콜드 부팅과 최대 절전 모드에서 재시작하는 과정을 통합한 새로운 빠른 시작 모드입니다.

이 모드를 자세히 설명하기 전에 Windows 7에서 종료와 부팅이 어떤 식으로 진행되는지 알아두면 도움이 될 것 같습니다.

종료 과정:

  1. 사용자가 [시작] 메뉴에서 '종료'를 선택하거나 전원 단추를 눌러 종료를 실행합니다. 또는 응용 프로그램에서 ExitWindowsEx() 또는 InitiateShutdown() 등의 API를 호출하여 종료를 실행합니다.
  2. Windows가 실행 중인 응용 프로그램에 메시지를 보내 데이터와 설정을 저장하도록 합니다. 응용 프로그램이 진행 중인 작업을 완료할 수 있도록 추가 시간을 요청할 수도 있습니다.
  3. Windows가 로그온한 각 사용자의 사용자 세션을 닫습니다.
  4. Windows가 서비스에 메시지를 보내 종료 과정이 시작되었으며 이후 컴퓨터가 종료된다는 사실을 알립니다. 종속된 서비스를 순차적으로 종료하고 나머지를 동시에 종료합니다. 서비스가 응답하지 않으면 강제로 종료합니다.
  5. Windows가 장치에 메시지를 보내 종료하라고 알립니다.
  6. Windows가 시스템 세션을 닫습니다. 이 세션을 '세션 0'이라고도 합니다.
  7. Windows가 보류 중인 데이터를 시스템 드라이브에 넘겨 안전하게 저장되도록 합니다.
  8. Windows가 ACPI 인터페이스를 통해 시스템에 PC를 종료하라는 신호를 보냅니다.

부팅 과정:

  1. 전원 단추를 누르면 PC의 펌웨어가 POST(Power-On Self Test)를 실행하고 펌웨어 설정을 로드합니다. 유효한 시스템 디스크가 발견되면 이 사전 부팅 과정이 끝납니다.
  2. 펌웨어가 마스터 부트 레코드(MBR)를 읽어들이고 Bootmgr.exe를 시작합니다. Bootmgr.exe가 Windows 부팅 파티션에서 Windows 로더(Winload.exe)를 찾아 시작합니다.
  3. Windows 커널을 시작하는 데 필요한 필수 드라이버가 로드되고 커널이 실행되기 시작하면서 시스템 레지스트리 하이브와 BOOT_START로 표시된 추가 드라이버를 메모리에 로드합니다.
  4. 커널이 시스템 세션을 초기화하는 세션 관리자 프로세스(Smss.exe)에 제어권을 넘겨 BOOT_START로 표시되지 않은 장치와 드라이버를 로드하고 시작합니다.
  5. Winlogon.exe가 시작되고 사용자 로그온 화면이 표시되며, 서비스 제어 관리자가 서비스를 시작하고 그룹 정책 스크립트가 실행됩니다. 사용자가 로그인하면 Windows가 이 사용자에 대한 세션을 만듭니다.
  6. Explorer.exe가 시작되고 시스템이 바탕 화면 창 관리자(DWM) 프로세스를 만들어 바탕 화면을 초기화하고 표시합니다.

더 자세한 내용을 알아보려면 웹 사이트 https://msdn.microsoft.com/en-us/windows/hardware/gg463386을 참조하십시오.

기존 종료 과정에서는 모든 사용자 세션을 닫고 커널 세션에서 서비스와 장치를 닫아 완전한 종료를 준비한다는 점이 중요합니다.

여기에 바로 Windows 8이 차별화되는 핵심 요소가 있습니다. Windows 7과 마찬가지로 사용자 세션은 닫히지만 커널 세션을 닫는 대신 최대 절전 모드로 전환합니다. 완전한 최대 절전 모드에서는 여러 앱이 많은 메모리 페이지를 사용하는 반면, 세션 0의 최대 절전 모드 데이터는 훨씬 더 작기 때문에 디스크에 기록하는 시간이 크게 줄어듭니다. 최대 절전 모드에 익숙하지 않은 분들을 위해 설명하면, 시스템 상태 및 메모리에 있는 데이터를 디스크의 파일(hiberfile.sys)에 저장하고 재시작할 때 이 데이터를 다시 읽어들여 메모리에 데이터를 복원함으로써 효율성을 높입니다. 대부분의 시스템에서 hiberfile을 읽어들이고 드라이버를 다시 초기화하는 시간이 훨씬 빨라지기 때문에 부팅에 이 기술을 사용하면 부팅 시간이 대폭 단축됩니다. 참고로, 테스트한 대부분의 시스템에서 30-70% 정도 빨라졌습니다.

30가지 PC 구성에서 Windows 8의 빠른 시작 시간과 Windows 7의 콜드 부팅 시간을 비교한 막대 차트. Windows 8의 빠른 시작 시간은 모두 15~33초 범위이지만 Windows 7의 콜드 부팅 시간은 25~72초 범위입니다.
'시스템 통합 테스트' 랩 시스템의 테스트 결과 샘플
차트를 확대하려면 클릭하십시오.

속도가 빨라진 이유는 최대 절전 모드의 시스템 세션을 다시 시작하는 프로세스가 완전한 시스템 초기화 프로세스보다 간단할 뿐만 아니라, 멀티 코어 시스템의 모든 코어를 동시에 사용하여 hiberfile을 읽고 데이터를 압축 해제하는 작업을 분할하는 다단계 재시작(Multi-phase Resume) 기능이 새롭게 추가되었기 때문입니다. 최대 절전 모드를 선호하는 사용자의 경우도 최대 절전 모드에서 재시작하는 속도가 더 빨라졌습니다.

시작 프로세스의 각 단계에 필요한 상대적 시간을 보여주는 막대 차트. Windows 7 콜드 부팅의 경우, POST/사전 부팅에 전체 시간의 약 1/3이 소요되고, 시스템 초기화에 절반의 시간이 소요되며, 사용자 세션 초기화에 약 1/5의 시간이 소요됩니다. Windows 8 빠른 시작의 경우, POST/사전 부팅에 약 1/3의 시간이 소요되고, Hiberfile 읽기와 사용자 세션 초기화에 각각 약 1/4의 시간이 소요되며, 드라이버 초기화에 Hiberfile 및 사용자 세션 초기화보다 약간 적은 시간이 소요됩니다.
콜드 부팅과 빠른 시작 프로세스의 각 단계별 차이
차트를 확대하려면 클릭하십시오.

여기서 hiberfile의 처리 방식을 간략하게 언급할 필요가 있을 것 같습니다. 이 글을 읽고 실제로 dir /s /ah hiberfile.sys를 실행해 보면 이 파일이 디스크에서 상당히 큰 파일이라는 것을 알 수 있습니다. hiberfile의 크기는 기본적으로 물리적 RAM의 75%로 지정됩니다. 이 파일은 기본적으로 시스템이 최대 절전 모드로 전환될 때 작성되는 최대 절전 모드 데이터를 저장하기 위한 것입니다. 일반적으로 실제 사용되는 공간은 훨씬 적으며, 빠른 시작을 사용하는 경우 대개 물리적 RAM의 10-15% 크기이지만 이 수치는 드라이버, 서비스, 기타 요인에 따라 달라집니다. 또한 시스템은 hiberfile을 디스크의 다른 파일과 약간 다르게 처리하는데, 예를 들어 볼륨 스냅숏 서비스는 이 파일을 무시하므로 시스템 성능을 떨어뜨리지 않습니다. 승격된 명령 프롬프트에서 powercfg /hibernate off를 실행하여 최대 절전 모드를 해제하고 이 공간을 회수할 수 있습니다. 단, 이렇게 하는 경우 최대 절전 모드가 완전히 해제되는데, 빠른 시작은 물론이고, 정전될 경우 최대 절전 모드 상태에서 다시 시작할 수 있도록 데스크톱 시스템을 절전 상태와 최대 절전 모드로 동시에 전환하는 하이브리드 절전 등의 유용한 기능까지 모두 해제된다는 점에 유의하십시오. powercfg /hibernate /size를 실행하고 hiberfile에 할당할 물리적 RAM의 비율을 0~100% 사이의 값으로 지정할 수도 있습니다. 그러나 비율을 너무 작게 지정하면 최대 절전 모드가 실행되지 않을 수 있으므로 주의하시기 바랍니다. 일반적으로 시스템의 디스크 공간 제약이 많지 않다면 이 값을 기본 설정으로 두는 것이 좋습니다.

Windows 8의 빠른 시작 모드에 대해 알아두어야 할 중요한 사항은 모든 드라이버에 대해 완전한 '플러그 앤 플레이' 조사를 수행하지는 않지만 이 모드에서도 여전히 드라이버를 초기화한다는 점입니다. 드라이버와 장치를 '새롭게 시작'하기 위해 콜드 부팅을 하려는 사용자의 경우, 콜드 부팅과 동일한 프로세스는 아니어도 새로운 모드에서 동일한 결과를 얻을 수 있다는 점은 반가운 소식입니다.

새로운 빠른 시작 모드는 기존 HDD와 SSD(반도체 드라이브)를 막론하고 거의 모든 시스템에서 효과가 좋지만, 특히 고속 SSD를 채택한 최신 시스템에서 효과가 더욱 뛰어납니다. 아래 비디오에서 직접 확인해 보십시오.

이 HTML5 비디오는 현재 브라우저에서 지원되지 않습니다.

다른 미디어 플레이어로 보려면 이 비디오를 다운로드하십시오.
고화질 MP4 | 저화질 MP4

이 비디오에서 주목할 점은 POST가 Windows에 제어권을 넘겨주는 속도가 매우 빠르다는 것입니다. UEFI(Unified Extensible Firmware Interface)를 사용하여 제작된 시스템은 기존 BIOS를 채택한 시스템에 비해 사전 부팅 시간이 매우 빠른 편입니다. 그 이유는 UEFI 자체가 더 빠르기 때문이 아니라, 처음부터 새로 시작되는 UEFI 기록기가 수년이 지난 BIOS 구현을 기반으로 하는 경우보다 최적화 능력이 더 뛰어나기 때문입니다. 반가운 소식은 대부분의 시스템 및 마더보드 제조업체들이 UEFI를 구현하기 시작했으므로 새로 출시되는 많은 시스템에서 시작 시간 단축이 보편화될 것입니다.

물론, 하드웨어를 추가하거나 변경하기 위해 시스템을 열어야 하는 경우처럼 시스템을 완전히 종료해야 하는 경우도 있습니다. 이런 경우를 대비해서 UI에 Windows 7 종료/콜드 부팅 동작으로 되돌아갈 수 있는 옵션을 마련했습니다. 이런 경우는 상당히 드물기 때문에 shutdown.exe에서 새로운 /full 스위치를 사용할 수도 있습니다. 명령 프롬프트에서 shutdown /s /full / t 0을 실행하여 즉시 완전 종료를 호출합니다. 또는 UI에서 [재시작]을 선택하면 시스템이 완전 종료된 후 콜드 부팅이 실행됩니다.

부팅 업무는 대부분 커널 플랫폼 그룹에서 처리하지만 Windows 8에서는 운영 체제 전반에 걸쳐 새로운 모드를 지원하는 동시에, 조만간 논의하게 될 또 다른 유용한 부팅 기능을 지원하기 위해 여러 팀이 협력하여 기능을 개선했습니다. 내부적으로 Windows 8의 부팅 성능을 높이 평가하고 있으며 여러분도 조만간 직접 사용해 보고, 많은 의견을 보내주시기 바랍니다.

- Gabe Aul