8.1 I/O系统的性能
简述
输入/输出系统简称I/O系统
它包括:
I/O系统是计算机系统中的一个重要组成部分
- 完成计算机与外界的信息交换
- 给计算机提供大容量的外部存储器
- I/O系统的性能对CPU的性能有很大影响
分类
按照主要完成的工作进行分类:
系统响应时间
系统的响应时间(衡量计算机系统的一个更好的指标)
从用户输入命令开始,到得到结果所花费的时间。
由两部分构成:
多进程技术只能够提高系统吞吐率,并不能够减少系统响应时间。
评价I/O系统性能
另一种衡量I/O系统性能的方法:
考虑I/O操作对CPU的打扰情况
即考查某个进程在执行时,由于其他进程的I/O操作,使得该进程的执行时间增加了多少。
8.2 I/O系统的可靠性、可用性和可信性
系统的可靠性 🌟🌟
系统的可靠性:系统从某个初始参考点开始一直连续提供服务的能力
用平均无故障时间MTTF(mean time to failure)来衡量
系统中断服务的时间用平均修复时间MTTR(mean time to repair)来衡量。
MTTF的倒数就是系统的失效率。
如果系统中每个模块的生存期服从指数分布,则系统整体的失效率是各部件的失效率之和。
系统的可用性
可用性: 系统正常工作的时间在连续两次正常服务间隔时间中所占的比率
可
用
性
=
M
T
T
F
M
T
T
F
+
M
T
T
R
可用性 = \frac{MTTF}{MTTF+MTTR}
可用性=MTTF+MTTRMTTF
M
T
T
F
+
M
T
T
R
:
平
均
失
效
间
隔
时
间
M
T
B
F
MTTF+MTTR:平均失效间隔时间MTBF
MTTF+MTTR:平均失效间隔时间MTBF
系统的可信性
系统的可信性:服务的质量。即在多大程度上可以合理地认为服务是可靠的。(偏主观,不可以度量)
例题:🌟🌟
提高系统组成部件可靠性的方法
- 有效构建方法(valid construction)
- 在构建系统的过程中消除故障隐患,这样建立起来的系统就不会出现故障。
- 纠错方法(error correction)
- 在系统构建中采用容错的方法。这样即使出现故障,也可以通过容错信息保证系统正常工作。
- 为保证冗余信息在出现错误时不失效,通常将其存放在与出错部件不同的部件中,典型应用就是磁盘冗余阵列。
8.3 廉价磁盘冗余阵列RAID
简介
磁盘阵列DA(Disk Array):使用多个磁盘(包括驱动器)的组合来代替一个大容量的磁盘。
- 多个磁盘并行工作。
- 以条带为单位把数据均匀地分布到多个磁盘上。
- 条带存放可以使多个数据读/写请求并行地被处理,从而提高总的I/O性能。
- 多个独立的请求可以由多个盘来并行地处理
- 如果一个请求访问多个块,就可以由多个盘合作来并行处理。
阵列中磁盘数量的增加会导致磁盘阵列可靠性的下降。
- 如果使用了N个磁盘构成磁盘阵列,那么整个阵列的可靠性将降低为单个磁盘的1/N。由上面的系统失效率以及MTTF可以很容易推断出来
- 解决方法:在磁盘阵列中设置冗余信息盘
- 当单个磁盘失效时,丢失的信息可以通过冗余盘中的信息重新构建。
廉价磁盘冗余阵列RAID:Redundant Arrays of Inexpensive Disks
大多数磁盘阵列的组成可以由以下两个特征来区分
- 数据交叉存放的粒度
- 细粒度磁盘阵列是在概念上把数据分割成相对较小的单位交叉存放。
- 优点:所有I/O请求都能够获得很高的数据传输率。
- 缺点:在任何时间,都只有一个逻辑上的I/O在处理当中,而且所有的磁盘都会因为为每个请求进行定位而浪费时间。
- 粗粒度磁盘阵列是把数据以相对较大的单位交叉存放。
- 多个较小规模的请求可以同时得到处理。
- 对于较大规模的请求又能获得较高的传输率
在磁盘阵列中设置冗余需要解决以下两个问题
- 冗余信息的计算
- 大多都是采用奇偶校验码;
- 也有采用海明码(Hamming code)或RS码的
- 如何将冗余信息分布到磁盘阵列中的各个盘里
- 把冗余信息集中存放在少数的几个盘中。
- 把冗余信息均匀地存放到所有的盘中。----(能避免出现热点问题)
RAID的分级及其特性
RAID级别 | 可以容忍的故障个数以及当数据盘为8个时,所需的检测盘的个数 | 优点 | 缺点 | 公司产品 |
---|
0 非冗余,条带存放 | 0个故障;0个检测盘 | 没有空间开销 | 没有纠错能力 | 广泛应用 |
1 镜像 | 1个故障;8个检测盘 | 不需要计算奇偶校验,数据恢复快,读数据快。而且其小规模写操作比更高级别的RAID快 | 检测空间开销最大(即需要的检测盘最多) | EMC,HP(Tandem),IBM |
2 存储器式ECC | 1个故障;4个检测盘 | 不依靠故障盘进行自诊断 | 检测空间开销的级别是log2m级(m为数据盘的个数) | 没有 |
3 位交叉奇偶校验 | 1个故障;1个检测盘 | 检测空间开销小(即需要的检测盘少),大规模读写,操作的带宽高 | 对小规模、随机的读写操作没有提供特别的支持 | 外存概念 |
4 块交叉奇偶校验 | 1个故障;1个检测盘 | 检测空间开销小,小规模的读操作带宽更高 | 校验盘是小规模写的瓶颈 | 网络设备 |
5块交叉分布奇偶校验 | 1个故障;1个检测盘 | 检测空间开销小,小规模的读写操作带宽更高 | 小规模写操作需要访问磁盘4次 | 广泛应用 |
6 P+Q双奇偶校验 | 2个故障;2个检测盘 | 具有容忍2个故障的能力 | 小规模写操作需要访问磁盘6次,检测空间开销加倍(与RAID3、4、5比较) | 网络设备 |
有关RAID的几个问题
- 关键问题:如何发现磁盘的故障
- 在磁盘扇区中除了保存数据信息外,还保存有用于发现该扇区错误的检测信息。
- 设计的另一个问题:如何减少平均修复时间MTTR
- 热切换技术
8.3.1 RAID 0
- 非冗余磁盘阵列,无冗余信息。严格地说,它不属于RAID系列。
- RAID中最简单的一种,实现成本也最低
- 把数据切分成条带,以条带为单位交叉地分布存放到多个磁盘中。
-
- RAID0不提供数据冗余,因此一旦数据被破坏,将无法得到恢复。
- 任何一块磁盘出现故障,整个系统将无法正常工作
- (多个磁盘的系统可靠性比采用单个大容量磁盘的可靠性要低很多)
- 适用于需要高带宽磁盘访问的场合。
8.3.1 RAID 1
- 镜像磁盘:对所有的磁盘数据提供一份冗余的备份。
- 每当把数据写入磁盘时,将该数据也写入其镜像盘。
- 在系统中所有的数据都有两份。
-
RAID 1的特点
- 读取数据时,镜像的两个磁盘可以独立地同时工作,能实现快速的读取操作。
- 对于写入操作,镜像的两个磁盘都要写入。但可并行进行,而且不需要计算校验信息,所以其速度比级别更高的RAID都快。
- 可靠性很高,数据的恢复很简单。
- 实现成本最高。
8.3.3 RAID 2
存储器式的磁盘阵列(按海明纠错码的思路构建)
含4个数据盘的RAID2
RAID 2 的特点
- 每个数据盘存放所有数据字的一位
- 各个数据盘上的相应位计算海明校验码,编码位被存放在多个校验(ECC)磁盘的对应位上。
- 冗余盘是用来存放海明码的,其个数为log2m级。
- 并未被广泛应用,目前还没有商业化产品。
8.3.4 RAID 3
位交叉奇偶校验磁盘阵列
特点:
- 采用奇偶校验
- 写数据时:为每行数据形成奇偶校验位并写入校验盘
- 读出数据时:如果控制器发现某个磁盘出故障,就可以根据故障盘以外的所有其他盘中的正确信息恢复故障盘中的数据。(通过异或运算实现)
- 细粒度的磁盘阵列,即采用的条带宽度较小。
- (可以是1个字节或1位)
- 能够获得很高的数据传输率,这种磁盘阵列对大数据量的读写具有很大的优越性。
- 不能同时进行多个I/O请求的处理。
- 只需要一个校验盘,校验空间开销比较小
8.3.5 RAID 4
块交叉奇偶校验磁盘阵列
采用比较大的条带,以块为单位进行交叉存放和计算奇偶校验。
实现目标:能同时处理多个小规模访问请求
RAID4读写特点:
- 读取操作
- 每次只需访问数据所在的磁盘。
- 仅在该磁盘出现故障时,才会去读校验盘,并进行数据的重建。
- 写入操作
- 原始方法:新数据写入,需要把所有的数据全部读出,重新计算校验值,即使没有修改其他硬盘的内容。
- 假定:有4个数据盘和一个冗余盘。写数据需要2次磁盘读和2次磁盘写操作。
RAID4能有效地处理小规模访问,快速处理大规模访问,校验空间开销比较小。但其控制比较复杂。
8.3.6 RAID5
块交叉分布奇偶校验磁盘阵列
数据以块交叉的方式存于各盘,无专用冗余盘,奇偶校验信息均匀分布在所有磁盘上。
- 优点
- 校验空间开销小
- 快速处理大规模的访问
- 快速处理小规模读和写的操作
- 缺点
8.3.7 RAID6
P+Q双校验磁盘阵列
特点
- 校验空间开销是RAID5的两倍
- 容忍两个磁盘出错
- 适合重要数据的保存
RAID10与RAID01
RAID10又称为RAID1+0
先进行镜像(RAID1),再进行条带存放(RAID0)
RAID01又称为RAID0+1
先进行条带存放(RAID0),再进行镜像(RAID1)
性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的硬盘亦会停止运作,可靠性较低。因此,RAID 10远较RAID 01常用,
零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。
8.3.9 RAID的实现与发展
实现盘阵列的方式主要有三种:
- 软件方式:阵列管理软件由主机来实现。
- 优点:成本低
- 缺点:过多地占用主机时间,且带宽指标上不去。
- 阵列卡方式:把RAID管理软件固化在I/O控制卡上,从而可不占用主机时间,一般用于工作站和PC机。
- 子系统方式:一种基于通用接口总线的开放式平台,可用于各种主机平台和网络系统。
8.4 总线
总线:在计算机系统中,各子系统之间可以通过总线互相连接。
优点:成本低、简单
主要缺点:它是由不同的外设分时共享的,形成了信息交换的瓶颈,从而限制了系统中总的I/O吞吐量。
简介
构成计算机系统的互联机构,是多个系统功能部件之间进行数据传送的公共通路。
借助与总线连接,计算机在各系统功能部件之间实现地址、数据和控制信息的交换,并在征用资源的基础上进行工作。
一个单处理器系统中的总线,大致分为三类
- 内部总线
- 系统总线
- CPU同计算机系统的其他高速功能部件,比如存储器,通道等互相连接的总线
- I/O总线
8.4.1 总线的设计
总线设计存在很多技术难点
一个重要原因:总线上信息传送的速度极大地受限于各种物理因素。
另外,我们一方面要求I/O操作响应快,另一方面又要求高吞吐量,这可能造成设计需求上的冲突。
-
分离事务总线
- (又称:流水总线、悬挂总线、包交换总线)
- 在有多个主设备时,可以通过包交换来提高总线带宽。
- 基本思想
- 将总线事务分成请求和应答两部分
- 在请求和应答之间的空闲时间内,总线可以供其他的I/O使用,这样就不必在整个I/O过程中都独占总线。
-
同步总线
- 同步总线的控制线中包含一个时钟,总线上所有设备的所有的通信操作都以该时钟为基准
- 优点:速度快、成本低
- 缺点:
- 由于时钟通过长距离传输后会扭曲,因而同步总线不能用于长距离的连接。特别是对于高速同步总线来说,更是如此。
- 总线上的所有设备都必须以同样的时钟频率工作。
- CPU-存储器总线通常是采用同步总线。
-
异步总线
- 没有统一的参考时钟,每个设备都有各自的定时方法。
- 采用握手协议
- 不存在时钟扭曲和同步的问题,传输距离可以比较长。
- 很多I/O总线都采用异步总线。
- 同步总线通常比异步总线快。
8.4.2 总线标准和实例
I/O总线标准:定义如何将设备与计算机进行连接的文档。
8.4.3 与CPU的连接
I/O总线的物理连接方式有两种选择
CPU对I/O设备的编址有两种方式
- 存储器映射I/O(也称为I/O设备统一编址)
- 将一部分存储器地址空间分配给I/O设备,用load指令和store指令对这些地址进行读写将引起I/O设备的数据传输。
- 将一部分存储空间留出用于设备控制,对这一部分地址空间进行读写就是向设备发出控制命令。
- 给I/O设备独立编址
- 需要在CPU中设置专用的I/O指令来访问I/O设备。
- CPU需要发出一个标志信号来表示所访问的地址是I/O设备的地址
CPU与外部设备进行输入/输出的方式可分为4种
- 程序查询
- 程序查询方式是早期计算机中使用的一种方式。
- 数据在CPU和外围设备之间的传送完全靠计算机程序控制
- 优点是CPU的操作和外围设备的操作能够同步,而且硬件结构比较简单
- 问题是,外围设备动作很慢,程序进入查询循环时将白白浪费掉CPU很多时间。CPU此时只能等待,不能处理其他业务
- 当前,除单片机外,很少使用程序查询方式
- 中断
- 中断是外围设备用来“主动”通知CPU,准备送出输入数据或者接收输出数据的一种方式。
- 通常,当发生中断时,CPU暂停现行程序,转向中断处理程序,从而可以输入或输出一个数据。当中断处理完毕后,CPU有返回到原来的任务,并从停止的地方开始执行程序。
- 优点:节省CPU的时间,管理I/O的一个较为有效方法。
- 适用于随机出现的服务,一旦提出要求,应立即响应。
- 缺点:硬件结构相对复杂,服务开销较大。
- DMA
- MA方式是一种完全由硬件执行的I/O交换工作方式。
- DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和外围设备之间进行。
- 优点:数据传送速度很高,传送速率仅受到内存访问时间的限制。
- 缺点:需要更多的硬件。
- 适用于内存和高速外设之间大批数据交换的场合。
- 通道
- DMA方式的出现已经减轻了CPU对I/O操作的控制,使得CPU的效率有了显著提高,而通道的出现则进一步提高了CPU的效率
- CPU将部分权利下放给通道。通道是一个具有特殊功能的处理器,某些应用中成为输入输出处理器(IOP),它可以实现对外设的统一管理和外设与内存之间的数据传送。
- 优点:大大提高了CPU的工作效率
- 以花费更多硬件为代价
- 外围处理机(PPU)方式
- 外围处理机(Peripheral Processing Unit,PPU),是通道方式的进一步发展
- 由于PPU基本上独立于主机工作,其结构更接近于一般意义上的处理机,甚至就是微小型计算机。
- 在一些系统中,设置了多台PPU,分别承担I/O控制、通信、维护诊断等任务。
- 从某种意义上来说,这种系统已经变成分布式的多机系统
8.5 I/O与操作系统
操作系统的作用之一是在多进程之间进行进程保护,这种保护包括存储器访问和I/O操作两个方面。
/O操作主要是在外设和存储器之间进行,所以操作系统必须保证这些I/O操作的安全性。
8.5.1 DMA和虚拟存储器
DMA使用虚拟地址还是物理地址两种方式进行数据传输
- 使用物理地址进行DMA传输,存在以下两个问题:
- 问题
- 对于超过一页的数据缓冲区,由于缓冲区使用的页面在物理存储器中不一定是连续的,所以传输可能会发生问题。
- 如果DMA正在存储器和缓冲区之间传输数据时,操作系统从存储器中移出(或重定位)一些页面,那么,DMA将会在存储器中错误的物理页面上进行数据传输。
- 解决这些问题的方法
- 使操作系统在I/O的传输过程中确保DMA设备所访问的页面都位于物理存储器中,这些页面被称为是钉在了主存中。
- “虚拟DMA”技术:
- 允许DMA设备直接使用虚拟地址,并在DMA期间由硬件将虚拟地址转换为物理地址。
- 在采用虚拟DMA的情况下,如果进程在内存中被移动,操作系统应该能够及时地修改相应的DMA地址表。
8.5.2 I/O和Cache数据一致性
Cache会使一个数据出现两个副本:一个在Cache中,另一个在主存中。
I/O设备可以修改存储器中的内容:
-
把I/O连接到存储器上会出现以下情况:
- 对于写回法,CPU修改了Cache的内容后,由于存储器的内容跟不上Cache内容的变化,I/O系统进行输出操作时所看到的数据是旧值。(写直达Cache没有这样的问题)
- I/O系统进行输入操作后,存储器的内容发生了变化,但CPU在Cache中所看到的内容依然是旧值。
-
把I/O直接连接到Cache上
- 不会产生由I/O导致的数据不一致的问题
- 所有I/O设备和CPU都能在Cache中看到最新的数据
- I/O会跟CPU竞争访问Cache,在进行I/O时,会造成CPU的停顿
- I/O还可能会破坏Cache中CPU访问的内容,因为I/O操作可能导致一些新数据被加入Cache,而这些新数据可能在近期内并不会被CPU访问
- 许多计算机还是选择把I/O直接连接到存储器上,把存储器的一片区域作为I/O缓冲器,减少对CPU的打扰
解决内容一致性问题的方法:
- 软件的方法
- 设法保证I/O缓冲器中的所有各块都不在Cache中。
- 具体做法有两种
- 把I/O缓冲器的页面设置为不可进入Cache的,在进行输入操作时,操作系统总是把输入的数据放到该页面上。
- 在进行输入操作之前,操作系统先把Cache中与I/O缓冲器相关的数据“赶出”Cache,即把相应的数据块设置为“无效”状态。
- 硬件的方法
- 在进行输入操作时,检查相应的I/O地址(I/O缓冲器中的单元)是否在Cache中(即是否有数据副本)。
- 如果发现I/O地址在Cache中有匹配的项,就把相应的Cache块设置为“无效”。