[ Laboratory ]/System Software & Storage17 The Importance of Data Placement Policies in Reducing Write Amplification Caused by Garbage Collection (GC로 인한 쓰기 증폭 완화 측면에서의 데이터 배치 정책 중요성) waf 감소를 위해서는 gc 최적화도 중요하지만 가장 중요한 것은 데이터 플레이스먼트 정책! 데이터 배치 정책의 핵심은 비슷한 인벨리드 타임의 데이터 블록끼리 그룹핑하는 것이다데이터 블록의 예상 인벨리드 타임을 추정하고 비슷한 시간대의 블록을 포함하고 있는 세그먼트로 할당하다보면 같은 세그먼트에 있는 데이터 블록들은 비슷한 시점에 인벨리드 되는 블록들일 것이다. 모든 블록이 같은 시점에 인벨리드 되면 해당 세그먼트는 데드 세그먼트가 되므로 데드 세그먼트가 생성된 경우 gc를 수행할 때 라이브 블록이 재배치를 위해 복사될 일이 없다. 그래서 추가적인 쓰기가 일어나지 않고 waf가 감소하는 것이다. 데이터 블록의 인벨리드 타임을 예상하고 같은 시점의 블록끼리 그룹핑하여 세그먼트를 만들면 데드 세그먼트를 .. 2025. 2. 28. GC (Garbage Collection) 최적화 기법 (CAT, AutoStream, MiDA, SepBIT, MiDAS) Garbage Collection을 최적화 시키는 방법 중 GC가 데이터를 이동시키는 과정에서 발생하는 쓰기 증폭 Write Amplification Factor WAF를 줄이기 위해 설계된 기법 다섯 가지의 주된 특징 비교 CATMei-Ling Chiang and Ruei-Chuan Chang. Cleaning Policies in Mobile Computers Using Flash Memory. Journal of Systems and Software, 48(3):213–231, 1999. AutoStreamJingpei Yang, Rajinikanth Pandurangan, Changho Choi, and Vijay Balakrishnan. AutoStream: Automatic stream ma.. 2025. 2. 28. [FS] GC / WAF / WAF를 계산할 때 (총 블럭 수 - 유저가 작성한 블럭 수)로 계산하지 않는 이유 쓰기 증폭(Write Amplification)은 Flash 기반 SSD, NAND 메모리, 로그 구조 파일 시스템에서 필수적인 과정인 Garbage Collection(GC)으로 인해 발생하는 현상이다. GC는 스토리지 내부에서 벨리드한 데이터를 재배치하고 삭제된 데이터를 정리하여 새로운 쓰기 공간을 확보하는 과정이다. 이 과정에서 사용자가 요청한 데이터 쓰기보다 더 많은 블럭이 내부적으로 쓰이게 되는데, 이를 쓰기 증폭이라고 한다. 즉, 한 번의 사용자 쓰기 요청이 여러 번의 추가 쓰기를 유발하는 것이다. 쓰기 증폭이 발생하는 주요 원인은 두 가지! 첫 번째는 Garbage Collection 과정이다. 스토리지는 데이터를 세그먼트 단위로 관리하는데, 가비지 블럭이 포함된 세그먼트가 GC 대상으로 선.. 2025. 2. 28. [I/O] I/O Software Stack of High Performance Computing Systems I/O sw stack of HPCHPC : high performance computing I/O SW stack데이터 입출력 흐름에서 효율성을 극대화 하기 위해 멀티 레이어로 설계application layer - 사용자 애플리케이션이 데이터 입출력을 요청- 데이터 집약적인 작업을 수행하는 애플리케이션이 속함high level I/O libraries- 애플리케이션 개발자가 데이터 입출력을 더 쉽게 처리하도록 추상화 제공- 계층적 포맷으로 저장하는 기능, 대규모 병렬 데이터 처리 기능- HDF5, NetCDF, ADIOSparallel I/O middleware- 데이터 병렬화 관리 > 대규모 애플리케이션이 동시에 입출력 수행 가능- 여러 노드에서 데이터 동시 처리 > 성능 극대화- MPI-IOlow.. 2024. 11. 22. [SPDK/NVMe] NVMe PCI 버스 인식 문제 ( nvme list에 보이지 않음 ) 사용 중인 서버에 분명 nvme를 붙였음에도 nvme list를 조회하면 보이지 않는다 PCI 버스에 연결된 nvme가 제대로 인식되지 않는 것 같아서강제로 제거했다가다시 스캔하는 명령어를 수행했다 나는 이전에 nvme pci 주소를 조회한 적이 있기 때문에기억하고 있는 pci 주소를 직접 입력하는 방식으로pci 장치를 강제 제거 했다가 rescan 했다 다시 nvme list를 조회하니 제대로 인식된다 !!성공 !!삼성 ssd 990 pro 1tb를 사용 중이고/dev/nvme0n1으로 인식된다 2024. 10. 10. [SPDK/examples] nvme/hello_world 예제 수정 및 실행 spdk/examples/nvme/hello_world/hello_world.c 의 코드를 실행해보았다 spdk/build/examples 에 있는 실행 파일로 실행하면이런 결과 화면이 출력되는데 작동 흐름을 확인하기 위해 코드에 출력문을 추가해서 빌드해보겠다 내 필요에 맞게 수정한 후에 clean 한 후 다시 make 해주고 다시 build로 이동해서 파일을 실행하면성공 !!! 임시 테스트용 실행이기 때문에 세부적인 코드 흐름 분석은 blob- bdev 분석 후에 업로드할 예정이다 2024. 10. 10. 이전 1 2 3 다음 728x90