코어 서버 부팅 시간 4시간 → 3분 단축 성공!

by DD
2일 전
조회수 40

펌웨어 업데이트 후 코어 서버 부팅 시간이 기존 수 분에서 4시간으로 급증하는 문제 발생

UEFI 부팅 순서의 비효율적인 선형 탐색(Linear Search)이 원인으로 지목됨

부팅 인터페이스 순서 재정의 및 자동화 개선으로 부팅 시간 98% 단축 달성

UEFI 펌웨어 업데이트 후 부팅 시간 급증 원인 분석

본문에서는 펌웨어 업데이트 이후 Cloudflare 코어 서버의 부팅 시간이 기존 수 분에서 4시간으로 급증한 현상을 다룬다. 이는 UEFI(Unified Extensible Firmware Interface)네트워크 부팅 인터페이스(Network Boot Interface) 탐색 과정에서 발생한 문제로, 특히 선형 탐색(Linear Search) 방식이 비효율을 야기했다. 서버는 성공적인 부팅 인터페이스를 찾기 전까지 IPv4 HTTPS, IPv4 iPXE, IPv6 HTTPS 등 여러 인터페이스를 순차적으로 시도하며 각 단계마다 약 5분의 타임아웃 시간을 소요했다. 이로 인해 총 4번의 실패 시 약 20분의 지연이 발생했으며, 펌웨어 업그레이드와 같이 여러 번의 재부팅이 필요한 작업에서는 누적되어 심각한 시간 지연을 초래했다. 이는 자동화된 인프라 관리(Automated Infrastructure Management)의 근간을 흔드는 심각한 문제였다.

네트워크 부팅 인터페이스 최적화 전략

문제 해결을 위해 Cloudflare는 부팅 인터페이스의 순서를 명시적으로 선언하여 불필요한 탐색 시간을 제거하는 전략을 채택했다. 기존에는 시스템이 가능한 모든 네트워크 부팅 옵션을 순차적으로 탐색했지만, 개선 후에는 PXE(Preboot Execution Environment) 단계에서 우선순위를 미리 지정하여 가장 적합한 인터페이스로 즉시 부팅을 시도한다. 이 과정에서 iPXE(Internet Protocol Pre-Execution)와 같은 오픈소스 툴을 활용하여 프로그래밍 가능한 워크플로우를 구축했다. 이러한 자동화 워크플로우 재구성(Automation Workflow Restructuring)을 통해 각 펌웨어 업그레이드 시 발생하는 20분의 탐색 시간을 제거, 전체 부팅 시간을 1시간 단축하는 성과를 거두었다. 또한, 상태 검증 단계(State Validation Step)를 추가하여 설정 변경 후 재적용 및 재부팅을 자동화함으로써 후속 부팅 시간을 20분에서 1분 미만으로 크게 줄였다.

UEFI 설정 접근 제약 및 벤더 협력

개선 과정에서 UEFI 설정 접근의 제약이라는 기술적 난관에 봉착했다. 일부 하드웨어 벤더는 BIOS 부팅 시간 단축을 위해 네트워크 부팅 설정이 GUI 콜백(Callback) 시에만 인스턴스화되는 레이지 로딩(Lazy Loading) 방식을 사용했다. 이로 인해 자동화 스크립트가 해당 설정을 즉시 인식하지 못하는 문제가 발생했다. 또한, 특정 벤더의 고정된 부팅 순서 설정(Immutable Setting)은 프로그래밍 방식의 변경을 원천적으로 차단했다. 이러한 문제를 해결하기 위해 Cloudflare는 OEM 벤더와의 긴밀한 협력을 통해 새로운 BIOS 버전을 확보하고, EFI_IFR_REF3 데이터 구조에 대한 이해를 바탕으로 부트 로더(Bootloader) 모듈의 특정 토큰을 강제 활성화하는 방안을 모색했다. 이는 하드웨어 벤더와의 협업(Hardware Vendor Collaboration)이 기술적 제약을 극복하는 데 필수적임을 보여준다.

네트워크 인터페이스 카드(NIC) 문자열 불일치 문제 해결

다양한 네트워크 인터페이스 카드(NIC) 벤더에서 제공하는 네트워크 부팅 인터페이스의 문자열 형식 불일치는 또 다른 난관이었다. 예를 들어, "UEFI: HTTPS IPv4 Ethernet Network Adapter XXX-XXX-Y for OCP 3.0 P1"와 같이 제품명, MAC 주소 등이 포함된 복잡한 문자열은 자동 설정에 어려움을 야기했다. 이를 해결하기 위해 Cloudflare는 CfHIIConfig_App 도구에 와일드카드 매칭 기능을 추가하여, "`.*HTTP.*IPv4.*P1`"와 같이 핵심 정보만 추출하여 설정할 수 있도록 개선했다. 장기적으로는 벤더들과 협력하여 네트워크 인터페이스 문자열 표준화를 추진 중이며, 제품명 대신 프로토콜, 전송 타입, 포트 번호 등 핵심 정보 위주로 구성하도록 유도하고 있다. 이는 구성 드리프트(Configuration Drift)를 방지하고 와일드카드 사용을 최소화하여 시스템 안정성을 높이는 데 기여한다.

iPXE 환경에서의 설정값 검증 및 최적화

iPXE 환경에서 UEFI 설정을 HEX 값으로 읽어오는 특성 때문에, 문자열 기반의 설정 변경 여부를 직접 비교하기 어려운 문제가 있었다. 이를 해결하기 위해 `uefi-same-hex`라는 불리언 플래그(Boolean Flag)를 도입하여 설정 변경 여부를 효율적으로 판단하도록 구현했다. 이 플래그는 설정이 변경되었을 때만 활성화되어, 불필요한 `show` 명령어 실행 및 비교 과정을 생략하고 단일 `set` 명령어로 설정을 적용할 수 있게 한다. 결과적으로 설정 변경 검증 프로세스(Configuration Change Validation Process)가 간소화되었으며, 부팅 시 불필요한 I/O 작업을 줄여 전체적인 부팅 시간을 단축하는 데 기여했다. 이는 오픈소스 툴(Open-source Tool)의 유연한 확장성을 활용하여 복잡한 인프라 문제를 해결한 사례이다.

How we reduced core unit boot time from hours to minutes