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

Eden: Developer-Friendly Application-Integrated Far Memory

noriwiki
Ahn9807 (토론 | 기여)님의 2025년 6월 2일 (월) 01:51 판


Anil Yelam, Stward Grant, Saart Deshpande, Nadav Amit, Radhika Niranjan Mysore, Amy Osterhout, Marcos K. Aguilera, Alex C. Snoeren
2025 NSDI

개요

Far memroy system은 Harware paging에 의존하여서 Transparent하지만 성능저하가 있는 방식과, Application을 수정하여서 Transparent하지 않지만 성능을 보장하는 방식으로 나뉠 수 있다. Eden은 최소한의 Attnotation과 Hardware의 도움을 복합적으로 사용해서, 성능과 Application Modification에 따른 Developer efforts를 모두 보장시키는 새로운 방식을 제시하였다.

Motivation & Importance

Far-memory system은 Remote memory system으로 Local Dram이 아니라 Remote Memory Server에 데이터를 두는 시스템을 말한다. Far-memory system은 메모리 요구량이 많아지고, Network속도가 빨라지고 있는 현대 네트워크 아키텍쳐에서 중요한 역활을 담당한다. 기존의 Far-memory sytsem은 보통 두개의 방식을 채택하였다.

  • Paging-based (Infiniswap): Hardware guard에 의존하여서 Remote memory에 접근한다. 그러나 Page fault의 비용이 추가로 들고, 이를 극복하기 위해서 polling떄린다 하더라도 CPU Utilization이 추가로 생기는 문제가 발생한다. 또한 Application의 Semantic정보를 활용하지 못하기 때문에, 성능이 좋지 못하다.
  • App-integrated (AFIM): Software guard처럼 Application을 수정하여서 Application단에서 필요한 Memory를 가져오도록 한다. Application의 Semantic정보를 활용하여서 성능을 끌어올린 방식이다. 그러나 Application을 매우 많이 수정해야 하기 때문에 Developer efforts가 올라간다는 문제가 있다.

Main Idea

보통 Application에서 Page fault는 매우 소수의 Code에서 일어난다. 따라서 모든 Code base를 Annotation하는 것이 아니라, Programmer가 Page fault가 많이 일어남직한 부분에만 Annotation을 하도록 하여서, 그 부분은 App-integrated방식으로, 나머지 부분은 Hardware-based방식으로 처리하도록 하여서 성능을 끌어올릴 수 있다.

Design

hint_fault(
    /* basic hint */
    address,              /* faulting address or page */
    mut = false,          /* map read-only or writable */
    size = PAGE_SIZE,     /* size of the region */

    /* extended hint */
    rdahead = 0,          /* positive or negative read-ahead */
    ev_prio = 0,          /* eviction priority */
    seq = false           /* sequential access */
);
Semantic-aware prefetching and reclamation
Application의 Semantic을 반영하여서 Remote memory access를 최적화시켰다. 반영시키기 위해서 Hint API들을 사용하였다. 위의 코드는 Hint API를 나타낸 것이다. Hint는 Basic hint와 Extended hit로 구성된다. Application은 최소한 하나의 Basic hint를 제시해야 한다. Extended hint들은 Eden이 Prfetching과 Eviction에서 필요한 정보를 Application에서 넘겨받을 수 있도록 하였다.
Hinted-path and Unhinted-path
Hinted-path는 Hint를 통해서 마킹된 메모리 영역에 Page fault가 발생한 것으로 Software guard방식으로 Remote memory access를 체크한다. 만약 Memory fetch가 필요하면, User level에서 RDMA큐를 만드는 등의 Software based로 Remote memory access를 처리한다. Unhinted-path는 기존 AIFM과 같은 Default기능으로, Unhinted-path에 Page fault난 경우임으로 Userfaultfd를 이용하여서 커널이 Userlevel에 page fault가 일어났음을 통지하고 이를 통해서 Userlevel에서 처리하는 기능이다. Hinted-path는 Context switch가 같은 코어로 이루어지며, Software guard를 통해서 Context switch를 최소화 하였다. Unhinted-path는 다른 코어에서 일어나며 (Userfaultfd thread에서 일어남으로),
Vertorized Userfaultfd
Userfaultfd를 Vectorizing을 통한 Batching을 가능하도록 수정하여서, 보다 효율적으로 Page reclaim을 처리할 수 있도록 하였다. 또한 TLB Flush overhead도 Userfaultfd의 주요 오버헤드 중에 하나였는데, 이를 Batching을 통해서 처리하도록 하여서 TLB Flush로 인한 Scalability의 저하 문제도 해결하였다.

Evaluation

State of the Art인 Fastswap과 비교하였을때, 더 빠른 결과를 보여주었다.

Conclusion

Eden은 User-level semantic을 사용하기 위해서 Userfaultfd를 확장하였다. 기존에 DiLOS: Do Not Trade Compatibility for Performance in Memory Disaggregation와 같은 논문은 LibraryOS를 활용하는 연구들이었다는 점에서, Userfaultfd를 효율적으로 사용한 논문이 더 성능적, 그리고 Easy-to-use면에서 장점이 있을 것이다. 그러나 DiLOS와 같은 방식의 Prefetching알고리즘을 사용하였다는 점에서, Previous work에 대한 Related work이 좀더 명확히 있었으면 좋겠다는 생각이 든다.

Far-memory system에서 대부분의 Page fault들이 특정 소수의 코드 부분에 있음에 Motivation을 잡고 풀어갔다는 점에서 신선하였으며, 기존 논문들의 한계를 잘 잡고, 명확한 방식을 통하여 푼 논문이라고 생각한다.