Trawling

리눅스 커널 RAID 코드의 마지막 MMX 최적화 제거 추진

Eric Biggers가 보낸 세 패치는 32비트 x86 커널의 RAID XOR·RAID6 계산에서 마지막 MMX 최적화 경로를 제거하고, 해당 구형 CPU가 기존 스칼라 C 코드로 계산하도록 합니다. Phoronix는 패치가 Andrew Morton의 MM Git 트리에 들어갔으며 Linux 7.5에 포함될 가능성을 전했습니다.

본문

Eric Biggers가 2026년 10월 25일 Linux 커널 메일링 리스트에 올린 세 패치는 32비트 x86의 RAID XOR·RAID6 계산에서 MMX 최적화 코드를 제거합니다. Phoronix는 패치가 Andrew Morton의 MM Git 트리에 들어갔으며 Linux 7.5에 포함될 가능성이 있다고 보도했습니다. 실제 영향은 소프트웨어 RAID 배열을 사용하는 구형 CPU에 한정됩니다. XOR 경로에서는 SSE를 지원하지 않는 CPU, RAID6 경로에서는 SSE2를 지원하지 않는 CPU가 해당 MMX 구현을 쓰던 경우입니다.

RAID는 XOR 연산으로 패리티를 계산합니다. RAID6는 데이터에서 XOR 패리티 P와 Q 신드롬도 계산합니다. 기존 MMX 구현은 SIMD 명령어로 여러 값을 묶어 처리했습니다. 첫 번째 패치는 실제 RAID 배열이 있는 시스템에서 SSE를 지원하지 않는 32비트 CPU에 선택되던 XOR용 MMX 코드를 제거합니다. 해당 CPU는 기존 스칼라 C 코드 경로를 사용합니다.

두 번째 패치는 SSE2가 없는 CPU를 대상으로 하던 RAID6의 MMX 계열 구현을 제거합니다. 여기에는 이름과 달리 MMX 계산을 바탕으로 SSE1 프리페치와 비일시적 저장 명령을 더한 sse1.c 경로도 포함됩니다. Biggers는 영향을 받는 CPU가 이미 충분히 테스트된 스칼라 C 코드로 대체된다고 설명했습니다.

세 번째 패치는 RAID6의 CPU 기능 검사 코드를 정리합니다. AVX2에 필요한 AVX처럼 다른 기능의 전제 조건인 기능을 따로 확인하던 검사와, 복구 알고리즘을 고르는 과정에서 반복되던 검사를 줄입니다. SSE2·AVX2·AVX-512 구현 경로는 유지됩니다.

Biggers는 이 RAID 구현이 커널에 남은 마지막 MMX 최적화 코드라고 설명했습니다. 메모리 복사 함수 memcpy()와 페이지 복사·초기화 함수 copy_page(), clear_page()의 MMX 최적화는 이미 제거됐습니다. 이번 패치는 lib/raid의 커널 구현과 RAID6 기능 선택 코드를 다룹니다.

자료: Phoronix / 정리·해설: Trawling

참고 자료

오류 제보