본문으로 건너뛰기

© 2026 Molayo

Phoronix헤드라인2026. 06. 17. 02:18

Linux 7.2, 셸 파이프라인 등을 위한 익명/무명 파이프(Anonymous/Unnamed Pipe) 성능 개선

요약

Linux 7.2 커널에서 익명 파이프의 성능을 개선하기 위한 패치가 병합되었습니다. 뮤텍스 락 외부에서 페이지를 미리 할당함으로써 경합을 줄이고, 메모리 압박 상황에서도 처리량과 지연 시간을 크게 향상시켰습니다.

핵심 포인트

  • 뮤텍스 보유 중 페이지 할당을 피하기 위해 락 외부에서 사전 할당 방식 도입
  • 메모리 압박 상황에서 처리량 최대 48% 향상 및 지연 시간 최대 33% 감소
  • 파이프별 tmp_page[] 캐시를 활용하여 임계 구역 내 체류 시간 최소화
  • Linux 7.2 커널에 해당 성능 개선 사항 반영 완료

Linux 7.2, 셸 파이프라인 등을 위한 익명/무명 파이프(Anonymous/Unnamed Pipe) 성능 개선

LINUX KERNEL

Meta의 Breno Leitao는 캐싱 코드의 일부를 프로파일링하던 중 핫 패스(hot path)에서 파이프와 뮤텍스(mutex) 간의 경합(contention)을 발견했습니다. 이는 이제 경합을 피하기 위해 락(lock) 외부에서 미리 할당하도록 새로 병합된 코드를 통해 해결되었습니다.

VFS misc 풀 리퀘스트(pull request)에서는 해당 상황을 다음과 같이 설명합니다:

"anon_pipe_write()는 pipe->mutex를 보유한 상태에서 페이지당 한 번씩 alloc_page()를 호출했습니다. 이 할당 과정은 직접 회수(direct reclaim)를 수행하며 수면(sleep) 상태에 빠질 수 있고, memcg 차징(charging)을 실행하여 임계 구역(critical section)을 연장시키고 동일한 뮤텍스에 있는 모든 동시 읽기 작업을 지연시킵니다. 이제 뮤텍스를 잡기 전에 최대 8개의 페이지를 미리 할당하며, 남은 페이지는 언락(unlock) 전에 파이프별 tmp_page[] 캐시로 재활용되고, 나머지 잔여분은 언락 후에 해제되어 양쪽 모두에서 할당자가 임계 구역에 머물지 않도록 합니다. 1MB 파이프 처리량에 대해 64KB 쓰기를 수행하는 쓰기 대 읽기 스윕(writers x readers sweep) 시 처리량은 6-28% 향상되고 평균 쓰기 지연 시간(latency)은 5-22% 감소합니다. 메모리 압박(memory pressure) 상황 - 회수(reclaim) 과정 동안 뮤텍스를 보유하는 비용이 가장 높을 때 - 처리량은 21-48% 향상되고 지연 시간은 17-33% 감소합니다. 마이크로벤치마크(microbenchmark)가 selftests에 추가되었습니다."

매우 훌륭한 성능 향상입니다. 더 자세한 수치는 Breno Leitao의 이 패치 커버 레터(patch cover letter)를 통해 확인할 수 있습니다.

해당 작업은 현재 Linux 7.2에 병합되었습니다.

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0