SATA及ADMA控制器Linux操作系统驱动的设计与实现.pdf

书书书 第 23 卷第 ll 期 计算机应用与软件VoI 23 No ll 2006 年 ll 月 Computer AppIications and SoftwareNov 2006 SATA 及 ADMA 控制器 Linux 操作系统驱动的设计与实现 孙文波 尤晋元 上海交通大学软件学院 上海 200030 收稿日期 2004 09 27 基金项目 国家自然科学基金 项目编 号 60l73033 的资助 孙文波 硕士生 主研领域 嵌入式系统 软件工 程 摘 要 信息时代 数据的存储及远程备份尤为重要 为了满足用户对存储系统产品的高性能及低费用的需求 设计和实现了一 种新型存储外设的操作系统驱动 该存储系统采用 SATA 磁盘及 ADMA 控制器并基于 Linux 系统 着重于如何驱动 SATA 磁盘及 ADMA 控制器并实现一些关键功能 以大幅提升数据存储性能 实验结果表明 性能已远超过采用 IDE 磁盘的存储系统 对于大批 量数据存取 性能更为显著 关键词 SATA 及 ADMA 控制器 ADMA NCO ADMA 命令标记 热插拔 DESIGN AND IMPLEMENTATI N LINUX DEVICE DRIVER BASED N SATA ADMA C NTR LLER Sun Wenbo You Jinyuan School of Software Shanghai Jiaotong Uniuersity Shanghai 200030 China Abstract At the age of information it s very important for the IocaI or remote data storage and backup For meeting the needs of users on the storage system product that is high performance and Iow cost in this paper the 0S device driver of a new storage peripheraI that is SATA Hard Disk and ADMA controIIer has been designed and impIemented under Linux 0S This paper highIights how to drive SATA and ADMA controIIer based on some important functions for high performance The resuIts of experiment indicate the performance of system exceeds far ther that of system based on IDE hard disk especiaIIy in a Iarge data transfer Keywords SATA and ADMA controIIer ADMA NCO ADMA tagged command Hot pIug 1 前 言 在 Linux 系统里 I 0 设备被分为三类 块设备 字符设备和 网络设备 本文属于块设备驱动 块设备用来存储定长且可随 机访问的数据块 对块设备的所有操作都以块为单位进行 在 高性能系统的块设备 I 0 控制方式中 DMA 和 I 0 通道方式较 为常用 前者由 DMA 控制器接管 CPU 总线控制权 数据不经过 CPU 而直接在内存和 I 0 设备之间进行成块传输 从而在一定 程度上提高了系统的数据传输效率 后者可以获得 CPU 和外设 之间更高的并行能力 它的引入使得数据的输入输出成为一个 独立的系统 但它的成本较高 2 SATA 及 ADMA 控制器及其功能简介 从以上两种 I 0 控制方式优缺点比较可以看出 其功能和 性能的提升还有很大空间 尤其是随着一种新型块设备 SeriaI ATA SATA 的出现 促使设计开发一种功能与性能更强的 I 0 控制器来发挥高性能 SATA 的潜力 这种 I 0 控制器就是本文 所要介绍的 ADMA 控制器 它采用一种新的 I 0 控制方式 2 1 SATA SATA 相对于并行 ATA 硬盘内部总线而言 它是一种串行 架构 同 IDE ATA 及 SCSI 接口的块设备相比较而言 SATA 有 许多显著优点 l 针脚减少使连接更便捷 信号干扰变小使 传输更稳定 准确性提高 2 传输速度更快 SATAl 0 可达 lS0MB s SATA3 0 可达 600MB s 同时 SATA 支持热插拔 3 SATA 扩展性良好 技术也更成熟 就成本而言 远低于 SCSI 产 品 甚至比一些 IDE ATA 产品的成本还要低 因此 适用范围 更广 2 2 ADMA ADMA 即 Automatic Direct Memory Access 它在 I 0 控制 方式上使用 ADMA 方式 在数据 I 0 传输方式上等同于 DMA 但 ADMA 在功能和性能上又远强于 DMA DMA 处理大批量数 据传输 而 ADMA 则是处理大量 DMA 的数据传输 即若干个 DMA 数据传输形成 DMA 链交由 ADMA 控制与处理 数据校验 及结果检查都由 ADMA 来完成 CPU 基本上不干预数据的传 送操作 只是在 ADMA 操作开始和结束时 花费极短的时间参 与控制管理工作 2 3 ADMA 控制器 ADMA 控制器管理多个 SATA 设备 它主要实现了 ADMA 计算机应用与软件2006 年 功能 为了发挥 ADMA 的性能 主板上一般采用速度和频率更 高的64 位 PCI X 总线 因为 ADMA 控制器是以板卡的形式插在 PCI 或 PCI X 总线插槽上的 ADMA 控制器包含若干个 ADMA Engine ADMA Engine 是其核心部分 它实现了重要的 CPB Command Parameter BIock 命令链及 APRD ADMA PhysicaI Re gion Descriptor 数据链架构并包含大量的控制 状态和数据寄存 器以及用于传输数据的 FIF0 等 此外 ADMA 控制器还包含对 命令标记功能的支持 图 l 为 CPB 及 APRD 结构图 图 l 2 4 SATA 命令排队及 ADMA 命令标记 命令排队在优化驱动器命令执行次序 最小化驱动器机械 定位延迟及提高系统性能方面起到了非常重要及显著的作用 在 SATA 设备中 命令排队被称为 NCO Native Command Oueu ing NCO 是一个命令协议 它允许同时对一个 SATA 驱动器 发出多条命令 这些命令进入驱动器形成命令队列 驱动器可以 动态地对命令队列中的未完成的命令重排序或重新调度 同时 跟踪未完成的命令和已完成的命令 ADMA 命令标记功能实现在 ADMA Engine 的 CPB 命令链 中 每个 CPB 均可加上标记 一旦启动 ADMA Engine 进行数据 传输 若当前 CPB 不能马上得到执行 那么该 CPB 的地址信息 被暂时存入 CPB Lookup TabIe 见图 l 中 后续 CPB 不受该 CPB 的影响继续运行 若该 CPB 随后又得到了运行时机 那么 根据其标记从 CPB Lookup TabIe 中再找到该 CPB 并将其投入运 行 反之 若不使用 ADMA 命令标记功能 则 CPB 不加标记 那 么当前 CPB 若不能马上得到执行 那么就等待 直到其完成为 止 然后后续的 CPB 才能运行 3 SATA 及 ADMA 控制器 Linux 操作系统驱 动的设计与实现 以上介绍了 SATA 与 ADMA 设备及其功能 那么在相应的 Linux 系统驱动的设计与实现中 则必然要发挥 SATA 与 ADMA 设备的功能和体现其优越的性能 同时向操作系统提供强有力 的支持 在本文的设计与实现中 主要涉及协议选型 ADMA Engine 控制 命令链与数据链及一些关键数据结构的构造与操 作 数据 I 0 的实现及中断处理 命令标记及 Hot pIug 的功能实 现等 如下将做一一介绍 3 1 总线技术及协议选取 IDE 比较 SCSI IDE 即 ATA IDE 控制器实现了寄存器模型 其命令寄存 器是非常重要的一类寄存器 因为当对磁盘进行操作时 是通过 发命令方式进行的 在 Linux 系统中 IDE 架构有一个显著特 点 即上层经驱动对 IDE 设备进行读写数据时 每次只能发送 一个命令 只有当前命令完成并返回后 上层才会发送第二个命 令下来 SCSI 在标准上被分解为接口 协议 设备模型和命令 集 SCSI 块设备模型遵循整个 SCSI 体系结构模型 在 SCSI 块 设备模型中 命令集非常重要 它表示了该类设备功能的强弱 在 Linux 系统 SCSI 架构下 当上层经驱动对 SCSI 块设备进行读 写数据时 每次可以发送多个读写命令下来 当这些命令操作完 成后可一并返回 这样减少了系统开销 对于大批量数据传输 采用 SCSI 结架构的数据传输机制其性能优势尤为明显 鉴于 以上分析 采用 SCSI 的驱动架构比较合理且切实可行 3 2 驱动架构及流程的设计与实现 SATA 及 ADMA 的 SCSI 驱动架构分两部分作以介绍 驱动 架构部分和驱动流程部分 在 Linux 系统中 SCSI 子系统架构 分三个层次 SCSI Upper LeveI SUL SCSI MiddIe LeveI SML 和 SCSI Low LeveI Drivers LLD SUL 处于 SCSI 子系统的最上 层 对上同 II rw bIk 层交互 对下同 SML 层衔接 SUL 层的任 务就是把上层传来的请求转换为 SCSI 格式的请求 并提交给 SML 层 同时等待处理结果 SML 处于中间层 对下同 LLD 层 通信 LLD 是最低层 同硬件打交道 它负责在 Initiator 启动 器 和 Target 目标器 之间传送命令 数据 状态及消息等 启动 器和目标器是 SCSI 子系统的设备模型 本文的 SATA 及 AD MA 控制器的 Linux 系统驱动设计与实现就属于 LLD 层的设计 与实现 ADMA 控制器对应启动器 SATA 设备对应目标器 图 2 为 SATA 及 ADMA 控制器的 SCSI 子系统功能结构图 图 2 LLD 层驱动的主要任务是控制 SATA 及 ADMA 控制器 它 负责启动 SATA 及 ADMA 设备 捕获设备中断并进行 I 0 中断 处理以及实现设备无关性等 驱动直接与硬件打交道 并向 SML 层提供一组访问接口 LLD 驱动就是要设计和实现这组接 口 图 3 为两层之间的接口示意图 图 3 在 LLD 驱动架构中 驱动接口和功能的设计与实现尤为重 要 驱动与外界的接口分三部分 l 驱动与 Linux 系统内核的 接口 这里即为与 SML 层的接口 2 驱动与系统引导的接口 这部分对 SATA 及 ADMA 设备进行初始化 入口为 Detect 函数 3 驱动与 SATA 及 ADMA 设备的接口 驱动通过 SATA 及 AD 2 第 ll 期 孙文波等 SATA 及 ADMA 控制器 Linux 操作系统驱动的设计与实现 MA 控制器的接口寄存器及 ADMA Engine 的命令链和数据链 见图 l 同 SATA 及 ADMA 设备进行信息交互 驱动的功能分 为五个部分 l 驱动注册与注销 驱动注册通过使用函数 Scsi register 向 SML 层注册并提供一组访问接口 见图 3 驱动注 销刚好相反 释放软硬件资源 2 ADMA 控制器的设备识别 及资源初始化 设备识别通过设备的 Vendor ID Device ID 以及 系统函数调用 Pci find device 来实现 若 ADMA 控制器被找 到 则在系统中被标识为一个 PCI 设备 随后 可以获取设备中 断资源 I 0 及 Memory 地址空间等 同时注册中断处理函数 3 SATA 设备识别及其寄存器设置 SATA 设备识别是通过 SML 层向 LLD 层发送命令的方式进行的 成功执行三条命令即 可识别一个 SATA 设备并可向该设备进行读写操作 这三个命 令为 Inguiry Test Unit Ready 和 ReadCapacity 然后设置其寄 存器为数据 I 0 做准备 通常设置数据传输模式及设备特性等 4 SATA 及 ADMA 设备读写操作 ADMA 的数据传输机制见 2 2 的相关内容 在数据传输之前 先要构造和初始化其命令 链与数据链 见图 l 驱动程序根据 SML 层下传的命令及数据 地址信息填充 CPB 链和 APRD 链 在完成填充后 就可启动 AD MA Engine 进行数据传输 5 SATA 及 ADMA 设备中断处理 当数据传输完成后 就会触发一个中断 并调用中断处理函数进 行处理 在中断处理函数中 检查数据传输后的结果是否异常 并通报 SML 层 驱动流程部分如下 l SML 层调用驱动的 Detect 函数对 SATA 及 ADMA 设备进行初始化 其中包括向上层注册一组访 问接口 2 构造和初始化 ADMA Engine 的命令链与数据链 一 旦需要数据传输 就填充 CPB 链和 APRD 链 同时启动 ADMA Engine 3 在 ADMA Engine 完成数据传输以后 会触发一个中 断 并调用中断处理函数 4 系统卸载某个 ADMA 控制器 HBA 时 则先要释放该 HBA 初始化时所获取的软硬件资源 卸载该 驱动时 则先得卸载所有 HBA 以上介绍了驱动架构及流程的 设计与实现 下面将着重一些重要功能的实现 3 3 ADMA 命令标记实现 ADMA 命令标记的思想见 2 4 在构造 CPB 命令链时 可 在每个 CPB 的命令控制标志字段加入标记 当 ADMA Engine 启 动运行时 若某个 CPB 不能马上得到执行 那么该 CPB 的地址 信息被暂存入 CPB Lookup Tabie 见图 3 中 CPB Lookup Tabie 是一段内存空间 它在驱动初始化时被分配好同时它的首地址 被放入 ADMA Engine 的 CPB 地址寄存器中 随后若该 CPB 的 数据传输操作可以被 SATA 设备执行 那么 SATA 设备就会触 发一个中断 驱动在得到中断通知后 检查 SATA 设备的相关寄 存器位的值是否正确 若正确它就从 SATA 设备中读取未执行 命令的标记 驱动根据命令标记 所要读写数据的设备以及 CPB 地址寄存器中的地址信息就可以从 CPB Lookup Tabie 中找到未 执行的 CPB 并将其投入运行 3 4 Hot plug 功能实现 SATA 标准定义了 Hot piug 热插拔 因此 SATA 设备可具 有热插拔功能 在驱动程序中 SATA 设备的热插拔功能是靠 中断机制来实现的 当一个 SATA 设备接入 ADMA 控制器时 会触发一个中断 然后进入中断处理程序 该处理程序在 ADMA 控制器初始化时就已经向系统作了注册 更新 ADMA 控制器 HBA 的资源及对应的数据结构信息 同时报告上层有新的设备 插入 随后驱动程序发送命令对新的设备进行识别 正确识别 后即可进入正常的数据 I 0 阶段 反之 SATA 设备拔出 ADMA 控制器 则驱动执行过程同上述正好相反 4 实验测试 实验测试环境为 CPU PIII l 2G 内存 256M 操作系统 Red Hat9 kernei 2 4 主板 PCI 总线频率 66MHz 为了检验 ADMA 系统的性能 分别对 Uitrai33 系统和 AD MA 系统做性能测试且对比两者的读写性能 所有的测试都进 行三遍 然后对于测试结果取平均值 测试结果如图 4 所示 实验结果显示 与 Uitrai33 系统的读写性能相比 ADMA 系统将 读写性能提高了将近 0 5 倍 因此 它对数据存储性能的提升是 显而易见的 Uitral33 系统代表 Uitral33 控制器 具有 PATA 接口 连接两个 S0GB 7200 RPM Maxtor 磁盘且磁盘不支持 TCO 功能以及它们的驱动程 序 ADMA 系统代表 ADMA 控制器 具有 SATA 接口 连接两个 74GB l0000 RPM WD SATA 磁盘且磁盘支持 TCO 功能以及它们的驱协程序 图 4 5 结论与展望 在存储系统中 外设一直存在着性能瓶颈问题 从而严重影 响整个系统性能的提高 而本文的 ADMA 存储系统则使这一 现状大有改观 实验结果显示 ADMA 存储系统对数据存取性 能的提升是非常显著的 这使得它在高端存储系统以及对数据 存储性能要求很高的场合 ADMA 存储系统均能提供良好的支 持 若要进一步扩展其功能和性能 则还需要在此基础上做软硬 件的再开发 比如硬件 RAID 和 iSCSI 网络存储的支持 RAID 可实现 RAID 0 l l0 5 iSCSI 除实现本身的协议外 还可以实 现 T0E 总之 基于如上技术可以开发不同形式的存储系统产 品提供个人 家庭及企业用户使用 同时实现更好的性价比 来 满足市场的需求 参考文献 l Seriai ATA Advanced Host Controiier Interface AHCI Intei Corpora tion Apr 2004 2 Seriai ATA Native Command Oueuing Intei Corporation and Seagate Teclnoiogy Jui 2003 3 PCI Seriai ATA Host Bus Adapters Specification Working Draft Revision 0 3 LSI Design Integration Corporation May 2003 4 ATA ATAPI Host Adapters Standard ATA Adapter Working Draft Re vision l 0 Pacific Digitai Corporation Jan 2003 3 SATA及ADMA控制器Linux操作系统驱动的设计与实现SATA及ADMA控制器Linux操作系统驱动的设计与实现 作者 孙文波 尤晋元 Sun Wenbo You Jinyuan 作者单位 上海交通大学软件学院 上海 200030 刊名 计算机应用与软件 英文刊名 COMPUTER APPLICATIONS AND SOFTWARE 年 卷 期 2006 23 11 参考文献 4条 参考文献 4条 1 ATA ATAPI Host Adapters Standard ATA Adapter Working Draft Revision 1 0 2003 2 PCI Serial ATA Host Bus Adapters Specification Working Draft Revision 0 3 2003 3 Serial ATA Native Command Queuing Intel Corporation and Seagate Technology 2003 4 Serial ATA Advanced Host Controller Interface AHCI 2004 本文链接

sata及adma控制器linux操作系统驱动的设计与实现,SATA及ADMA控制器Linux操作系统驱动的设计与实现.pdf...相关推荐

  1. xbox one x驱动_如何在Windows,OS X和Linux上使用Xbox One控制器

    xbox one x驱动 The Xbox One Controller is a fantastic gamepad, and although Microsoft has only recentl ...

  2. 绿联硬盘盒linux驱动,绿联 USB3.0 SATA 接口通用移动硬盘盒子体验与选购技巧

    前两天子凡不是在泪雪网分享过西部数据 2TB 的机械硬盘体验感受,然后非常意外的发现主板上剩余的三个 SATA 接口全部无法使用,从而导致电脑无法直接安装硬盘,总不能换主板吧,想想都觉得费时费力费钱啊 ...

  3. 【Linux】Linux系统编程(入门与系统编程)(三)(深入理解操作系统、进程、环境变量、内存分布)

    本博客操作系统最多涉及30%的理论,重点在于部分进程的内容,部分文件系统的内容,部分文件管理的内容不是主讲操作系统,我们的最终目的是理解系统中最高频的知识点,然后被完全利用指导我们编程. 下面是这三篇 ...

  4. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】PowerPC + Linux2.6.25平台下的I2C驱动架构分析

    PowerPC + Linux2.6.25平台下的I2C驱动架构分析 Sailor_forever  sailing_9806#163.com (本原创文章发表于Sailor_forever 的个人b ...

  5. linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析

    1      mini2440的ADC驱动实例 这节与输入子系统无关,出现在这里是因为后面的章节会讲到触摸屏输入子系统驱动,由于触摸屏也使用ADC,因此本节是为了说明ADC通过驱动代码是如何控制的. ...

  6. 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. linux编写驱动后write已杀死_《Linux4.0设备驱动开发详解》笔记--第九章:Linux设备驱动中的异步通知与同步I/O...

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似"中断"的异步通 ...

  8. 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. linux 0.01内核分析与操作系统设计 pdf,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 readme 本光盘为<Linux 0.0.1内核分析与操作系统设计--创造你自己的操作系统>一书的配套光盘,读者可自由取其源文件做学习,研究 ...

最新文章

  1. 中文分词中的战斗机-jieba库
  2. PHP配置环境中开启GD库
  3. 孕妇能长期在计算机屏幕前工作吗,怀孕了在电脑前工作怎么办
  4. document.write() 和writeln()方法注意事项
  5. 又是AI+IoT!谷歌试图收购物联网公司Xively
  6. data 谷歌浏览器更改user 路径_chrome修改默认用户目录
  7. 解决IE9下JQuery的ajax失效的问题
  8. 一.反编译Apk得到Java源代码
  9. python是免费的、开源的、跨平台的_NovalIDE是一款开源,跨平台,而且免费的国产Python IDE。...
  10. 计算机数学英语基础,计算机数学基础教程 2012年版
  11. CSS3颜色渐变整理
  12. Eclipse常用便捷设置
  13. 网络聊天室(linux,java,Android)
  14. [CocosCreator]使用龙骨DragonBone
  15. python人工智能框架有哪些_10个最佳的人工智能开发框架和AI库
  16. Yolov5模型使用教程
  17. 51单片机驱动DS18B20温度传感器测量温度
  18. 语义化的理解:有哪些语义化标签?有什么作用?
  19. 浮躁和压力大的时候看看这篇文章
  20. sonicwall NSA-2600 防火墙基本介绍

热门文章

  1. 学考计算机使用说明,《大学计算机》上机考试系统操作指南
  2. Android实现自定义字体
  3. 基于matlab/simulink的交流电机调速系统建模与仿真,基于MATLABSIMULINK的交流电机调速系统建模与仿真...
  4. java 授权码模式_Spring Security OAuth2 授权码模式的实现
  5. easyswoole(1)
  6. Linux grep/egrep命令详解
  7. 小学生python游戏编程arcade----灯光示例
  8. 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)
  9. 2023最新红盟云卡开源发卡网站源码+功能很强大
  10. 微服务项目之电商--17.商品规格数据结构SPU和SKU