struct nvme_dev
queus -> struct nvme_queue * -> [nvme_queue][nvme_queue]...[nvme_queue]
tagset - struct blk_mq_tag_set : io를 위한 tag를 관리
admin_tagset - struct blk_mq_tag_set : admin을 위한 tag를 관리
online_queues : 활성화된 큐 개수
max_qid : queues 배열의 마지막 인덱스
q_depth : nvme_queue 하나가 처리할 수 있는 최대 io request 개수
ctrl - struct nvme_ctrl : nvme controller
struct nvme_queue
dev -> struct nvme_dev
q_lock : spinlock
sq_cmds -> struct nvme_command
sq_cmds_io -> struct nvme_command __iomem
cqes -> volatile struct nvme_completion
tags -> struct blk_mq_tags * -> struct blk_mq_tags
sq_dma_addr : sq 관련 Direct Memory Access 주소
cq_dma_addr : cq 관련 Direct Memory Access 주소
q_depth : 큐잉 할 수 있는 최대 io request 개수
cq_vector : completion queue interrupt?
sq_tail : submission queue 에 request를 삽입할 위치
cq_head : 완료된 io를 가져갈 위치
qid : 이 큐의 id, 0번은 관리자, 1이상은 io 큐
cqe_seen :
struct blk_mq_tag_set
mq_map -> [uint][uint]...[uint]
ops -> struct blk_mq_ops
nr_hw_queues : hw queue 개수
queue_depth : SQ에 최대 큐잉 할 수 있는 io request 개수
dirver_data -> void * -> struct nvme_dev
tags -> struct blk_mq_tags * -> [blk_mq_tags][blk_mq_tags]...[blk_mq_tags]
struct nvme_ctrl
admin_q -> struct request_queue : admin 큐와 연관
connect_q -> struct request_queue : io 큐와 연관
tagset -> struct blk_mq_tag_set : nvme_dev.tagset과 동일
queue_count : 활성화된 큐 개수
struct nvme_completion
sq_head : 처리될 io request가 존재하는 위치
sq_id : submission queue id
command_id : request의 tag와 동일
struct blk_mq_tags
rqs -> struct request * -> [request][requset]...[request] : nvme_queue 에 큐잉된 request들
static_rqs -> struct request * -> [request][request]...[request] : request pool
각 구조체에서 이해한 부분만 정리해놓은 것이다.
그림으로 그리면 더 좋겠지만, 글로 쓰는게 더 편해서 이렇게 했다.
'리눅스 커널 > 블록 멀티 큐' 카테고리의 다른 글
nvme command 관련 추가 내용 (0) | 2021.10.26 |
---|---|
nvme command (0) | 2021.10.26 |
nvme_setup_io_queues 흐름 (0) | 2021.10.26 |
nvme_reset_work 흐름 (0) | 2021.10.26 |
NVMe 디바이스 드라이버 초기화 흐름 (0) | 2021.10.26 |