Copyright (C) 커널연구회 (www.kernel.bz)작성자: 정재준(rgbi3307 골뱅이 nate.com)문서위치 메인(출처): https://www.kernel.bz/blogPost/riscv64-bootime아래 내용은 누구나 사용할 수 있습니다. 저자정보는 지우지 말고 위의 출처를 기입해 주시기 바랍니다.커널 버전 [v6.1) 필자는 최근에 배포된 RISCV64 CPU가 탑재되어 있는 StarFive JH7110 보드를 가지고 부팅 속도 최적화를 하고 있습니다. 최근에 발매되고 있는 64비트 임베디드 보드들(라즈베리파이, 젯슨나노)은 대부분 20초에서 30초 내외의 부팅시간을 가지고 있습니다. StarFive JH7110 보드도 커널이 부팅 되는 시간은 24초 정도이고 GUI 화면(데비안 배포본)까지 실행될때까지는 39초정도의 시간이 소요 되고 있습니다. 임베디드 컴퓨팅 환경에서 부팅 대기시간은 현장에서 중요한 평가 지표가 될 수 있기 때문에 필자는 이 시간을 5초 이내로 줄이는 노력을 하고 있습니다. StarFive JH7110 보드에 대한 기술적인 정보들은 아래의 웹사이트에 대부분 공개 되어 있습니다. 기술문서:https://doc-en.rvspace.org/Doc_Center/visionfive_2.html SDK (부트로더, 커널, 개발도구) 소스:https://github.com/starfive-tech/VisionFive2 배포본 (파일서버):https://debian.starfivetech.com/ 필자는 위의 문서들을 참고하여 리눅스 커널 최신 longterm 버전인 v6.1을 가지고 부팅 시간을 최적화 하고 있습니다. 부팅 시간은 부트로더, 리눅스 커널, 디바이스 드라이버, init 프로세스 실행, 루트 파일 시스템 마운트, 리눅스 배포본(GUI) 실행까지 크게 6단계별로 실행 시간을 정리할 수 있습니다. 이 과정을 골격으로 부팅시간을 단계별로 산출한 것을 아래 테이블로 정리 했습니다. 위의 실행 시간은 일반적으로 소요되는 평균 실행 시간입니다. 여기서 커널단에서 소요되는 시간은 약 18초이고 파일 시스템 실행 구간에서 약 21초가 소요 됩니다. 커널 소스단에서 부팅 시간을 가장 많이 최적화할 수 있는 부분은 디바이스 드라이버 실행 구간이고, 파일 시스템 실행구간에서 대부분의 시간이 소요 됩니다. 파일 시스템 실행구간은 root 파일 시스템을 마운트하고 리눅스 배포본을 실행하는 구간이기 때문에 커널 소스 최적화하고는 상관이 없습니다. 부팅시간 최적화 방법은 여러가지 방향이 있을 수 있습니다만, 필자는 리눅스 커널 소스단에서 최적화를 시도하고 있기 때문에 커널 소스 최적화 방법으로는 최대 10초 정도 부팅 시간을 줄일 수 있음을 확인 했습니다. 위의 내용을 단계별로 좀더 자세히 그림으로 정리하면 다음과 같습니다. 부팅 단계별 속도 최적화 위의 그림을 보시면, 부트로더 구간에서 소스를 최적화 하고 불필요한 장치 설정들을 제거하면 1.6초 정도 단축할 수 있습니다. 커널 구간에서는 디바이스 드라이버 소스를 최적화 하고 사용하지 않는 장치들을 제거하면 5.5초 정도 단축할 수 있습니다. 나머지는 파일 시스템 실행 구간인데, 이 구간은 커널 소스와는 상관없이 사용자 프로그램을 실행하는 구간이기 때문에 System Service 실행을 최대한 효율적으로 실행할 수 있도록 환경설정 정보들을 수정하면 3.7초 정도 단축할 수 있습니다. 결과적으로 전체 11초(10.8초) 정도 단축할 수 있었습니다. 이렇게 시간을 단축해도 사용자 프로그램을 실행하기 위해서 대기해야 하는 시간은 전체 28초 정도로 만족할만한 결과는 아닙니다. 그래서 사용자 대기 시간을 획기적으로 줄이는 방법을 다음과 같이 적용 했습니다. 부팅시, 리눅스 커널과 디바이스 드라이버가 준비 되는 시간은 5초이내로 마무리 할 수 있습니다. 이 시점이 되면 커널 디바이스 드라이버들을 실행할 수 있고 비디오 메모리(프레임 버퍼)도 사용 가능 하게 됩니다. 이때 커널단에서 사용자 메뉴를 프레임 버퍼(터치 스크린)에 출력하고 터치 장치를 실행하면 이때부터 사용자는 메뉴를 조작할 수 있게 됩니다. 이렇게 하면 부팅 대기 시간은 5초 정도로 획기적으로 줄어들게 됩니다. 이 내용을 아래 그림을 통해서 자세히 기술 했습니다. 부팅 대기 시간 5초 위의 그림을 보시면,커널 디바이스 드라이버 실행이 마무리 되는 시점(rest_init)에서 비디오 메모리 버퍼(프레임 버퍼)에 사용자 터치 스크린 메뉴를 출력하면, 사용자가 터치 프로그램을 조작하기 위해서 대기하는 시간은 5초가 되고 이때부터 사용자는 프로그램을 기능을 실행할 수 있게 됩니다. 그리고 이것 이후로 부팅되는 것들(파일 시스템 서비스)은 백그라운드로 실행하여 마무리 합니다. 결과적으로, 리눅스 커널에서 사용자 터치 장치를 디바이스 드라이버 설정이 마무리 되는 시점에서 빠르게 실행하면, 부팅 대기 시간은 5초 정도 되는 셈입니다. 이 정도 시간이면 현장 프로젝트에서 우수한 성능을 발휘할 수 있습니다. 커널연구회는 이렇게 수정한 커널을 다양한 프로젝트에 적용할 예정입니다. 아래는 RISCV64(JH7110)와 라즈베리파이4 보드의 커널 부팅시간을 비교한 동영상 입니다. RISCV64(JH7110)와 라즈베리파이4 커널 부팅시간 비교 동영상 참고로, 커널연구회는 RISCV64 커널과 디바이스 드라이버를 현장 업무에서 잘 활용할 수 있도록 실무적인 교육 커리큘럼을 준비 했습니다. 아래 링크에서 교육 내용을 확인하여 신청할 수 있습니다. RISCV64 커널과 디바이스 드라이버 실무 교육: https://www.kernel.bz/product/riscv-edu 감사합니다.