Kmorph가 재부팅 없는 리눅스 커널 충돌 복구를 목표로 합니다
LINUX KERNEL
오픈 소스 프로젝트인 Kmorph는 이번 주 금요일에 발표되었으며, 이 재부팅 없는 커널 충돌 복구 기능을 위해 개발되었습니다. 이는 지난 1년간 out-of-tree 방식으로 진행되어 온 Multikernel 작업을 기반으로 구축되었습니다. 따라서 현재로서는 적어도 Kmorph는 메인라인(mainline) 리눅스 커널에서 작동하지 않으며, multikernel 코드가 메인라인에 포함될지 여부는 아직 지켜봐야 할 부분입니다.
Multikernel은 여러 개의 독립적인 커널 인스턴스가 동일한 물리적 시스템에 공존할 수 있도록 제공함으로써, 그 활용 사례 중 하나는 하나의 커널이 충돌했을 때 빠르게 복구하고 대체 커널로 신속하게 전환하는 것입니다. Kmorph를 사용하면 시스템이 재부팅 없이도 커널 충돌에서 살아남을 수 있습니다:
"Multikernel을 통해 각 커널은 자체 CPU, 메모리 및 장치를 소유하며, 이 커널들은 vsock을 통해 서로 통신합니다. kmorph는 이를 활용하여 재부팅 과정을 '장악(takeover)'으로 대체합니다. 두 번째 커널인 후속 커널(successor)은 실행 중인 이전 커널(predecessor) 옆의 CPU 한두 개와 메모리 일부에 미리 부팅되어 감시합니다. 이전 커널이 패닉하거나 멈추면, 후속 커널은 자신의 CPU를 격리하고 장치를 채택 및 재설정하며, 네트워크 식별자를 복원하고, 선택적으로 kdump 호환 vmcore를 저장한 다음, 나머지 CPU와 메모리를 핫-어드(hot-add)하여 시스템의 커널이 됩니다. 실행 중인 후속 커널을 감지하는 데 걸리는 시간은 약 1초이며, 재부팅이나 펌웨어, 운영자 개입이 필요 없습니다."
동일한 장악 과정은 라이브 커널 업데이트를 가능하게 합니다: "kmorph upgrade"는 건강한 시스템을 더 새로운 커널로 실행되는 후속 커널에게 넘겨줍니다. 어느 쪽이든 새 커널은 자신만의 후속 커널을 준비할 수 있으며, 세대에서 세대로 발전할 수 있습니다.
모든 새로운 작업은 multikernel 커널에 있습니다: 펜싱(fencing), 장치 및 IOMMU 핸드오버, 그리고 호스트 디바이스 트리로부터의 CPU 및 메모리 핫-어드(hot-add)입니다. kmorph는 자체 인터페이스 위에 구현된 순수 C 오케스트레이션이며, dracut, initramfs-tools, kernel-install, systemd 서비스를 통해 kdump가 작동하는 방식과 유사하게 배포판에 통합됩니다. 현재 x86_64와 ARM64 모두에서 작동하며, RISC-V 지원은 진행 중입니다.
kmorph는 또한 중요한 systemd 서비스가 폴백(fallback) 커널에서 대기 상태로 실행되는 개념을 지원하여 서비스 복구가 매우 빠를 수 있도록 합니다. Nginx를 예로 들면, 커널 충돌 발생 시 2초 만에 온라인 상태로 복구될 수 있으며, 이후 다른 중요도가 낮은 서비스들이 순차적으로 시작됩니다.
메인라인 리눅스 커널에는 Kexec Handover (KHO) 및 Live Update Orchestrator (LUO) 기능이 있지만, 현재는 유사한 커널 충돌 복구를 지원하지 않습니다. 또한 커널 업데이트를 위해 여전히 Kexec 재부팅이 필요하며, 커널 충돌을 지속적으로 유지할 수도 없습니다.
kmorph는 광범위하게 채택되기 위해서는 multikernel이 메인라인으로 통합되는 미래에 달려 있지만, 잠재력이 큰 흥미로운 개념입니다.
kmorph에 대한 더 자세한 내용은 리눅스 커널 메일링 리스트 공지에서 확인할 수 있습니다. 코드는 GitHub에서 이용 가능합니다.