NAND 내부 copyback이 오류까지 빠르게 복사하는 이유
NAND 내부에서 page를 다른 위치로 복사하면 host 쪽으로 data를 내보내고 다시 받는 시간을 줄일 수 있다. 그런데 복사가 성공한 뒤 새 page에 이전 읽기 오류까지 남을 수 있다. NAND Copyback은 빠른 data 이동 경로인 동시에, 어느 위치에서 correction이 적용되는지 확인해야 하는 경로다.
array에서 읽힌 bits를 곧바로 새 array에 program하는 구성이라면, source sensing의 오류는 destination에 실제 기록된 bit로 바뀔 수 있다. 복사 속도가 빨랐다는 사실은 원본 복원 여부를 알려 주지 않는다.
correction 경로를 지나지 않는 복사
Errors in Flash-Memory-Based Solid-State Drives, 3.2절 Program Errors은 copyback이 SSD controller를 거치지 않고 내부에서 읽은 data를 다시 program하는 사례를 다룬다. controller 쪽 ECC가 중간 오류를 정정하지 못해 새로운 program error가 생길 수 있다는 설명이다.
이 사례의 핵심은 모든 NAND copy 명령에 ECC가 없다는 선언이 아니다. on-die correction을 사용하는 제품이나 controller가 확인 단계를 추가하는 구현도 있을 수 있다. 실제 source read에서 무엇이 정정되어 destination으로 전달되는지를 command와 data path 문서에서 확인해야 한다.
일반 read에서 host가 받는 data에 ECC가 적용된다는 정보만으로 internal copy 경로에도 같은 correction이 들어간다고 가정할 수는 없다. 서로 다른 경로를 검증하고 있다는 점을 먼저 구분한다.
작은 bit열에서 오류가 고정되는 과정
원래 data가 10110010인데 source sensing 결과가 10100010이었다고 하자. 네 번째 bit 하나를 잘못 읽은 가상 예다. 내부 buffer가 이 잘못된 bit열을 destination에 program하면 destination의 정상 read도 10100010을 돌려줄 수 있다. destination program 자체가 성공해도 원본과는 다르다.
가상의 controller ECC 경로를 거쳐 이 single-bit error를 복원한 뒤 복사한다면 destination에는 10110010을 기록할 수 있다. 단, 원래 오류가 해당 code의 correction 범위 안에 있고 parity와 data가 일관되어 있으며 다른 오류가 없다는 조건이다.
parity를 어떻게 옮기는지도 결과를 바꾼다. 원래 parity와 잘못 읽은 data를 함께 옮기면 destination에서 ECC가 오류를 발견하거나 정정할 가능성이 남을 수 있다. 반대로 이미 잘못된 data를 기준으로 새 parity를 만들면 bit열 자체는 새로운 codeword와 일치할 수 있어 원래 의미의 손상을 감지하기 어렵다. 이것은 실제 부품의 동작을 단정한 것이 아니라 두 경로를 구분한 논리적 사례다.
복사를 반복하면 새 위치도 영향을 받는다
새 block으로 이동하면 이전 셀에 쌓인 wear·retention 상태에서 벗어날 기회가 생긴다. 하지만 전달할 내용을 복원하지 않았다면 잘못된 value도 함께 이동한다. 다음 copy 과정이 추가 오류를 만들면 현재 위치의 상태만 보고 원래 data를 추적하기 더욱 어려워질 수 있다.
가상 correction 한계를 8bit라고 하자. 첫 copy가 서로 다른 위치에 오류 3개를 남기고 다음 copy가 기존 오류를 없애지 않은 채 새 오류 4개를 더하면 총 7개다. 다시 서로 다른 오류 2개가 추가되면 9개다. 이 단순 예에서는 제한을 넘는다.
현실의 누적 오류가 copy 횟수에 따라 이런 선형 법칙으로 늘어난다는 뜻은 아니다. 같은 bit에서 오류가 겹치거나 사라질 수도 있고, decoder의 성공 조건도 단순 개수와 다를 수 있다. 예가 보여 주는 것은 correction 없이 전달한 오류가 새 media 상태에 흡수될 수 있다는 점이다.
절약한 전송 시간의 범위를 보기
가상 page size가 4096byte이고 controller와 NAND 사이의 유효 data rate가 200MB/s라면, 밖으로 읽고 다시 쓰는 payload 전송은 2×4096/200,000,000=40.96µs다. 내부 copy로 이 왕복을 피할 수 있다면 그 부분이 절약 대상이다.
array read와 program 시간, command overhead, 내부 register transfer는 이 계산에서 빠졌다. 따라서 copyback이 전체 복사 시간을 40.96µs로 만든다거나 실제 장치가 그만큼 빨라진다는 측정 결론은 아니다. 주소·plane 제약과 correction·검증 비용도 최종 시간선에 들어간다.
NAND Copyback의 효율은 data 이동을 줄이는 데서 온다. 신뢰성은 다른 조건이다. source sensing 이후 어떤 bits가 정정되고, 그 bits와 parity가 destination에 어떻게 기록되는지를 확인해야 빠른 복사가 원래 내용을 지킨 복사인지 판단할 수 있다.