Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ZIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO: Difference between revisions

From noriwiki
No edit summary
No edit summary
 
Line 1: Line 1:
[[분류: USENIX OSDI]]
[[분류: USENIX OSDI]]


Tim Stamler, Deukyeon Hwang, Amanda Raybuc, Wei Zhang, Simon Peter
{{Paper|title=zIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO|author=Tim Stamler, Deukyeon Hwang, Amanda Raybuc, Wei Zhang, Simon Peter|conference=USENIX OSDI 2022|pdf=https://www.usenix.org/system/files/osdi22-stamler.pdf}}
OSDI 2022


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


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


== Importance ==
== Importance ==
Application developer들은 간편하게 구현하기 위해서 copy를 많이 사용한다. 기존의 있는 zero-copy API와 같은 경우에는 complex한 API로 인해서 많이 사용되지 않고 있다. 또한 분석 결과 대부분의 Memroy copy는 Application-side에서 일어났다. 따라서 I/O stack에서만 Zero copy를 제공하는 것은 성능 향상에 부분적인 이점만 가져온다.
애플리케이션 개발자들은 구현의 단순성을 위해 memory copy를 많이 사용하는 경향이 있다.
기존의 zero-copy API는 interface complexity로 인해 실제 사용이 활발하지 않다.
실제 분석 결과, 대부분의 memory copy는 application-side에서 발생하고 있었으며,
이는 I/O stack-level zero-copy만으로는 performance gain이 제한적이라는 것을 보여준다.


== Main Idea ==
== Main Idea ==
Line 17: Line 20:


== Challenges ==
== Challenges ==
# Application이 데이터의 어느부분만을 참고하는지 미리 알 수 있는 방법이 없다. -> page fault를 이용하여 on-demand하게 카피함
[[파일:USENIX OSDI 2022 zIO Figure 1.png|섬네일]]
# Unalinged memory영역과 같은 경우에는 zIO가 사용할 page fault에 의존할 수 없다. -> unaligned영역은 그냥 카피함
# 애플리케이션이 데이터의 어떤 부분을 실제로 참조할지는 사전에 예측할 수 없다. → 이를 해결하기 위해 zIO는 페이지 폴트(page fault)를 활용하여 on-demand 방식으로 복사를 수행한다.
# unaligned된 메모리 영역의 경우에는 페이지 폴트를 활용할 수 없다. → 따라서 이러한 영역은 사전에 복사하여 처리한다.
# 특히 Application이 사용하는 메모리를 Zero-Copy로 만드는 것은 memcpy에 사용되는 value size와도 큰 영향이 있다. Value size가 작으면, memcpy가 차지하는 overhead가 그리 크지 않지만, value size가 커질수록 memcpy를 최적화 함으로서 얻을 수 있는 이득이 커진다. 따라서 어떤 value size에서 memcpy를 최적화 할지 결정하는 것도 중요한 Optimization의 방향이 된다.


== Design ==
== Design ==
우선 모든 페이지들을 Read-only로 매핑한다. 그후에, memcpy와 같은 시스템콜을 후킹해서 Read와 write이 없는 포인터를 넘겨주도록 수정한다. 만약 Application이 write나 Read를 수행하면 그때 memcpy를 수행한다. 이때 userfaultfd가 사용되며, userfaultfd는 각 버퍼들에 대한 timestamp를 가지고 있다. 최종적으로 버퍼를 write하는 순간이 오면 write에서 하나의 버퍼에 있는 모든 timestmamp들을 이용해서 버퍼를 재구성해 write을 수행한다. 또한 page granularity에 맞지 않는 페이지들이 들어오면, 그 부분은 미리 copy해서 모든 page들이 page granularity에 들어가도록 하였다.  
[[파일:USENIX OSDI 2022 zIO Figure 3.png|750px|섬네일|가운데]]
zIO는 먼저 모든 페이지를 read-only로 매핑하여 초기 접근을 제한한다. 이후, '''memcpy와 같은 메모리 관련 시스템 호출을 후킹(hooking)'''하여, 아직 실제로 접근되지 않은 버퍼에 대해 read 또는 write가 수행되지 않은 포인터를 넘기도록 동작을 수정한다.


구체적인 timestamp 매커니즘은 논문을 참고. 또한 zIO는 User-level 뿐만 아니라 IO stack에 API를 적용시켜서 전체적으로 IO stack에서 copy코스트를 줄이는 연구도 수행하였다.
만약 애플리케이션이 해당 버퍼에 대해 read 또는 write를 시도할 경우, 해당 시점에서 실제 '''memcpy를 수행하며, 이 과정에서 userfaultfd가 사용'''된다. userfaultfd는 각 '''버퍼 페이지에 대해 timestamp를 기록'''하며, 나중에 해당 데이터를 정확히 재구성하는 데 활용된다.
 
최종적으로 write 호출이 발생하면, 각 버퍼에 저장된 timestamp 정보를 기반으로 버퍼의 원래 내용을 재구성하여, 올바른 데이터로 write를 수행한다.
 
한편, page granularity에 맞지 않는 비정렬 영역이 포함될 경우, 해당 영역은 사전에 복사하여 정렬된 페이지 단위로 변환하고, 이후 zIO의 page-based 추적 로직에 포함되도록 처리한다.
 
보다 자세한 timestamp 기반 추적 메커니즘은 논문에서 다루고 있으며, zIO는 이러한 사용자 수준 기법뿐 아니라 I/O 스택 전반에 적용 가능한 API 확장을 통해, 시스템 전체에서 memory copy 비용을 줄이기 위한 연구도 함께 수행하였다.


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

Latest revision as of 07:13, 17 July 2025


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한 논문이라는 생각이듬.