Linux 내장 nvme 드라이브 분석 장치 초기화

3323 단어 저장 장치
참고 자료
독점 발표 | Linux NVMe Driver 학습노트 대합집 linux 내장 원본 분석 - nvme 설비의 초기화 강세 회귀, Linux blk는 실력으로 자신이 약하지 않다는 것을 증명합니다!
드라이버 초기화
nvme_probe -> nvme_async_probe -> nvme_dev_add -> nvme_alloc_ns

브레이크 및 폴링
schedule_timeout과 mdelay의 차이scheduletimeout 함수 linux 시간 - 지연 및 시간 커널 시간 메커니즘 API의round_jiffies_relative
4.1버전의 핵에는 핵선 nvme 가 있습니다kthread, 1s 퀴즈를 담당하기 때문에 NVMe 디스크는 대기열이 완성되었는지 확인한다. 4.14버전의 메모리에 blkmq는poll 인터페이스를 추가했다. 이 기능은 함수nvme_timeoutnvme_poll로 대체되고 nvme_timeout 호출nvme_poll은 현재 처리되지 않은 완성 대기열이 있는지 확인한다. 4.1버전nvme_timeout은 현재의 Request를 직접 취소한다.
static const struct blk_mq_ops nvme_mq_admin_ops = {
	.queue_rq	= nvme_queue_rq,
	.complete	= nvme_pci_complete_rq,
	.init_hctx	= nvme_admin_init_hctx,
	.exit_hctx      = nvme_admin_exit_hctx,
	.init_request	= nvme_init_request,
	.timeout	= nvme_timeout,
};

static const struct blk_mq_ops nvme_mq_ops = {
	.queue_rq	= nvme_queue_rq,
	.complete	= nvme_pci_complete_rq,
	.init_hctx	= nvme_init_hctx,
	.init_request	= nvme_init_request,
	.map_queues	= nvme_pci_map_queues,
	.timeout	= nvme_timeout,
	.poll		= nvme_poll,
};

좋은 웹페이지 즐겨찾기