추가 전용 저장소는 무작위 갱신을 순차 쓰기로 바꿉니다. 이전 버전은 불변 로그 파일 안의 가비지가 됩니다. 일반 가비지 컬렉션은 파일을 고르고, 살아 있는 레코드를 다른 곳으로 복사하고, 원본을 삭제합니다. 회수를 공격적으로 할수록 할당 용량은 줄지만 유효 데이터를 더 많이 다시 쓰므로 공간 증폭과 쓰기 증폭이 반대 방향으로 움직입니다.
ByteDance의 저장 계층은 이 손익을 확대합니다. 상위 서비스가 논리 파일을 ByteStore 세그먼트와 청크에 매핑하고, 하위 파일시스템과 SSD도 각자 다른 단위로 공간을 할당합니다. 유효 바이트 복사는 네트워크, CPU, 디스크 대역폭, 플래시 수명을 사용하고, 가비지를 남겨 두면 구매한 용량을 사용합니다. 운영 정책은 전경 입출력의 꼬리 지연을 늘리지 않으면서 두 비용의 합을 줄여야 합니다.
DisCoGC는 두 번째 회수 경로로 discard를 도입합니다. 오래된 논리 범위가 충분히 크고 정렬 조건을 만족하면 인접한 유효 데이터를 옮기지 않고 하위 공간을 미사용으로 표시합니다. 작거나 흩어진 가비지는 계속 압축이 처리합니다. 연구의 핵심은 trim 명령 자체가 아니라 여러 할당 계층을 가로지르며 범위를 안전하게 회수하는 조정 구조입니다.
서로 다른 경계를 통과하는 discard
BlockServer는 로그 메타데이터를 스캔하며 무효 범위를 찾습니다. ByteStore를 통해 비동기 discard를 파일시스템에 보내면 파일시스템이 구멍을 만들거나 익스텐트 할당을 해제합니다. SSD도 해당 논리 블록 주소의 trim을 받으면 장치 내부 GC에서 오래된 물리 페이지를 옮기지 않아도 됩니다.
각 계층은 요청을 서로 다른 단위로 반올림합니다. LogFile에 맞춘 범위가 삭제 코딩 스트라이프, 청크 클러스터, 파일시스템 익스텐트, SSD 단위와 어긋날 수 있습니다. 논문의 예시는 경계 손실을 합하면 회수 가능한 공간의 절반 이상이 남는 경우를 보여 줍니다. 작은 요청을 많이 보내면 메타데이터도 반복 갱신되며, 어떤 SSD의 trim IOPS는 쓰기 IOPS의 일부에 불과합니다.
DisCoGC는 새 discard 범위를 이미 폐기한 인접 범위 쪽으로 조금 확장합니다. 오래된 공간에 같은 명령을 다시 적용해도 안전하므로, 이전 요청의 경계에 갇힌 가비지를 다음 요청이 회수할 수 있습니다. 삭제 코딩 배치도 폐기 단위가 완전한 스트라이프를 덮도록 조정해 부분 클러스터가 계속 할당되는 문제를 줄입니다.

전경 서비스를 보호하는 배치와 흐름 제어
하나의 discard가 같은 LogFile의 여러 범위를 포함하면 하위 저장소가 할당 메타데이터를 한 번만 갱신할 수 있습니다. 요소별 평가에서 배치 크기 64는 실제 처리한 폐기 가능 바이트 비율을 거의 1까지 올렸고, 최초 discard 경로에 더해 논리 쓰기 증폭을 2.7%에서 11.7% 추가로 줄였습니다.
병렬도와 IOPS 제한은 스캔이나 쓰기 버스트가 하위 계층을 압도하지 않게 합니다. 회수 가능 범위가 큰 작업을 우선 처리하면서 흐름 제어가 trim 수요를 제한합니다. Discard가 밀리면 가비지가 쌓여 LogFile의 가비지 비율이 올라가고 결국 압축 대상이 됩니다. 이 대체 경로는 discard를 유일한 수집기로 가정하지 않고 진행을 보장합니다.
시스템은 요청한 범위와 완료한 범위를 쓰기 전 로그에 기록하며, 장애 뒤에는 요청했지만 완료를 확인하지 못한 범위를 복원해 다시 시도합니다. 같은 무효 범위를 다시 폐기해도 안전하므로 재시도할 수 있습니다. 비트맵은 모든 성공 단위를 기록하지 않고 실패나 차이만 압축하며, 보고된 최적화는 비트맵 크기를 25%에서 45% 줄였습니다.
전경 격리는 우연한 결과가 아니라 설정 목표입니다. 운영자는 최대 배치 크기, 동시 요청 수, discard IOPS를 조정해 최악의 CPU 증가를 2% 아래로 제한합니다. 논문의 설정에서 평균 CPU 오버헤드는 1.2%, 일반적인 배치 크기는 약 10이었습니다. 버스트가 임계값에 도달하면 일부 작업이 압축으로 넘어가 자원 사용 상한을 지킵니다.
적합한 작업을 가르는 운영 추적
ByteDance는 온라인, 순차 추가·재쓰기(SAR), 오프라인 추적을 분석했습니다. 온라인 추적은 쓰기의 60% 이상이 4KiB였고 256KiB를 넘는 비율은 12%뿐이었습니다. SAR은 256KiB 초과가 65%, 4KiB가 15%였습니다. 큰 순차 덮어쓰기는 discard가 효율적으로 회수할 수 있는 연속 무효 범위를 만들지만, 무작위 갱신은 가비지를 작은 조각으로 흩어 놓습니다.
혼합 운영 작업에서는 무효 범위의 90% 이상이 128KiB를 넘고 70% 이상이 1MiB를 넘었습니다. 이 분포가 결과를 설명합니다. DisCoGC는 논리 쓰기 증폭을 32% 줄였고 공간 증폭은 1.37에서 1.23으로 내려가 10% 감소했습니다. 일부 조건에서 SSD 내부 물리 쓰기 증폭은 최대 10% 늘었지만 합산 쓰기 증폭은 25% 줄었습니다.
저자들은 운영 클러스터의 총소유비용이 20% 줄어든 것으로 추정합니다. 관찰 기간의 TiB당 대역폭, 평균 지연, p99 지연은 사실상 바뀌지 않았습니다. TCO는 용량 및 쓰기 비용으로 만든 모델이며 모든 사업자의 실제 청구액이 같은 비율로 줄어든다는 뜻은 아닙니다. 장비 가격, 복제, 전력, SSD 수명, 예비 용량이 가중치를 바꿉니다.
추적 재생에서는 모든 작업의 공간 증폭과 논리 쓰기 증폭 곡선이 왼쪽 아래로 이동했습니다. SAR의 예상 TCO 절감은 25%를 넘었습니다. 조각난 온라인 추적은 이점이 가장 작았고, 압축 전용으로 대체되는 조건에서도 저자들은 2%에서 5%의 절감을 추정했습니다. 다만 완전히 무작위이고 조각난 작업에는 구현 비용만큼 효과가 없다고 명시합니다.
호스트 쓰기를 줄이고 장치 쓰기를 늘릴 수 있는 경로
논리 쓰기 증폭은 분산 저장소가 다시 쓴 바이트를, 물리 쓰기 증폭은 SSD 내부에서 발생한 NAND 작업을 셉니다. Discard는 호스트의 이후 유효 데이터 복사를 줄이지만 논리 주소 공간에 구멍을 만들어 장치 GC를 더 자주 일으킬 수 있습니다. 논문 측정에서는 설정에 따라 이 효과가 물리 증폭을 2%에서 10% 높였습니다.
Trim은 플래시 변환 계층에 죽은 페이지를 알려 장치 비용의 일부를 다시 줄입니다. 평가한 PCIe SSD 한 모델에서는 trim을 켰을 때 물리 증폭이 1.4에서 1.3으로 낮아졌지만 청크 삭제 지연이 600마이크로초 늘었습니다. 삭제 경로가 전경 병목은 아니었습니다. 다른 모델은 trim 한계가 달랐으므로 호스트 정책은 펌웨어 동작이 같다고 가정할 수 없습니다.
Trim 필터는 장치 비용을 감당할 가치가 없는 작은 범위를 버리고, 병합기는 인접 논리 범위를 합칩니다. 임계값은 trim IOPS가 장치 최대치의 85% 아래에 머물도록 조정합니다. 필터만 사용하면 오래된 페이지가 더 남아 물리 쓰기가 증가할 수 있고, 병합은 모든 조각을 보내지 않으면서 요청 효율을 높입니다.
이처럼 계층에 따라 증감 방향이 바뀐다는 점이 중요한 경고입니다. 논리 쓰기만 표시하는 대시보드는 NAND 마모가 늘어도 성공으로 판단할 수 있습니다. 도입 시험은 호스트 읽기·쓰기 바이트, 할당 용량, 파일시스템 discard 완료, SSD trim IOPS, 장치 물리 증폭, 수명 소모를 같은 시간축에서 봐야 합니다.
수집기의 판단 경계를 바꾸는 결합 정책
압축과 discard는 서로 보완합니다. Discard는 크고 연속적인 가비지에는 싸지만 경계와 요청 한계에서 효율을 잃습니다. 압축은 조각을 처리하고 유효 데이터를 모으지만 복사 비용이 듭니다. DisCoGC는 자주 실행하는 가벼운 discard로 평상시 압력을 낮추고, 남은 가비지가 임계값을 넘으면 압축을 예약합니다.
요소별 평가는 각 기여를 수치로 나눕니다. Discard와 흐름 제어를 추가하면 논리 증폭이 8.4%에서 13.9% 줄었고, 배치는 2.7%에서 11.7%를 더 줄였습니다. 경계 확장은 다시 5.5%에서 16.1%를 낮췄습니다. 해당 추적 조건에서 전경 대역폭과 지연은 안정적이었습니다. 이 증가분은 독립적인 보편 상수가 아니라 범위 분포와 할당 구조에 따라 달라집니다.
운영자는 먼저 무효 범위 히스토그램을 만들고 논리 파일부터 삭제 코딩, 청크 저장, 파일시스템, SSD까지 모든 할당 단위를 매핑해야 합니다. 회수 가능 바이트 대부분이 큰 범위에 있으면 discard 경로를 검토할 수 있습니다. 최소 유효 범위 아래에 몰려 있다면 압축 최적화나 쓰기 배치 변경이 더 가치 있습니다.
장애 시험은 범위 발견, 쓰기 전 로그 기록, 하위 할당 해제, 완료 기록 사이의 모든 지점에서 중단해야 합니다. 권한 있는 계층이 완료를 확인하기 전에 폐기 공간을 재사용 가능으로 노출해서도 안 됩니다. 암호화와 삭제 코딩은 부분 discard가 아직 살아 있는 데이터를 복구 불가능하게 만들지 않는지 검증해야 합니다.
조정 비용보다 복사 절감이 클 때 낮아지는 TCO
DisCoGC는 오래된 블록 명령도 범위 소유권, 장애 복구, 배치, 장치 한계를 명시하면 클라우드 저장 원시 기능이 될 수 있음을 보여 줍니다. 운영 TCO 20% 절감 추정은 큰 무효 범위가 많은 유리한 혼합 작업을 바탕으로 합니다. 설계가 압축을 유지하는 이유는 어떤 discard 정책도 이미 흩어진 가비지를 연속 범위로 바꿀 수 없기 때문입니다.
따라서 구매와 설계의 질문은 SSD가 trim을 지원하는지가 아닙니다. 전체 계층이 충분히 큰 무효 범위를 노출하고, 펌웨어 한계 아래에서 명령을 처리하며, 논리 및 물리 결과를 함께 측정할 수 있는지가 핵심입니다. ByteDance의 결과는 이러한 조정으로 지연 증가 없이 전체 쓰기를 25% 줄일 수 있음을 보여 주며, 추적 분석은 같은 개발이 이득을 내지 못하는 조건도 함께 제시합니다.
출처와 저작권 안내
이 글은 Silicon & Systems의 편집 분석입니다. 운영 설계, 측정값, 한계를 자체 문장으로 재구성했습니다. 원문의 문장, 표, 도판을 복제하지 않았으며 본문 도판은 이 글을 위해 새로 만들었습니다. 논문은 USENIX FAST 2026 발표 페이지에서 확인할 수 있습니다. 저작권은 저자에게 있으며 연도는 2026년입니다.