본문으로 건너뛰기

© 2026 Molayo

Phoronix헤드라인2026. 06. 15. 20:26

Linux 7.2, 더 많은 "unsafe" 코드를 제거하기 위해 Rust Zerocopy 라이브러리 도입

요약

Linux 7.2 커널에 Rust 'zerocopy' 라이브러리가 도입되어 메모리 조작 시 발생하는 'unsafe' 코드를 안전하게 제거할 수 있게 되었습니다. 또한 AutoFDO 지원을 통해 Rust 커널 코드의 성능을 최적화하고 KASAN 지원 등 다양한 개선 사항이 포함되었습니다.

핵심 포인트

  • Zerocopy 라이브러리 도입으로 안전한 메모리 변환 및 unsafe 코드 감소
  • AutoFDO 지원을 통한 Rust 커널 코드의 성능 최적화(약 13% 차이 확인)
  • KASAN(Kernel Address Sanitizer)에 대한 Rust 지원 추가
  • Rust 1.98 버전 지원 및 Kbuild, rust-analyzer 개선

Linux 7.2, 더 많은 "unsafe" 코드를 제거하기 위해 Rust Zerocopy 라이브러리 도입

LINUX KERNEL

이번 사이클의 Rust 변경 사항은 매우 큽니다. 커널 내에서 추가적인 "unsafe" Rust 코드 요소를 제거할 수 있도록 "zerocopy" 라이브러리를 가져오기 때문입니다. Rust 풀 리퀘스트(pull request)는 Zerocopy 코드의 통합에 대해 다음과 같이 설명합니다:

"'zerocopy' 라이브러리에 대한 지원을 도입합니다:

빠르고, 안전하며, 컴파일 에러가 없습니다. 이 중 두 가지만 고르십시오.

Zerocopy는 비용이 들지 않는(zero-cost) 메모리 조작을 손쉽게 만들어 줍니다. 우리가 unsafe를 작성함으로써 여러분은 그럴 필요가 없게 만듭니다.

이 라이브러리는 기본적으로 바이트 시퀀스(byte sequences)와 다른 타입 간의 안전한 변환을 위한 파생 가능한 트레이트(derivable traits, 예: 'FromBytes')와 매크로(macros, 예: 'transmute!')를 제공합니다. 이러한 지원을 통해 우리는 일부 'unsafe' 코드를 제거할 수 있습니다.

이 라이브러리는 가장 많이 다운로드되는 Rust 크레이트(crates) 중 하나이며, Rust 컴파일러 자체에서도 사용됩니다.

라이선스는 "BSD-2-Clause OR Apache-2.0 OR MIT"로 제공됩니다.

크레이트들은 기본적으로 있는 그대로 가져오며(단 2~3줄의 수정만 필요함), SPDX 식별자가 추가됩니다. 업스트림(Upstream) 측에서 이후 SPDX 식별자와 제 요청에 따른 한 가지 수정을 추가하였으며, 이를 통해 향후 업데이트 시 발생하는 diff를 줄일 수 있게 되었습니다. 세부 사항은 저희의 일반적인 라이브 리스트 중 하나에 기록해 두었습니다.

총 약 39,000줄이 추가되었으며, 문서화 용도인 'benches/'를 제외하면 약 32,000줄입니다.

이 시리즈에는 몇 가지 Kbuild 및 rust-analyzer 개선 사항과 Nova에서 이를 사용하여 하나의 'unsafe impl'을 제거하는 예시 패치가 포함되어 있습니다.

저는 격리된 예시 함수(Nova 패치와 유사한 방식)의 코드 생성(codegen)이 본질적으로 동일함을 확인했습니다. 또한 (해당 특정 사례의 경우) 'zerocopy' 버전은 'debug-assertions'가 활성화된 상태에서도 현재 코드에 존재하는 몇몇 사례와 달리 남은 패닉(panics)이 없다는 것이 밝혀졌습니다(컴파일러가 남은 'ub_checks'를 정적으로 증명할 수 있기 때문입니다).

따라서 그들의 "빠르고 안전하다"는 말은 실제로 입증되었습니다. 적어도 해당 사례에서는 말입니다."

변환 (conversion) 과정에서의 "unsafe" 코드를 처리하는 방식을 개선하기 위해 Zerocopy를 도입하는 것 외에도, Linux 7.2를 위한 Rust 코드는 AutoFDO 지원을 추가했습니다. 이제 Rust 커널 코드는 컴파일러의 자동 피드백 기반 최적화 (Automatic Feedback Directed Optimizations, AutoFDO)를 통해 더 나은 성능을 얻을 수 있습니다. Rust Binder 코드를 사용했을 때 약 13%의 성능 차이가 있었습니다.

또한 소프트웨어 태그 기반의 커널 어드레서 새니타이저 (Kernel Address Sanitizer, KASAN)에 대한 Rust 지원, 곧 출시될 Rust 1.98 버전에 대한 지원, 그리고 기타 개선 사항들이 포함되어 있습니다.

Linux 7.2 병합 윈도우 (merge window)를 위해 제출된 Rust 기능 변경 사항의 전체 세트는 이 풀 리퀘스트 (pull request)를 통해 확인할 수 있습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0