1.写在前面
前面的博客我们已经介绍完了缓存,以及缓存失效的如何处理,还有就是缓存失效的处理策略等等。以及我们创建了多级缓存的机制,来最大的程度上对缓存的失效的时候的处理。
2.可靠的存储器层次
本章前面几节隐含了一个前提,即存储层次不会失效。如果这个前提不成立,只追求速度而没有可靠性就毫无吸引力的。正如第1章所述,增加可靠性的最好方法就是冗余。本节将首先回顾和可靠性有关的术语和度量,然后展开讲述如何采用冗余技术构造可靠的存储器。
2.1失效的定义
假设有某种服务的需求,用户可以看到一个系统在两种分别有需求的服务的状态之间交替:
- 服务完成:交付的服务与需求相符。
- 服务中断:交付的服务与需求不同。
失效导致状态1到状态2的转换,而从状态2到状态1的转换过程被称为恢复。失效可能永久性的间歇性的,间歇性失效更为复杂。因为当系统在两种状态之间摇摆时,诊断更加困难。而永久性失效更容易诊断。
这里引出两个相关术语:可靠性和可用性。
可靠性是一个系统能够持续提供用户需求的服务的度量,即从参考时刻到失效的时间间隔。因此,平均无故障时间(MTTF)是可靠性的度量方法。与之相关的一个术语是年度失效率(AFR),它是指给定MTTF一年内预期的器件失效百分比。当MTTF变大时,可能会产生误导性的结果,而AFR会带来更直观的结果。
服务中断使用平均修复时间(MTTR)来衡量。平均失效间隔时间(MTBF) = MTTF + MTTR。尽管MTBF被广泛使用,MTTF却更加合适。然后,可用性是指系统正常工作时间在连续两次服务中断间隔时间中所占的比例:
可用性 = MTTF / (MTTF + MTTR)
请注意,可靠性和可用性是可量化的,它们不仅仅是可信性的同义词。降低MTTR可以提高MTTF进而提高可用性。例如,用于故障检测、诊断和修复的工具可减少修复失效的时间,从而提高可用性。
我们希望系统有很高的可用性。一种简写是"每年可用性中9的数量"。例如,一个很好的网络服务可提供4或5个9的可用性。一年有3652460=526000分钟,简化表示如下:
依次类推。
为了提高MTTF,可以提高器件的质量,也可以设计能够在器件出现故障的情况下继续运行的系统。因此,由于器件的失效可能不会导致系统的失效,需要根据上下文对失效进行定义。为了明确二者的区别,用术语故障来表示器件的失效。以下是提高MTTF的三种方法:
- 故障避免技术:通过合理构建系统来避免故障的出现。
- 故障容忍技术:使用冗余技术,即使出现故障,仍然可以按照需求服务。
- 故障预测技术:预测故障的出现和构建,从而允许在器件故障前进行替换。
2.2纠正1位错、检测2位错的汉明编码
理查德汉明发明了一种广泛应用于存储器的冗余技术,并因此获得1968年的图灵奖。二进制数间的距离对于理解冗余码很有帮助。汉明距离是两个等长二进制数对应位置不同的位的数量。例如,011011和001111的距离为2.如果在一种编码中,码字之间的最小距离为2,且其中有1位错误,将会发生什么?这会将一个有效的码字转化为无效码字。因此,如果能够检测一个码字是否有效,就可以检测出1位的错误,称为1的错误检测编码。
汉明使用奇偶校验码进行错误检测。在奇偶校验码中,要计数一个字中1的个数是奇数还是偶数。当一个字被写入存储器时,奇偶校验位也被写入(1表示奇数,0表示偶数)。也就说,N+1位字中1的个数永远是偶数。当读出该字时,奇偶校验位也一并读出并检查。如果计算出的校验码与存储的不匹配,则发生错误。
如果有2位同时出错,则1位奇偶校验位技术无法检测到错误,因为码字奇偶性不变。
当然,奇偶校验码不能纠正错误,汉明想要做到检错的同时又能纠错。如果码组中最小距离为3,那么任意发生1位错误的码字与其对应的正确码字的距离,要小于它与其他有效码字的距离。他想出了一个容易理解的将数据映射到距离3的码字,为纪念汉明,我们将这种方法称为汉明纠错码(ECC)。我们使用额外的奇偶校验位确定单个错误的位置。以下是计算汉明纠错码的步骤:
- 从左到右由1开始依次编号,这与传统的从最右侧0开始编号相反。
- 将编号为2的整数幂的位标记为奇偶校验位。
- 剩余其他位用于数据位。
- 奇偶校验位的位置决定了其对应的数据位。
- 设置奇偶校验位,为各组进行偶校验。
3.虚拟机
虚拟机最早出现于20世纪60年代中期,多年来一直是大型机的重要组成部分。尽管在20世纪80和90年代,虚拟机大多被单用户个人计算机所忽视。但由于以下几个因素,最近虚拟机又重新受到关注:
- 在现代计算机系统中,隔离和安全的重要性日益增加。
- 标准操作系统在安全性和可靠性方面存在缺陷。
- 许多不相关用户共享一台计算机,特别是云计算。
- 几十年来,处理器速度大幅增加,这使得虚拟机的开销变得可以接受。
最广泛的虚拟机的定义包括所有基本的仿真方法,这些方法提供标准软件接口,例如Java VM。本节介绍虚拟机如何在二进制指令系统体系结构(ISA)的层次上,提供一个完整的系统级环境。虽然有些虚拟机在本地硬件上运行不同的ISA,但我们假设它们都能与硬件匹配。这些虚拟机被称为系统虚拟机。
系统虚拟机让用户觉得自己拥有包括操作系统副本在内的整台计算机。一台运行多个虚拟机的计算机可以支持多个不同的操作系统。在传统平台上,单个操作系统拥有所有硬件资源,但对于虚拟机,多个操作系统共享硬件资源。
支持虚拟机的软件被称为虚拟机监视器或管理程序,VMM是虚拟机技术的核心。底层硬件平台称为主机,它的资源被客户端虚拟机共享。VMM决定如何将虚拟资源映射到物理资源:物理资源可能是分时共享、划分甚至是软件模拟的。VMM比传统操作系统小得多,一个VMM的隔离区可能只有10000行代码。
尽管我们所感兴趣的在于虚拟机能够提供保护功能,但虚拟机还有两个具有商业价值的优点:
- 管理软件。虚拟机提供一个可以运行整个软件堆的抽象,甚至包括像DOS这样的旧操作系统。虚拟机的典型部署可能是:一些虚拟机运行旧的操作系统,多数虚拟机运行当前稳定操作系统版本,少数虚拟机测试下一个操作系统版本。
- 管理硬件。使用多台服务器的一个目的是使每个应用程序运行在一台独立的、有着与之兼容的操作系统的计算机上,因为这种分离可以提高可靠性。虚拟机使这些分离的软件堆独立运行,但共享硬件,从而合并了服务器的数量。另一个例子是,一些VMM支持将正在运行的VM移植到另一台计算机上,以平衡负载或在硬件发生故障时实施迁移。
亚马逊网络服务(AWS)在其云计算平台中使用虚拟机提供EC2,有以下五个原因:
- 多个用户共享相同的服务器时,AWS可保护用户免受彼此的影响。
- 它简化了存储级计算机上的软件发布。用户安装一个虚拟机镜像,并配置合适的软件,AWS为用户分配所需的虚拟机镜像。
- 在用户完成工作时,用户可以可靠地杀死虚拟机以控制资源的使用。
- 虚拟机隐藏了运行用户软件的硬件的特性,这意味着AWS可以继续使用旧服务器同时引入新的更高效的服务器。
- VMM可以控制虚拟机使用处理器、网络和磁盘的比例,这使AWS可以在相同底层服务器上提供不同类型的服务,这些服务对应不同的价格。
一般来说,处理器虚拟化的开销取决于工作负载。用户级处理器绑定的程序没有虚拟化开销,因为操作系统很少被调用,所以一切都以本地速度运行。I/O密集型工作负载通常也是操作系统密集型的,因为要执行很多系统调用和特权指令,从而导致很高的虚拟机开销。另一方面,如果I/O密集型工作负载也是受限于I/O的,那么处理器虚拟化的开销可以被完全隐藏,因为处理器通常处于空闲状态中等待I/O。
开销取决于VMM要模拟的指令数量以及模拟每条指令需要多少时间。因此,当客户端虚拟机与主机运行相同的ISA时,正如我们假设的那样,体系结构和VMM的目标是尽可能直接在本地硬件上运行所有的指令。
3.1虚拟机监视器的必备条件
虚拟机监视器需要做什么?它为客户端软件提供软件接口,隔离每个客户端的状态,并且必须保护自己免受客户端软件的侵害。定性的需求是:
- 除了与性能相关的行为或由于多个VM共享所导致的固定资源的限制外,客户端软件应该像在本地硬件上一样在虚拟机上运行。
- 客户端软件不能直接改变实际系统资源的分配。
为了虚拟化处理器,VMM必须控制几乎所有事情:特权态访问、I/O 例外和中断,即使客户端虚拟机和当前的操作系统知识临时使用它们。
例如,在发生定时器中断时,VMM将挂起当前正在运行的客户端虚拟机、保存状态、处理中断,确定下一个要运行的客户端虚拟机,并读取其状态。通过VMM为依赖于定时器中断的客户端虚拟机提供虚拟定时器并模拟定时器中断。
为方便管理,VMM必须拥有比客户虚拟机更高的权限,其中用户虚拟机通常在用户模式运行,这也确保了任何特权指令的执行都将由VMM处理。支持VMM的基本系统要求是:
- 至少有两种处理器模式:系统模式和用户模式。
- 特权指令集合只能在系统模式下使用,如果在用户模式下执行将会导致内陷;所有系统资源只能通过这些指令控制。
3.2指令系统体系结构对虚拟机的支持
如果在设计ISA时考虑到虚拟机,减少必须由VMM执行的指令数量并提高其仿真速度就相对容易。允许虚拟机直接在硬件上执行的体系结构被冠以可虚拟化的名称。
由于虚拟机仅在最近才被考虑应用于PC和服务器应用程序,因此大多数指令系统在创建时没有考虑虚拟化。这些指令系统包括x86和大多数RISC架构。
VMM必须确保客户系统仅与虚拟资源交互,因此传统的客户操作系统在VMM顶层运行用户模式程序。如果客户操作系统试图通过特权指令访问或修改与硬件资源相关的信息,那么它会陷入VMM,然后VMM可以对相应实际资源进行适当的更改。
因此,如果任何指令试图在用户模式下执行读或写这种敏感信息而产生自陷,VMM会拦截他并像客户操作系统所期望的那样,提供敏感信息的虚拟版本。
如果不提供上述支持,必须采取其他措施。VMM要采取特殊的预防措施来定位所有由问题的指令,并确保他们被客户操作系统正确执行,这在增加VMM的复杂性同时也降低了VM的运行性能。
3.3保护和指令系统体系结构
保护需要依靠体系结构和操作系统的共同努力,但是随着虚拟存储的广泛使用,体系结构设计者不得不修改现有指令系统体系结构中一些不方便的细节。
历史上,IBM大型机硬件和VMM采取以下三个步骤来提高虚拟机性能:
- 降低处理器虚拟化的开销
- 降低由虚拟机引起的中断开销
- 将中断交给相应的VM而不调用VMM,从而降低中断开销。
4.写在最后
本节博客主要简单介绍了虚拟机的一些技术。下节博客我们会继续介绍虚拟存储的技术。