定义
Hard faults are also known as page faults. Despite the negative connotation of the name, this is not an error condition. Rather, it represents an instance where a block of memory needed by the operating system or an application has to be fetched from the page file on the hard disk instead of from physical memory. A consistently high number of hard faults per second indicates a large—perhaps excessive—reliance on virtual memory, with consequent adverse performance effects. 1
“硬错误”也名为“页面错误”。尽管字面上是负面的含义,但并非表示一种故障状态。它表示操作系统或应用程序访问的内存地址不在当前物理内存中,而在磁盘上的页面文件中的情况。每秒发生的“硬错误”数量长期处于较高说明系统过度依赖于虚拟内存,随之引起的是性能的下降。
内存中的数据在工作过程中难免会出现错误,而对于稳定性要求高的用户来说,比如完成一项需要连续求解30天的分析项目,内存中的数据错误可能会引起致命性的问题(死机、蓝屏、重启、数据丢失)和白白浪费宝贵的时间。内存错误根据其原因可分为硬错误和软错误。硬错误是由于硬件的损坏或缺陷造成的,因此数据总是不正确的,此类错误是无法纠正的;软错误是随机出现的,例如在内存附近突然出现电子干扰等因素,可能造成内存软错误的出现。2
处理方法针对MS-DOSMS-DOS处理硬错误的方法是相当直接的,当MS-DOS已运行到一定程度时发现上述的硬错误,就会与磁盘驱动器通讯。驱动器报告这个问题,MS-DOS就在屏幕上显示“Abort,Retry,Ignore?”信息。通常,用户纠正一下错误并给系统予以应答。MS-DOS然后按用户指定的动作行动,完成其任务,并返回到应用级。应用程序常常并不要系统自动地处理硬错误。或许,它们担心数据的完整性并要求直到写磁盘问题,或者它们要防止用户指明“Ignore”,或者它们并不想叫MS-DOS在不通知它们的情况下就在屏幕上显示。为了处理这些情形,MS-DOS让应用程序将硬错误处理程序的地址存放在INT24向量中。如果有这一硬错误处理程序,MS-DOS就调用它,而不调用自己的硬错误处理程序。3
当系统处理MS-DOS硬错误时,系统处于的状态并不一般,应用程序起动通过INT21向量调用MS-DOS,MS-DOS然后在其内调用较深的几层,在这里有一个MS-DOS内部过程即将硬错误处理程序调用到应用程序。因为MS-DOS通常不是可再入的,所以这时应用程序就不能通过INT21再调用MS-DOS,否则这样做就意味着在同一时刻已调用二次MS-DOS了。应用程序很可能在处理硬错误时,需要做屏幕和键盘I/O操作,所以MS-DOS被做成是部分可再入的。因起始调用包含磁盘I/O操作,所以MS-DOS可通过屏幕/键盘I/O调用再进入而不会产生问题。3
针对OS/2对于OS/2,有一些问题使我们不能按照MS-DOS的方法来做。首先,和单任务MS-DOS不同,OS/2不能在操作系统调用应用程序期间(这样的调用或许在很长时间内部不能返回)将操作暂停下来。第二,主要技术和安全性问题都包含在从0级(有特权的核心方式)到第3级(应用方式)的调用中。第三,在MS-DOS环境下,OS/2就不那么容易了,这是因为可能有多个进程使磁盘FAT扇区或磁盘目录被编辑,由于OS/2所使用的缓冲技术也会在没有进程做I/O操作时导致硬错误的出现。最后一点,即使我们解决了所有这些问题,引起硬错误的应用程序也会在后台屏幕组里运行,它不能显示信息或利用键盘。即使该应用程序在前台屏幕组内,如果它不是正控制屏幕和键盘的进程,它也不能使用屏幕和键盘。3
ECC功能为了提高内存中数据的可靠性,引入了ECC技术。ECC是Error Correcting Code的简写,中文名称是“错误检查和纠正”。ECC内存就是应用了这种技术的内存,一般多应用在服务器和图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。2
ECC纠错算法ECC内存技术是在数据位上额外的位存储一个用数据加密的代码,当数据被写入内存时相应的ECC代码同时也被保存下来,当重新读回刚才存储的数据时保存下来的ECC代码就会和读数据时产生的ECC代码作比较,如果两个代码不相同,则他们会被以确定数据中的哪一位是不正确的,然后这个错误位将会被抛弃,内存控制器会释放出正确的数据。被纠正的数据很少会被放回内存。假如相同的错误数据再次被读出,则纠正过程再次被执行。重写数据会增加处理过程的开销,会导致系统性能的明显降低。一般而言,同等性能等级的内存,当加入了ECC校验技术后会导致整体性能下降10%或更多。不过,这种纠错对大规模有限元分析等需要长期高负荷运行、时刻保持高度稳定性的应用来说是十分重要的。带ECC校验技术的内存价格一般会比普通内存贵一些。2
ECC内存认识误区一谈到服务器内存,大家一般都一致强调要买ECC内存,认为ECC内存速度快,其实这是一种错误的认识。ECC内存的成功之处并不是因为它的速度快,而是因为它有特殊的纠错能力,使服务器保持稳定。ECC本身并不是一种内存型号,也不是一种内存专用技术,它是广泛应用于各种计算机指令区域的一种指令纠错技术。之所以说它并不是一种内存型号,是因为它并不是一种影响内存结构和存储速度的技术。它可以用到不同的内存类型中,就像“奇偶校验”内存,它也不是一种单纯的硬件。2
带ECC校验的内存还要主板支持,并在BIOS中进行相应的设置,应用到大多数服务器主板上,一些厂商推出的入门级低端服务器使用的多是普通内存,无ECC功能,在选购时应该注意这个指标。由于ECC技术会增加成本,并且大多数家用计算机并不要求高度的可靠性,所以除XEON(志强)系列外,Intel公司的桌面级CPU(G、I3、I5、I7系列等)都不支持ECC内存。XEON(志强)CPU对内存的要求是向下兼容的,也就是说支持ECC内存也支持非ECC内存。2