모든 이야기

NAND cache program이 cell 기록 시간 자체를 줄이는 것은 아니다

NAND에 네 page를 연속해서 쓸 때, 각 page의 data 전송이 끝나고 cell programming도 끝날 때까지 매번 기다리면 버스가 오래 비어 있을 수 있다. array가 셀에 전압 pulse를 가하는 동안 다음 page의 data를 받아 둘 수 있다면 전체 대기 시간을 줄일 수 있다. NAND Cache Program은 이런 겹침을 만드는 기능이다.

여기서 cache는 host의 자주 쓰는 파일을 저장하는 공간이 아니다. 다음 program data를 받는 내부 register다. 셀을 쓰는 물리 시간을 줄이기보다 data 입력과 array 작업 사이의 빈 시간을 줄인다.

다음 page를 받는 공간과 현재 page를 쓰는 공간

단순한 구조로 cache register와 data register를 구분해 보자. host가 cache register에 page A를 채우면 장치는 이를 data register로 넘긴다. data register의 내용을 array에 program하는 동안 cache register는 다음 page B의 입력을 받을 수 있다.

ONFI 5.2의 6.17절 Page Cache Program Definition은 array program을 background에서 수행하면서 host가 다음 page를 page register로 전달하는 기능을 정의한다. ISSI IS34/35ML01G081의 8.3절도 cache와 data register의 분리를 설명하며, 해당 부품에서는 cache program을 같은 block 안에서 사용하도록 제한한다.

지원하지 않는 NAND에 같은 command를 보내거나, 지원 여부만 보고 주소 제약을 생략할 수는 없다. cache-ready 상태에서 허용하는 다음 명령도 대상 문서에 정해져 있다.

두 단계의 시간선을 겹쳐 보기

가상 page 전송 시간은 100µs, array program 시간은 500µs라고 하자. register transfer와 command overhead를 생략하고 두 단계가 독립적으로 겹칠 수 있다고 가정한다.

일반적인 직렬 처리에서는 네 page가 각각 100+500µs를 쓰므로 총 2400µs다. cache program의 이상적인 시간선은 다르다.

pagehost 전송array program
A0–100µs100–600µs
B100–200µs600–1100µs
C600–700µs1100–1600µs
D1100–1200µs1600–2100µs

B는 A가 쓰이는 동안 미리 들어와 있지만, data register는 A가 끝나기 전까지 비지 않는다. 다음 array 작업은 600µs에서 시작한다. cache register가 B를 보관하는 동안 C까지 추가로 받을 공간이 있다고 가정하지 않았다.

총 시간은 100+4×500=2100µs다. 각 page의 array program은 여전히 500µs이고 줄어든 것은 전송 대기다. 충분히 긴 연속 작업의 page 간격은 이 모델에서 max(100,500)=500µs에 접근한다. 실제 성능은 tCBSY, data 크기, 지원 순서와 마지막 작업을 마치는 시간까지 포함해야 한다.

ready라는 한 단어가 두 완료를 숨긴다

cache register가 다시 입력을 받을 수 있는 상태와 array에 기록이 끝난 상태는 다르다. ONFI는 RDY와 ARDY를 구분한다. sequence를 15h로 끝내는 지원 방식에서는 RDY가 먼저 돌아와도 ARDY는 program 완료를 기다릴 수 있다. 10h로 마치는 방식은 미처 끝나지 않은 앞 page와 마지막 page를 마치는 시간을 포함한다.

따라서 cache-ready를 보고 “이 page는 전원 없이도 보존된다”거나 다른 임의 array command를 바로 실행하면 계약을 잘못 읽은 것이다. 다음 cache input이 허용된 것인지, 모든 outstanding program이 완료한 것인지 목적에 맞는 상태를 확인해야 한다.

실패 상태의 귀속도 확인한다. ONFI의 FAIL과 FAILC는 valid 시점과 어느 program 결과를 보고하는지가 다르다. pipelined command에서는 바로 앞에서 보낸 page 주소 하나만 기억하면 이전 page의 실패를 잘못 연결할 수 있다. 아직 완료하지 않은 작업과 결과 status를 함께 추적해야 한다.

겹칠 일이 적으면 이득도 작다

한 page만 쓰고 바로 결과를 요구하는 요청은 다음 page 입력과 겹칠 시간이 없다. 충분한 연속 data가 있어야 pipeline이 채워진다. host 전송이 program보다 훨씬 느리면 이번에는 bus가 병목이 되어 array가 기다린다. cache 개수만 늘린다고 느린 단계의 처리율을 넘지는 못한다.

긴 작업이라도 block 경계와 page program 순서, 중단 명령 때문에 겹침이 끊길 수 있다. 실제 workload를 평가할 때는 연속 page 수와 주소 적합성, 마지막 완료를 어디서 기다렸는지까지 정해야 한다.

NAND Cache Program의 성능을 이해하려면 page 하나의 program latency와 연속 page의 완료 간격을 구분하면 된다. array가 바쁜 동안 다음 data를 준비하는 기능이므로, 전송·register 가용성·array 완료를 따로 그린 시간선이 command 이름보다 정확하게 이득과 한계를 보여 준다.

NAND cache program이 cell 기록 시간 자체를 줄이는 것은 아니다 · ariser