손성배 군은, “Guaranteeing the Metadata Update Atomicity in EXT4 Filesystem” 논문 발표 및 역량 증진을 위하여 APSys 2017에 참석하였다.
APSys는 ACM SIGOPS에서 주관하는 국제학술대회로서 1년에 한번 씩 개최된다. APSys는 시스템과 관련된 연구 및 개발 주제를 다룬다. APSys에서 다루는 주요 주제로는 Operating systems, virtualization, distributed systems, network, system security, mobile and embedded systems, cloud computing, many-core and muti-core systems가 있다. 이와 같이 APSys는 시스템 분야의 SW부터 HW까지 다양한 주제를 다루고 있다.
이번 출장을 통해 컴퓨터 및 모바일 시스템을 연구하는 학생들과 연구원들을 만날 수 있었고, 서로 의견을 나누면서 시스템 분야의 연구 동향을 알 수 있었다. 특히 본인의 연구 분야인 파일 시스템 및 입출력 스택 최적화를 주제로 FAST와 ATC 등 메이저 학회에 논문을 게재했던 저자들과 만나 서로의 연구에 대해 의견을 주고 받으면서 많은 것을 배울 수 있었다.
발표된 논문 중 3개의 논문이 흥미로웠다.
첫 번째는 성균관대학교에서 발표한 논문인 “TO FLUSH or NOT: Zero Padding in the File System with SSD Devices”이다. TO FLUSH or NOT 논문은 낸드 플래시 스토리지를 사용하는 시스템에서 제로 패딩과 TRIM 명령어를 이용하여 FLUSH 명령어를 대체하는 기법을 제안하였다. 대부분의 파일 시스템은 FLUSH 명령어를 사용하여 데이터를 디스크 표면에 반영한다. 그러나, FLUSH 명령어는 낸드 플래시 기반 스토리지의 경우 write buffer에 있는 데이터뿐만 아니라 L2P 매핑 테이블을 낸드 플래시 표면에 기록하기 때문에 전체 입출력 성능을 상당히 감소시킨다. 이러한 FLUSH 오버헤드를 제거하고자 본 논문은 FLUSH 명령어를 발행하는 대신에 낸드 플래시 스토리지의 write buffer의 크기만큼 ‘0’으로 채워진 데이터를 기록하고, ‘0’으로 채워진 데이터에 대해 TRIM 명령어를 수행한다. Write buffer 크기만큼의 제로 패딩 데이터를 기록하면, 쓰기 버퍼의 공간 부족으로 인해 이전에 발행된 쓰기 데이터들은 write buffer에서 실제 낸드 플래시 메모리에 반영된다. 이후 TRIM 명령어를 통해 제로 패딩된 데이터가 낸드 플래시 표면에 기록되지 않도록 함으로써 기존 ext4 저널링에서 사용되는 FLUSH 명령어를 대체하였다. 본 논문은 ext4-zp의 실험을 삼성 128GB 삼성 850PRO에서 수행하였으며, 테스트 프로그램의 수행을 통해 128GB 삼성 850PRO 쓰기 버퍼의 크기가 2.3MB라는 것을 확인하였다. Ext4-zp을 검증하기 위해 기존 ext4 저널 커밋 시 발생하는 FLUSH 명령어(Ordered mode)를 2.3MB의 제로 패딩 데이터를 발행하고 TRIM 명령어를 통해 제로 패딩 데이터가 낸드 플래시에 반영되지 않도록 대체하였다. FIO 실험 결과 ext4-zp이 ext4 ordered 저널링 모드 대비 최대 25% 향상된 성능을 제시하고 있다.
질문 : 제로 패딩 데이터 쓰기와 TRIM 명령어를 이용하더라도 쓰기 버퍼에 있는 데이터가 낸드 플래시 메모리에 반영될 때까지 저널 커밋 동작은 지연 됩니다. 제로 패딩+TRIM 명령어가 FLUSH 명령어 대비 성능 향상이 있는 이유가 궁금합니다.
답변 : 쓰기 버퍼의 공간 부족으로 안한 데이터 추출 (EVICTION) 시에는 쓰기 데이터만 플래시 메모리에 반영되며 데이터의 FTL 매핑 정보는 플래시 메모리로 즉시 반영되지 않기 때문입니다.
두 번째 논문은 서울대학교에서 발표한 논문인 “Improving User Experience of Android Smartphones Using Foreground App-Aware I/O Management”이다. 해당 논문은 안드로이드 스마트폰에서 foreground 애플리케이션의 I/O를 우선적으로 처리함으로써 유저 애플리케이션의 응답 속도를 단축시키는 FAIO (foreground app-aware I/O management) 기법을 제안한다. 멀티-태스킹 환경에서 foreground 애플리케이션은 background 애플리케이션에 의해 지연될 수 있다. FAIO는 foreground 애플리케이션의 응답성을 향상시키기 위해 FG App Detector, FG Page Manager, 그리고 PG I/O Dispatcher의 새로운 세 가지 기법을 안드로이드 플랫폼, 페이지 캐시, 그리고 블록 계층에 각각 적용하였다. 안드로이드 플렛폼에서 동작하는 FG App Detector는 foreground 애플리케이션의 UID 정보를 FG Page Manager로 전달한다. FG Page Manager는 FG App Detector로부터 전달 받은 애플리케이션 정보를 이용해서 foreground I/O가 페이지 캐시에 도달했을 때 background I/O를 선점하도록 한다. FG I/O Dispatcher는 foreground 애플리케이션에서 발행된 입출력 요청(bio)을 우선적으로 디스패치 큐에 삽입하는 역할을 한다. FG I/O Dispatcher는 CFQ 스케줄러의 sync 큐와 async 큐를 확인하고, foreground 애플리케이션에 의해 발행된 요청(FG BIO)가 있으면 해당 요청은 즉시 디스패치 큐에 삽입한다.
세 번째 논문은 “FLSCHED: A Lockless and Lightweight Approach to OS Scheduler for Xeon Phi”이다. 해당 논문은 락 개수와 컨텍스트 스위치 횟수를 최소화한 매니코어 시스템용 프로세스 스케줄러 FLSCHED를 제안한다. 리눅스 기본 프로세스 스케줄러인 CFS는 fairness를 보장하기 위해 많은 개수의 락과 잦은 컨텍스트 스위치가 발생한다. 따라서, Xeon Phi와 같은 매니코어 프로세서에서는 이러한 락의 사용과 잦은 컨텍스트 스위치가 전체 시스템 성능에 상당한 병목이 된다. FLSCHED는 매니코어 환경에서 프로세스 스케줄러에서 발생하는 병목을 최소화 하고자 CFS 대비 락의 개수와 컨텍스트 스위치 횟수가 대폭 줄어 들었다. Xeon Phi를 사용할 경우 CFS 코드에서는 총 11개의 락이 사용되지만, FLSCHED는 락을 전혀 사용하지 않는다. 11개의 락은 런타임 통계, 코어의 로드 밸런스, 그리고 대역폭 제어 메커니즘에 사용된다. FLSCHED는 Xeon Phi에서 스케줄링을 결정할 때 이러한 통계 값들이 중요하지 않기 때문에 런타임 통계에 사용되는 락을 제거하였고, 최대 CPU 대역폭을 제공하기 위해 로드 밸런스와 대역폭 제어를 위해 사용되는 락도 제거하였다. 또한, FLSCHED는 스케줄링 동작에서 작업의 우선순위에 의해 발생하는 선점을 제거함으로써 컨텍스트 스위치 횟수를 줄인다. 선점이 필요할 때 FLSCHED는 즉시 선점을 수행하는 대신에 해당 태스크를 런큐에 삽입하여 이후 프로세스 스케줄러에 의해 컨텍스트 스위치 되도록 한다. 논문에서는 FLSCHED가 CFS 스케줄러 대비 HPC 애플리케이션과 마이크로 벤치마크에서 각각 1.73배 그리고 3.12배로 성능이 향상되었음을 나타내고 있다.
이번 학회를 통해서 시스템 분야의 동향을 파악할 수 있었고, 연구 분야가 비슷한 사람들과 의견을 나누면서 시스템 분야의 새로운 지식들을 습득할 수 있는 좋은 기회였다. 또한, 연구하는데 있어 연구 분야의 논문들을 계속해서 찾아보고 읽는 것이 얼마나 중요한지 다시 한 번 깨달을 수 있었다.