---
title: "coreutils yes(1) 명령어를 175GiB/s로 최적화한 커밋"
published: 2026-03-10T23:44:38.000Z
canonical: https://jeff.news/article/398
---
# coreutils yes(1) 명령어를 175GiB/s로 최적화한 커밋

coreutils의 yes 명령어를 vmsplice/splice 제로카피 I/O로 175GiB/s까지 최적화한 커밋. 페이지 정렬 버퍼, 더블링 복사 패턴, 경험적으로 결정된 512KB 파이프 크기 등이 핵심 기법임.

- coreutils의 `yes` 명령어를 175GiB/s까지 끌어올린 커밋이 올라옴
- 핵심은 vmsplice/splice를 활용한 제로카피 I/O임. `SPLICE_F_GIFT` 플래그로 커널에 페이지를 넘겨서 복사 없이 데이터를 전달함
- 버퍼 채우기에는 더블링 복사 패턴을 사용함. 초기 데이터를 복사한 뒤 채워진 크기만큼 반복 복사해서 버퍼를 빠르게 채움
- 파이프 크기는 경험적으로 512KB가 최적이었고, 실제 전송에는 파이프 용량의 1/4을 사용하는 게 vmsplice 처리량의 스윗스팟이었음
- 페이지 정렬된 버퍼를 `alignalloc`으로 할당하고, stdout이 파이프가 아닌 경우에는 중간 파이프를 만들어서 splice로 전달함
- stdout이 파이프가 아닌 경우에는 기존 `full_write` 방식으로 폴백함

## 핵심 포인트

- vmsplice/splice와 SPLICE_F_GIFT를 활용한 제로카피 I/O로 대폭 성능 향상
- 512KB 파이프 크기의 1/4을 전송 단위로 사용하는 것이 최적
- 파이프가 아닌 stdout에는 full_write 폴백 처리

## 인사이트

단순한 yes 명령어 하나에도 이 정도 시스템 레벨 최적화가 가능하다는 점이 인상적. 제로카피 I/O 패턴의 좋은 학습 사례임
