UringMachine과 Ruby 4.0 기여
-
버퍼링된 쓰기 작업 시 파이버 스케줄러의
#io_write훅이 호출되지 않고 블로킹되는 문제를 발견하여 수정안을 제출했으며, 이는 Ruby 4.0에 병합되었습니다. -
writev및sendv와 같은 벡터화된 I/O 메서드를 추가하여 저수준 API의 효율성을 높였습니다.
스레드와 파이버의 결합 벤치마크
-
단일 스레드에서 파이버만 사용하는 방식은 I/O를 위해 커널에 진입할 때 GVL(Global VM Lock)을 해제하므로 CPU 자원이 100% 활용되지 않는 구간이 발생합니다.
-
실험 결과, 2개 이상의 스레드에서 각각 파이버를 실행했을 때 단일 스레드 대비 최대 1.77배의 성능 향상을 보였습니다.
-
하지만 스레드 수가 늘어날수록 GVL 경합과 컨텍스트 스위칭 비용으로 인해 성능 향상 폭이 줄어들거나 오히려 저하되는 임계점이 존재함을 확인했습니다.
향후 계획: 사이드카 스레드 및 버퍼 관리
-
주 스레드는 파이버 로직을 처리하고, 별도의 보조(Sidecar) 스레드가 커널 I/O를 전담하는 구조를 실험할 예정입니다.
-
BufferPoolAPI를 도입하여 메모리 할당을 최소화하고 io_uring의 버퍼 링 기능을 투명하게 관리할 계획입니다.