본문 바로가기

전체 글

(14)
[NVMe Zoned Namespaces] 1. Block Interface Tax NVMe ZNS SSD- Zoned Storage Device의 성질을 따르는 Flash-based SSD- Block interface tax와 over-provisioning을 줄이기 위해 설계 Block Interface Tax- 일반적인 SSD device에서 발생하는 additional cost들을 총합해서 block interface tax라 명칭- Flash-based SSD는 overwrite operation을 진행하기 위해선 erase operation이 선행되어야 함 (erase-before-write)- Logical address와 Physical address를 mapping 시켜주기 위한 mapping table이 DRAM의 많은 용량을 차지- FTL를 통한 SSD의 data ..
[Zoned Storage Device] 4. SMR & ZNS Device Shingled Magnetic Recording Hard Disks (SMR HDD)- SMR은 HDD device에 사용되는 magnetic storage data recording 기술- Conventional Magnetic Recording (CMR)과 비교했을 때 SMR은 더 높은 공간적 밀도를 가짐- 각 track들을 overlapping 하는식으로 배치함으로 더 높은 밀도를 가질 수 있음- 함께 overlapping 된 track들을 zone이라고 명 - Zone capacity라는 개념이 없음- Zone Append command를 지원하지 않음    - Linux 6.9.0 버전 이후 Zone Write Plugging (ZWP)를 통해 SMR device에서도 zone append가 ..
[Zoned Storage Device] 3. Zone Append Zone Append - Zoned storage device의 sequential write constraint와 open zone limit으로 인한 성능 저하를 방지하기 위한 command- Zone append는 write position을 zone의 현재 write pointer로 지정한 write operation- Zone append를 통해 host는 한번에 여러 operation을 issue 가능- Queue depth constraint를 없앨 수 있음- REQ_OP_ZONE_APPEND로 issue   출처:https://zonedstorage.io/docs/introduction/zoned-storage Zoned Storage Devices Overview | Zoned Stora..
[Zoned Storage Device] 2. Zone Command & State Zone State & State Transition- Zone들은 각자의 특수한 state들을 가지고 있음- State들은 zone command를 통해 전환이 일어남- 각 state들은 device의 resource에 따라 limit이 정해짐- Write operation을 받기 위해선 Open zones state에 있어야 함 EmptyZone안에 아무런 데이터가 없음FullZone안에 모든 block들에 data가 written 혹은FINISH ZONE command를 통해 진입Implicit OpenZone block들이 최근 host에 의해 사용Device의 resource를 사용Explicit OpenOPEN ZONE command를 통해 진입Device의 resource를 사용ClosedC..
[Zoned Storage Device] 1. Zoned Storage Device Zoned Storage Device - Zoned storage device는 block device의 일종으로 각 address를 일정한 크기의 zone으로 나눔- Random / Sequential read는 가능- 각 zone에는 write pointer (wp)가 있어 wp를 넘어서는 write (random write)나 wp보다 앞에 하는 write (overwrite)는 거절- 각 zone들은 다양한 zone command로 관리 - 각 zone들은 동일한 크기의 zone size와 zone capacity를 가지고 있음- Zone size는 zone 내부에 포함한 모든 logical block의 총합 (사용 불가능한 영역도 포함)- Zone capacity는 zone 내부에 존재하는 사용..
[Block I/O Layer] 6. I/O scheduler (Elevator) I/O scheduler (Elevator)noneI/O scheduler를 설정하지 않음Simple FIFO queue로 전달가장 적은 scheduling overhead를 가짐Fast device (NVMe SSD)의 경우에 latency를 낮추기 위해 none으로 자주 사용mq-deadline비슷한 시기에 도착한 request들을 하나의 batch로 관리Batch가 가득 차거나 대기 시간이 초과되면 device에 전달Starvation을 방지하기 위해 각 request에 대한 대기 시간에 제한을 둠 (i.e. Read: 500ms / Write: 5s)두개의 read-write queue pair와 sorted queue pair와 FIFO queue pair를 가짐Increasing sector ..
[Block I/O Layer] 5. I/O queueing (blk-mq) I/O queueing (blk-mq)- request가 block layer에 도달했을 시 hardware dispatch queue로 바로 전달되거나 software staging queue로 전달됨- Software staging queue로 전달되는 경우는 두가지I/O scheduler가 설정되어 있을 때request를 merge해야 할 때- Software staging queue를 거친 request는 그 후 hardware dispatch queue로 전달- Hardware에 충분한 리소스가 없을 시 temporary queue에 임시로 저장- Device driver는 hardware dispatch queue를 사용해 각 block device들의 submission queue로 매핑  ..
[Block I/O Layer] 4. request (linux v6.x) request queue- request_queue 구조체는 각각의 block device들에 할당되어 있음- 각 block device의 request_queue를 통해 request가 해당 block device로 전달struct request_queue { struct request *last_merge; int id; spinlock_t queue_lock; struct gendisk *disk; struct queue_limits limits;} - queue_limits을 통해 request_queue의 limit이 얼마인지 알 수 있음struct queue_limits { unsigned int logical_block_size; unsigned i..