Linux源码笔记-SCSI中层
- 磁盘I/O那些事 - 美团技术团队
- 通用块层 - 简书
- 浅谈Linux内核IO体系之磁盘IO - 知乎
- 打通IO栈:一次编译服务器性能优化实战
- linux io过程自顶向下分析 - 黑客画家的个人空间 - OSCHINA - 中文开源技术交流社区
- Linux Storage Stack Diagram - Thomas-Krenn-Wiki
- MMAP和DIRECT IO区别 - aitao - 博客园
- (79 条消息) Linux 中 mmap() 函数的内存映射问题理解? - 知乎
- (1) 磁盘IO瓶颈_个人文章 - SegmentFault 思否
- 鸿蒙系统 IO栈和Linux IO栈对比分析-摩尔芯闻
- Linux 的IO栈 - 知乎
- iscsi:IO操作流程(一)_我的技术笔记-CSDN博客
- (79 条消息) NVMe 和 AHCI 到底是接口标准还是接口协议? - 知乎
- SCSI标准分析及linux kernel中scsi_debug模块实现详解(1)-zhenchengjin-ChinaUnix博客 | Forest
- Understanding Device Mapper and Filter Driver
- Architecture of Linux Kernel I/O stack | Download Scientific Diagram
- 打造全用户态高可靠高性能的分布式存储系统-腾讯网
- Default Maximum IO Size Change in Linux Kernel | Long White Virtual Clouds
- linux - Why is the size of my IO requests being limited, to about 512K? - Unix & Linux Stack Exchange
- 优化磁盘IO调度方式_鲲鹏高性能计算解决方案_调优指南_IO调优_华为云
- Linux磁盘I/O优化:vm.dirty_ratio - 米扑博客
- Linux机器内核参数理解(二) - 207矿工的个人空间 - OSCHINA - 中文开源技术交流社区
- 深入理解linux IO - 简书
- 3.分布式存储系统的大体架构 - 知乎
- <大话存储1/2>
- 冬瓜哥:IO协议栈前沿技术研究动态 - 存储在线
- 存储极客 | 浅析固态介质在存储系统中的应用方式-黑科技-轻阅读-戴尔易安信(Dell EMC)官网
- 了解IO协议栈
(1)通用Block层-把请求排队
submit_bio
generic_make_request
request_queue.make_request_fn
blk_queue_bio
blk_flush_plug_list
blk_mq_make_request
(2)通用Block层-调度层
schedule
sched_submit_work
blk_schedule_flush_plug
blk_flush_plug_list
queue_unplugged
blk_run_queue_async
request_queue.delay_work
blk_delay_work
_blk_run_queue
request_queue.make_request_fn
(3)SCSI中层
// request_queue.request_fn
scsi_request_fn
blk_peek_request
blk_pm_peek_request
request_queue.prep_rq_fn
scsi_prep_fn
scsi_setup_cmnd
scsi_setup_blk_pc_cmnd
scsi_init_io
scsi_init_sgtable
scsi_alloc_sgtable
blk_rq_map_integrity_sg
(3)提交,然后等待中断返回
// 注册硬中断处理函数
scsi_cmnd->scsi_done = scsi_done;
// 提交
scsi_execute_req
scsi_execute_req_flags
scsi_execute
blk_execute_rq
blk_execute_rq_nowait
(4)返回处理:成功 or 超时
(4.1)硬中断
handle_level_irq
_base_interrupt
mpt_callbacks
// mpt3sas_base_register_callback_handler(_scsih_io_done)
_scsih_io_done
scsi_cmnd->scsi_done
# scsi_done
blk_complete_request
__blk_complete_request
raise_softirq_irqoff
// BLOCK_SOFTIRQ
(4.2)软中断
do_softirq
do_softirq_own_stack
_do_softirq
softirq_action->action
// subsys_initcall(blk_softirq_init)
// BLOCK_SOFTIRQ <---> blk_done_softirq
blk_done_softirq
request_queue->softirq_done_fn
scsi_softirq_done
scsi_decide_disposition
(A)scsi_finish_command
scsi_io_completion
scsi_end_request
blk_update_request
req_bio_endio
bio_endio
bio->bi_end_io
end_bio_bh_io_sync
buffer_head->b_end_io
end_buffer_read_sync
end_buffer_write_sync
blk_finish_request
request->end_io
// blk_end_sync_rq
scsi_run_queue
(B) scsi_queue_insert
_scsi_queue_insert
blk_requeue_request
elv_requeue_request
kblockd_schedule_work
(C) scsi_eh_scmd_add
(5)错误处理 or 超时处理
scsi_error_handler #while循环任务
(A)eh_strategy_handler //自定义处理策略
Scsi_Host->transportt->eh_strategy_handler
# ata_scsi_error
(B)scsi_unjam_host //SCSI默认处理策略
scsi_eh_ready_devs
scsi_eh_bus_device_reset
scsi_eh_target_reset
scsi_eh_bus_reset
scsi_eh_host_reset
scsi_eh_flush_done_q
(5)超时检查
blk_rq_check_expired
blk_rq_timed_out
request_queue->rq_timed_out_fn
scsi_times_out
scsi_eh_scmd_add
scsi_eh_wakeup
Scsi_Host->ehandler
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类