메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

ZIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO

noriwiki


zIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO
AuthorTim Stamler, Deukyeon Hwang, Amanda Raybuc, Wei Zhang, Simon Peter
ConferenceUSENIX OSDI 2022
pdfhttps://www.usenix.org/system/files/osdi22-stamler.pdf



개요

zIO는 애플리케이션의 수정 없이 사용할 수 있는 transparent zero-copy I/O를 제공한다. zIO는 I/O data flow를 추적하여 불필요한 memory copy를 제거하고, 동시에 data consistency를 안전하게 보장한다.

Motivation

현대 I/O stack의 성능이 빠르게 향상되면서, zero-copy I/O는 성능 최적화를 위한 핵심 기법으로 자리 잡았다. 하지만 여전히 많은 시스템에서는 data ownership을 안전하게 이전하기 위해 explicit copy가 사용되고 있으며, 이는 성능을 저해하는 주요 원인이다.

Importance

애플리케이션 개발자들은 구현의 단순성을 위해 memory copy를 많이 사용하는 경향이 있다. 기존의 zero-copy API는 interface complexity로 인해 실제 사용이 활발하지 않다. 실제 분석 결과, 대부분의 memory copy는 application-side에서 발생하고 있었으며, 이는 I/O stack-level zero-copy만으로는 performance gain이 제한적이라는 것을 보여준다.

Main Idea

Application이 사용하는 메모리는 보통 오브젝트의 일부분이다. 따라서 오브젝트 전체를 카피하는 것이 아니라 어플리케이션이 사용하는 부분만 카피하면된다.

Challenges

  1. 애플리케이션이 데이터의 어떤 부분을 실제로 참조할지는 사전에 예측할 수 없다. → 이를 해결하기 위해 zIO는 페이지 폴트(page fault)를 활용하여 on-demand 방식으로 복사를 수행한다.
  2. unaligned된 메모리 영역의 경우에는 페이지 폴트를 활용할 수 없다. → 따라서 이러한 영역은 사전에 복사하여 처리한다.
  3. 특히 Application이 사용하는 메모리를 Zero-Copy로 만드는 것은 memcpy에 사용되는 value size와도 큰 영향이 있다. Value size가 작으면, memcpy가 차지하는 overhead가 그리 크지 않지만, value size가 커질수록 memcpy를 최적화 함으로서 얻을 수 있는 이득이 커진다. 따라서 어떤 value size에서 memcpy를 최적화 할지 결정하는 것도 중요한 Optimization의 방향이 된다.

Design

zIO는 먼저 모든 페이지를 read-only로 매핑하여 초기 접근을 제한한다. 이후, memcpy와 같은 메모리 관련 시스템 호출을 후킹(hooking)하여, 아직 실제로 접근되지 않은 버퍼에 대해 read 또는 write가 수행되지 않은 포인터를 넘기도록 동작을 수정한다.

만약 애플리케이션이 해당 버퍼에 대해 read 또는 write를 시도할 경우, 해당 시점에서 실제 memcpy를 수행하며, 이 과정에서 userfaultfd가 사용된다. userfaultfd는 각 버퍼 페이지에 대해 timestamp를 기록하며, 나중에 해당 데이터를 정확히 재구성하는 데 활용된다.

최종적으로 write 호출이 발생하면, 각 버퍼에 저장된 timestamp 정보를 기반으로 버퍼의 원래 내용을 재구성하여, 올바른 데이터로 write를 수행한다.

한편, page granularity에 맞지 않는 비정렬 영역이 포함될 경우, 해당 영역은 사전에 복사하여 정렬된 페이지 단위로 변환하고, 이후 zIO의 page-based 추적 로직에 포함되도록 처리한다.

보다 자세한 timestamp 기반 추적 메커니즘은 논문에서 다루고 있으며, zIO는 이러한 사용자 수준 기법뿐 아니라 I/O 스택 전반에 적용 가능한 API 확장을 통해, 시스템 전체에서 memory copy 비용을 줄이기 위한 연구도 함께 수행하였다.

Conclusion

Userfaultfd를 효과적으로 사용하여서, memory copy를 줄이는 연구를 수행함. 어떻게 보면 checkpoint알고리즘인데, 이 checkpoint알고리즘을 적용시킬 수 있는 분야를 IO에서 찾아서, 효과적으로 merge한 논문이라는 생각이듬.