모든 이야기

NAND die를 늘려도 한 page의 첫 읽기 지연은 줄지 않는 이유

NAND die를 네 개 쓰면 읽기가 네 배 빨라질까? 대기 중인 page가 여러 개라면 처리량이 크게 늘 수 있다. 하지만 그중 한 page를 처음 읽어 오는 시간은 거의 그대로일 수 있다. NAND Die Interleaving은 하나의 읽기를 잘게 나누는 기술보다, 서로 다른 읽기의 내부 대기 시간을 겹치는 방식으로 이해하는 편이 정확하다.

이 차이를 보려면 두 자원을 나누어야 한다. 셀 배열에서 page를 내부 buffer로 옮기는 동안 die가 바쁘다. buffer에 준비된 데이터를 컨트롤러로 전달할 때는 통신 경로가 바쁘다. 독립적인 die를 늘려도 하나의 공유 버스를 여러 die가 동시에 차지할 수는 없다.

기다리는 die 옆에서 다른 die를 시작한다

NAND 조직을 설명하는 원문은 die들이 독립적으로 동작한다고 설명한다. 채널에 연결된 die는 각각 chip enable로 선택되며, 주소와 데이터·명령은 채널 버스를 통해 전달된다. 내부 동작이 진행되는 시간과 외부 전송 시간이 서로 다른 병렬화 기회를 만든다. Cai 등의 원문 §1.1–1.2

시간선을 위해 독립적인 die들이 공유 채널 하나에 연결된 가상 구성을 만들자. 명령과 주소 전송은 2μs, 명령을 받은 뒤 내부 page read는 50μs, page payload 전송은 20μs라고 하자. 한 die는 이 예에서 자신의 payload 전송까지 끝나야 다음 읽기를 받는다. cache read 같은 추가 중첩 기능은 사용하지 않는다.

die 하나에서 첫 요청 A는 명령 0–2μs, 내부 읽기 2–52μs, 전송 52–72μs를 거친다. 첫 page가 도착하는 시간은 72μs다. die가 더 있어도 A의 세 구간 자체가 짧아지지는 않는다.

die 두 개에 A와 B를 분산하면 A의 명령 뒤에 B의 명령을 보낼 수 있다. A는 내부 읽기 2–52μs, B는 4–54μs다. A의 payload가 52–72μs에 버스를 쓰는 동안 B의 데이터도 준비된다. 버스가 비는 72μs부터 B를 보내면 B는 92μs에 끝난다.

두 page를 한 die에서 순서대로 처리하면 144μs가 걸리는 모델이다. 두 die에 나눴을 때는 92μs가 된다. 두 요청의 완료량은 늘지만 A의 첫 도착은 여전히 72μs다. 이 일정은 특정 NAND 제품의 정격이나 실측 결과가 아니라 공유 버스와 독립 배열의 관계를 보여 주는 예다.

die 수보다 먼저 포화되는 자원이 있다

충분한 요청이 계속 들어오는 장기 구간에서는 각 읽기가 채널에 요구하는 시간도 계산할 수 있다. 이 모델에서 page당 명령 2μs와 payload 20μs를 합쳐 최소 22μs의 버스 시간을 소비한다. 따라서 버스만으로도 처리율은 최대 1/22μs, 초당 약 45,455page다. die가 무한히 많아도 이 공유 채널의 한계는 남는다.

한 die가 한 요청을 72μs 동안 담당하는 조건에서는 D개 die의 내부 자원 상한은 D/72μs다. die 두 개라면 초당 약 27,778page이므로 배열 쪽이 더 낮은 상한이다. 네 개라면 약 55,556page지만 공유 버스의 45,455page 상한을 넘어설 수 없다.

이 두 숫자의 작은 쪽은 필요한 자원 조건에서 얻은 상한이다. 실제 scheduler가 항상 그 값에 도달한다는 보장은 없다. 버스 전환, 명령 제한, buffer 수, 읽기 지연의 변동과 다른 작업이 남는 틈을 만들 수 있다. 작은 수의 요청을 처리하는 앞의 92μs 일정과 긴 구간의 지속 처리율도 같은 지표가 아니다.

분산할 요청이 있어야 겹칠 수 있다

컨트롤러는 아직 완료되지 않은 읽기를 충분히 갖고 있어야 여러 die를 활용한다. 소프트웨어가 A를 읽은 뒤 그 내용으로 B의 주소를 계산한다면 B는 A가 끝날 때까지 시작할 수 없다. die가 많아도 이런 의존 관계를 없애지는 못한다.

주소 배치도 영향을 준다. 동시에 처리할 page들이 모두 같은 die에 있다면 다른 die의 빈 시간은 도움이 되지 않는다. 논리 주소를 여러 die로 분산하는 정책과 실제 요청 패턴이 맞아야 한다. 반대로 분산 때문에 연속 접근의 장점이나 다른 작업의 균형을 잃을 수도 있다.

추가 채널은 다른 변화다. die를 같은 채널에 더 연결하는 대신 독립 채널을 늘리면 버스 자원도 증가할 수 있다. 따라서 “NAND 병렬성을 늘렸다”는 설명에는 die 수와 채널 수를 함께 읽어야 한다. 배열의 병렬성과 전송 경로의 병렬성은 같은 숫자가 아니다.

NAND Die Interleaving이 유용한 순간은 한 die가 내부 읽기를 하는 동안 다른 die에도 할 일을 줄 수 있을 때다. 평가할 때 첫 page의 지연, 여러 요청의 완료 시간, 지속 처리율을 나누어 보면 die를 늘려 얻은 이득이 어디서 생겼는지 보인다. 하나의 page를 빨리 가져오는 문제와 많은 page를 쉬지 않고 가져오는 문제는 서로 다른 병목을 가진다.