5초 안에 리눅스 부팅하기.

sangu의 이미지

LPC: Booting Linux in five seconds : http://lwn.net/Articles/299483/
인텔 소속의 두 개발자(Arjan van de Ven, Auke Kok)가 ASUS EEE PC(SSD)가지고
리눅스를 부팅할때 처리되는 작업을 BootChat를 통해서 분석하고 해결(?)한 후에
부팅을 5초 안에 했다고 LPC(Linux Plumbers Conference)에서 발표한 내용입니다.

jachin의 이미지

최근에 SSD의 보급이 늘어나고 있으면서 리눅스 부팅 속도도 빨라졌다고 생각했는데,
이젠 지렁이 머리(?)만 보여도 XDM 로그인 화면이 보이는 세상이 되었군요?
EEE PC 전용 배포판이 나와도 좋을 것 같아요.
====
( - -)a 이제는 학생으로 가장한 백수가 아닌 진짜 백수가 되어야겠다.

Prentice의 이미지

이걸 보고 Mandriva 개발자가 적은 내용이 있었는데요..

http://blog.crozat.net/2008/09/improving-boot-time-on-general-linux.html

읽어보시면 재미있습니다.

Ooryll Qrygg의 이미지

목요일, 리눅스 플럼버 컨퍼런스에서, 인텔사의 리눅스 개발자 이며 PowerTOP의 저자인 Arjan van de Ven씨와 인텔사의 오픈 소스 기술 센터의 또 다른 리눅스 개발자인 Auke Kok씨는 5초내에 리눅스 시스템이 부팅하는 것을 시연해 보였다. 하드웨어는 Asus EEE PC였으며, 이 피씨는 솔리드-스테이트 저장장치를 지녔으며, 두 개발자들은 두개의 소프트웨어 로드들, 즉, 수정된 페도라와 수정된 모블린을 가지고 5초의 기록을 깼다. 이들은 청중들을 위해 EEE PC를 들어 보여줘야만 했는데, 이는 부팅을 종료하는 데 요구되는 시간이 프로젝터가 싱크하는데 필요한 시간보다 더 짧았기 때문이었다.

이들이 성공한 방법은? Arjan씨는 일단 작업이 올바른 방향을 가지고 시작했다고 말한다. "이건 부팅을 보다 빠르게하는게 목적이 아니고, 5초 내에 부팅을 하는 것이 목적입니다." 여곳 저곳에서 시간을 절약하기 보다는, 전체 시스템 예상 시간을 정하고, 부팅의 각 단계가 할당된 시간 내에 종료하게 만드는 것이 그것이다. 그리고 속임수는 있을 수 없다. "부팅의 완료란 CPU및 디스크가 아이들하게 된 상태를 의미합니다."라고 Arjan씨는 말한다. 뒤에서 여전히 서비스들을 시동시키는 채 데스트탑을 띄워 보이는 것은 공정한 완료가 아니다. (한 오디언스 멤버는 마이크로소프트는 이런 짓을 한다고 지적했다.) "부팅 완료" 시간은 네트웍을 활성시키는것을 포함하진 않지만 NetworkManager를 시동하는 것은 포함한다. 종래 하드 디스크를 지닌 시스템은 시동하는데 더 긴 시간이 걸리게 될 것이다: Arjan씨는 자신이 동일한 로드를 Think Pad 상에서 돌렸으며 10초의 부팅 시간을 얻었다고 말했다.

그 자체로, 페도라는 파워 온에서 GDM 로그인 화면까지 45초가 소요된다. Ziga Mahkovec씨가 만든 Bootchart라는 툴은 세부사항들을 제공해준다. 페도라 부팅의 Bootchart그래프에서, 시스템은 몇가지 일견 시간-낭비 작업을을 수행한다. 루프백 디바이스를 시동하는데, 즉, 시스템 상의 모든 네트웍 인터페이스들이 루프백인가의 여부를 체크하는데 일초 전부를 사용한다. 다음으로 2초가 "센드메일"을 시동하는데 사용된다. Arjan 씨는 "다른 누군가가 에일 서버를 돌리고 싶어해서 모두 그 대가를 치루는 것이죠,"라고 말하며, 일반 랩톱 사용의 경우에서, 즉, 아웃고잉 메일만을 위해 SMTP 서버가 사용되는 경우에서, 유저는 단순히 ssmtp를 돌리면 된다고 제안했다.

페도라 상에서 또다른 시간 소모 프로세스는 "setroubleshootd"데몬이었으며, 이 데몬은 Security Enhanced Linux(SELinux) 설정의 문제점을 찾아내는데 유용한 툴이다. 이는 5초를 소모한다. 페도라가 모든 비난의 대상은 아니었다. 몇몇 업스트림 프로젝트들도 마찬가지로 문제점있는 지연들을 보였다. X 윈도우 시스템은 C 프리프로세서와 컴파일러를 시동때에 돌리며, 이는 키보드 매핑을 빌드하기 위한 것이다.

우분투의 부팅 시간도 거의 같다: 2초가 더 단축된다. 우분투는 modeprobe를 돌리는데 12초를 소모하며 Modeprobe는 modeprobe를 돌리는 셸을 띄우는데, 이는 단일 모듈을 로딩하게된다. 라이센스-제한 드라이버들을 추가하는 툴이 2.5초를 소모하게 되는데 - 문제는 제한 드라이버들을 필요치 않는 시스템 상에서 일어난다는 것이다. "다른 모든 이들이 바이너리 드라이버 때문에 대가를 치루는 거죠"라고 Arjan씨는 말했다. 우분투의 GDM은 백그라운드 이미지를 디스플레이 하는데 순 CPU시간의 또 다른 2.5초를 소모한다.

이들 배포판 둘다 스플래쉬 화면들을 사용한다. Arjan씨와 Auke씨는 "우린 스플래쉬 화면을 싫어해요. 여러분이 이걸 보는 시간에, 우린 일이 종료되는 걸 바라죠"라는데 동의했다. 배포업체들이 스플래쉬 화면에 쓰는 개발 시간이 인텔 팀이 스플래쉬 화면이 없어도 충분하기에 빠른 부팅에 사용하는 시간보다 훨씬 더 많다.

어떻게 성공했나: 커널

제 1단계는 예상 시간을 작성하는 것이었다. 커널은, 모든 커널을 포함하여, 시작하는데 1초가 걸린다. init 스크립트들과 백그라운드 태스크들을 포함하는 "초기 부팅"은 또다른 1초를 소모한다. X는 또다른 1초를, 그리고 데스크탑 환경은 2초가 걸린다.

커널은 initrd없이 빌드되어야 하며, initrd는 그 안에 아무것도 없이 0.5초를 소모한다. 따라서, 부팅에 필요한 모든 모듈들은 커널안에 빌드되어야만 한다. "소량의 모듈들로 나와 있는 랩탑의 95%를 커버할 수 있습니다"라고 Arjan씨는 말했다. 그는 initrd-기반(based) 이미지가 나머지 5%를 커버한다고 제안했다.

몇가지 커널 작업은 몇가지 서브시스템들의 비동기 초기화를 행하는 것을 가능하게 만들어 주었다. 예를 들어, 수정된 커널은, USB를 다루기 위한, Universal Host Controller Interface(UHCI)와 동시에, 저장장치를 다루기 위해, Advanced Host Controller Interface( AHCI) 초기화를 시작한다. "아마도 우린 0.5초안에 커널을 부팅할 수 있을 겁니다, 그렇지만 우린 1초까지 해보고 거기서 그만 뒀죠" 라고 Arjan씨는 말했다. 커널은 AHCI 지원에서의 전혀 새로운 픽스(fix)덕분에 2.6.28까진 0.5초까지 단축될 거라고 Arjan씨는 덧붙였다.

또 하나의 커널 변화는 readahead 지원을 위한 작은 패치였다. 이제 커널은 부팅때 어떤 블록들을 읽어야 하는 지를 기록해 두었다가 이 정보를 부팅이 완료될때 유저스페이스에서 사용가능하도록 만들어 준다. 이것이 readahead를 가능하게 해주며, 이는초기 부팅 프로세스의 일부이다.

어떻게 성공했나: readahead와 init

페도라는 전통적으로 가동되는 첫번째 유저스페이스 프로그램인 유명한 "init"의 대체로 Upstart를 사용한다. 그러나 인텔팀은 원래 init로 되돌아갔다. init가 다루는 태스크들의 순서가 수정되어 3가지 작업이 동시에 수행된다: 첫번째, 메모리에 캐쉬되도록 디스크로부터 블럭들을 읽는, "sReadahead" 프로세스, 두번째, 크리티컬 경로: 파일 시스템 체크, 다음으로 D-Bus 인터프로세스 커뮤니케이션 시스템, 다음으로 X, 다음으로 데스크탑. 그리고 시동할 프로그램들의 세번째 세트는 Hardware Abstraction Layer(HAL), 다음으로 핫-플럭인 디바이스들을 위한 udev매니저, 다음으로 네트워킹 프로그램들이다. udev는 이후에 추가될 디바이스들을 지원하기 위해서만 사용된다- 즉, 시스템은 끈질기게 남아있는 구태의연한 /dev디렉토리를 가져서 부팅은 udev에 의존하지 않는다.

태스크들의 배열은 CPU의 효율적인 사용을 얻게 돕는다. 예를 들어, X는 비디오 모드들을 탐지하기 위해서 약 0.5초를 지연하며, 이것은 HAL이 CPU-인텐시브한 시동을 할때 일어난다.

디스크와 CPU사용의 그래프에서, 모두는, sReadahead때문에, 대부분의 부팅 시간에 대해서 최고치에 있는다. 시작할때, X는 디스크로부터 읽어들이는도록 지체하지 않으며 이는 필요한 모든 것이 이미 캐시에 있기 때문이다. sReadahead는 페도라 Readahead에 기반을 두지만, 읽어 들여진 블록들의 커널의 새로운 리스트의 이점을 취하도록 수정된다. sReadahead는 다음주에 moblin.org에 릴리즈될 것이며, 커널 패치는 Arjan씨가 ext3 파일시스템 메인테이너인 Ted Ts'o씨와 함께 작업할 수 있는 대로 곧 메인라인이 될것으로 예정되어 있다. (Ted씨는 오디언스에서 부팅을 보다 빠르게 하기 위해 디스크 상의 블록들을 재순서화시키는 몇가지 제안을 제공했다.)

부팅을 하기위해, 75MB의 읽기라는 어려운 제한이 있으며, 이는 플래쉬 저장장치의 최대 전송 속도에 의해서 정해진 것으로 25 MB/s의 I/O의 3초가 걸리게 된다. "우린 전체 파일을 읽어들이진 않습니다. 우린 우리기 실제 사용하는 파일의 조각들만을 읽어들입니다"라고 Arjan씨는 말했다. sReadhead는 "아이들" I/O 스케쥴러를 사용해서, 만일 다른 어떤 것이 디스크를 필요로하게 되면 디스크를 점유하게 된다. readahead가 꺼지면, 시스템은 부팅하는데 7초가 걸리지만, readahead로 시스템은 5초의의 타깃을 달성하게 된다.

X는 여전히 문제가 있다. "우린 X에 많은 데미지를 가해야만 했습니다"라고 Arjan씨는 말한다. 작업의 일부는 키보드 매핑을 재-사용함에 의해서 C 컴파일러 작동을 제거하는 것을 포함했지만, 다른 작업은 보다 일시적인 것이었다. 그러나 X 개발의 현재 경향은 보다 많은 하드웨어 디텍션과 설정을 커널로 집어 넣고 있으며, 이는 전체 시작 시간을 단축시키게 될 것이다. 커널의 예상 시간의 부분이 이미 하드웨어를 초기화 하는 것을 대기하는데 사용되며, 이는하나 이상의 것을 한번에 초기화 할 수 있기 때문에, 커널이 USB와 ATA를 초기화하는 것과 동시에 비디오 하드웨어를 초기화하게 하는 것이 시간을 훨씬 효율적으로 사용하는 것이다. 오디언스에 있으며, 또한 인텔에서 일하는, X 개발자 Keith Packard씨는 도움을 제안했다. 커널에 비디오 모드를 세팅하는 것이, 그림 3에 도시된 바와 같이, 나머지 하드웨어와 동시에 커널이 비디오 모드를 초기화 시키게 하지는 못할 것이다. 고속-부팅 시스템은 GDM을 사용하지 않고, XFCE 데스크탑 환경을 돌려서, 사용자 세션으로 바로 부팅한다. GDM대신에, Arjan씨가 나중에 말한바에 따르면, 배포판은 이전 유저의 데스크탑 세션으로 부팅하여 바로 스크린세이버를 시작할 수 있다. 만일 다른 유저가 로그인하기를 원할 경우, 유저는 스크린 세이버의 "스위치 유저" 버튼을 사용할 수 있다.

결론으로, "부팅을 보다 빠르게 만드는 것에 머물지 마십시오. 이건 잘못된 문제입니다. 문제는 부팅을 빠르게 만드는 것입니다. "라고 Arjan씨는 말했다. 덧붙여 일부 사람이 자신의 랩탑에 어떤 모듈 또는 센드메일을 요구하는 파일시스템을 돌리고 싶어하기 때문에 모든 유저들이 기다리게 해서는 않된다. "기능을 사용하는 한에 대가를 지불하게 그렇게 만드세요." 배포판드은 별도의 initrd-기반 및 initrd-제거 커널 패키지들을 운영할 필요가 없다고 그는 나중에 덧붙였다. 커널은 initrd-없이 부팅을 시도하며 다음으로, 루트 파일시스템을 마운트하는데 필요한 모듈이 없을 때 일어날 수 있는 것처럼, 어떤 이유로든 /sbin/init를 찾을 수 없는 경우 물러설 수 있다.

PowerTOP은 리눅스 소프트웨어 면면의 모둔 분야들로부터 다수의 파워-절약 핵들(hacks)을 탄생시켰다. Bootchart, readahed, 그리고 5-초 부팅 타깃은 리눅스인들 사이에서 선의의 부팅 타임 경쟁을 시발시킬 것으로도 보인다. 금요일 컨퍼런스 라운드업에서, 발표자 Kyle McMartin씨는 페도라 우분투 모두 부팅 프로세스에서 일부 지연들을 고쳤다고 발표해서 많은 박수를 받았다.