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


Tim Stamler, Deukyeon Hwang, Amanda Raybuc, Wei Zhang, Simon Peter
OSDI 2022

개요

zIO는 transparent한 zero-copy IO를 제공한다. zIO는 IO데이터를 추적하여, 불필요한 copy를 없애고, 동시에 data consistency를 보장하였다.

Motivation

점차 성능이 빨라지는 IO Stack에서 Zero-copy IO는 성능을 위해서 많이 사용된다. 하지만 data에 대한 Ownership을 안전하게 넘기기 위한 방법으로 copy도 계속 많이 사용되고 있다.

Importance

Application developer들은 간편하게 구현하기 위해서 copy를 많이 사용한다. 기존의 있는 zero-copy API와 같은 경우에는 complex한 API로 인해서 많이 사용되지 않고 있다. 또한 분석 결과 대부분의 Memroy copy는 Application-side에서 일어났다. 따라서 I/O stack에서만 Zero copy를 제공하는 것은 성능 향상에 부분적인 이점만 가져온다.

Main Idea

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

Challenges

  1. Application이 데이터의 어느부분만을 참고하는지 미리 알 수 있는 방법이 없다. -> page fault를 이용하여 on-demand하게 카피함
  2. Unalinged memory영역과 같은 경우에는 zIO가 사용할 page fault에 의존할 수 없다. -> unaligned영역은 그냥 카피함

Design

우선 모든 페이지들을 Read-only로 매핑한다. 그후에, memcpy와 같은 시스템콜을 후킹해서 Read와 write이 없는 포인터를 넘겨주도록 수정한다. 만약 Application이 write나 Read를 수행하면 그때 memcpy를 수행한다. 이때 userfaultfd가 사용되며, userfaultfd는 각 버퍼들에 대한 timestamp를 가지고 있다. 최종적으로 버퍼를 write하는 순간이 오면 write에서 하나의 버퍼에 있는 모든 timestmamp들을 이용해서 버퍼를 재구성해 write을 수행한다. 또한 page granularity에 맞지 않는 페이지들이 들어오면, 그 부분은 미리 copy해서 모든 page들이 page granularity에 들어가도록 하였다.

구체적인 timestamp 매커니즘은 논문을 참고. 또한 zIO는 User-level 뿐만 아니라 IO stack에 API를 적용시켜서 전체적으로 IO stack에서 copy코스트를 줄이는 연구도 수행하였다.

Conclusion

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