본문 바로가기

리눅스 커널/블록 멀티 큐

nvme 자료구조 관계

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