코어 유닛 부팅 시간을 몇 시간에서 몇 분으로 단축한 방법
Cloudflare의 핵심 서버가 펌웨어 업데이트 후 부팅에 최대 4시간 걸린 원인은 펌웨어 자체의 치명적 오류가 아니라, UEFI가 네트워크 부트 인터페이스를 순차적으로 탐색하며 각 실패마다 긴 타임아웃을 기다렸기 때문이었다. 서버는 실제로 사용할 IPv6 HTTPS 부트에 도달하기 전에 IPv4 HTTPS와 IPv4 iPXE를 반복 시도했고, 이 과정이 여러 번의 재부팅에 누적됐다. Cloudflare는 하드웨어별 올바른 부트 인터페이스를 사전에 지정하고 설정 검증·재적용 절차를 추가해 이후 부팅 시간을 약 20분에서 1분 이하로 줄였다. ## 네트워크 부트 인터페이스의 역할 - 중앙 데이터센터의 Cloudflare 코어 서버는 운영체제를 로컬 디스크가 아니라 네트워크를 통해 부팅하는 경우가 많다. - 주요 네트워크 부트 방식은 다음과 같다. - **PXE**: 서버가 네트워크에서 부트 환경을 받아오는 전통적인 방식 - **UEFI HTTPS Boot**: UEFI 펌웨어가 HTTPS를 통해 운영체제 파일을 직접 다운로드하는 방식 - Cloudflare는 오픈소스 네트워크 부트 펌웨어인 **iPXE**를 사용한다. - HTTP·HTTPS를 지원한다. - 하드웨어 구성별 프로비저닝과 자동화된 서버 배포를 스크립트로 처리할 수 있다. - 서버와 네트워크 카드의 종류, 용도에 따라 실제로 사용해야 하는 네트워크 부트 인터페이스가 달랐다. ## 원인: 모든 인터페이스를 순차 검색한 선형 탐색 - 펌웨어 업데이트 이후 서버가 운영체제 시작 단계에 도달하지 못하고 장시간 멈췄다. - 직렬 콘솔을 확인한 결과 POST와 하드웨어 초기화는 정상적으로 완료됐다. - 문제는 네트워크 부트 단계에서 발생했다. - IPv4 HTTPS Boot 시도 - 약 5분간 타임아웃 대기 - IPv4 iPXE 시도 - 다시 타임아웃 대기 - 같은 탐색을 반복 - 마지막에 실제로 성공하는 IPv6 HTTPS Boot 실행 - 각 실패한 인터페이스마다 약 5분이 소요됐다. - 올바른 인터페이스에 도달하기 전 네 번의 시도가 누적되면서 한 번의 부팅에 약 20분이 낭비됐다. - 펌웨어 업그레이드는 구성요소별로 여러 차례 재부팅을 필요로 하므로, 서버 한 대당 대기 시간이 거의 4시간까지 늘어났다. - 신규 서버도 첫 부팅부터 같은 타임아웃을 겪어 전체 배포와 유지보수 일정이 지연됐다. ## 해결 방향: 사용할 부트 인터페이스를 미리 지정 - 핵심 해결책은 UEFI가 모든 인터페이스를 추측하며 검색하지 않도록, 하드웨어와 사용 사례에 맞는 네트워크 부트 인터페이스 순서를 미리 선언하는 것이었다. - Cloudflare는 부트 자동화 흐름을 다음 세 단계로 나눠 관리했다. - UEFI 펌웨어 초기화 - PXE 기반 프리부트 단계 - 커널 시작 - 네트워크 인터페이스 순서를 프리부트 PXE 단계 초기에 설정하도록 자동화 순서를 변경했다. - 그 결과 펌웨어 업그레이드 과정에서 반복되던 네트워크 부트 탐색 시간을 줄여 전체 작업 시간을 약 한 시간 단축했다. - 이후의 일반적인 재부팅은 기존 약 20분에서 1분 이하로 감소했다. ## 레거시 UEFI와 설정 초기화 문제 - 부트 순서를 지정하는 과정에는 두 가지 제약이 있었다. - 오래된 UEFI 버전에서는 부트 순서 설정 자체가 지원되지 않았다. - UEFI 펌웨어를 업데이트하면 부트 순서 설정이 초기화되는 경우가 있었다. - 이를 해결하기 위해 자동화 과정에 **상태 검증 단계**를 추가했다. - 설정 변경 후 실제 펌웨어 상태를 확인한다. - 설정이 사라졌거나 변경되었으면 원하는 값을 다시 적용한다. - 필요한 경우 재부팅해 새 설정을 적용한다. - 첫 부팅에는 검증과 재적용 때문에 약간의 추가 시간이 들 수 있지만, 이후 부팅마다 반복되는 긴 인터페이스 탐색을 제거할 수 있었다. ## 벤더가 비활성화한 네트워크 부트 순서 설정 - 자동화 프로그램이 네트워크 부트 우선순위를 읽지 못하는 또 다른 문제가 있었다. - UEFI의 네트워크 부트 설정은 `EFI_IFR_REF3` 구조로 관리되고 있었으며, 필요할 때까지 실제 데이터가 생성되지 않는 **지연 로딩(lazy loading)** 방식이었다. - 이 구조는 BIOS 부팅 시간을 줄이는 데는 도움이 되지만, GUI에서 해당 항목을 직접 열지 않으면 프로그램이 설정 정보를 발견할 수 없게 만들었다. - 그 결과 자동화 도구의 펌웨어 스캔에서 “Network Boot Interface” 항목이 보이지 않았다. - Cloudflare는 하드웨어 벤더와 협력해 고정된 “Boot Order Module”에서 관련 토큰을 활성화했다. - 이 설정은 GUI를 수동으로 열지 않아도 부팅 과정에서 네트워크 부트 인터페이스가 검색·초기화되도록 만들었다. 실용적으로는 네트워크 부트를 사용하는 서버에서 모든 인터페이스를 무조건 탐색하게 두기보다, 하드웨어별 유효한 인터페이스를 명시하고 부팅 후 설정이 유지되는지 자동 검증하는 것이 중요하다. 특히 펌웨어 업데이트처럼 여러 번 재부팅하는 작업에서는 인터페이스 하나당 타임아웃이 전체 유지보수 시간을 크게 늘릴 수 있으므로, UEFI 설정의 지속성·레거시 호환성·벤더별 표현 차이까지 함께 자동화해야 한다.
원문 읽기(새 탭에서 열림)