系统内存总线
很明显,系统的C P U对I / O的处理有着巨大的影响,但它不是I / O路径的必要组成部分。有一些系统体系结构用C P U作为I / O控制器,并藉此来实现在系统和外设间传输的数据。虽然这个方法在小型系统中能很好地工作,但对于一个服务器系统来说,远不是一个好的方法。因为本书主要是关于网络服务器系统,而不是针对处理数据的,所以,认为C P U不是I / O路径的一个组成部分,并假定存在一个智能I / O处理器,在无需C P U的干预下实现数据的传输。
在不考虑C P U的情况下,I / O路径的第一个组成部分是系统内存总线。如图2 - 1所示。
物理上系统内存总线是一个致密而高速的总线,它将C P U、主存储器和内存缓存连接在一起。通常,除了可以把内存缓存和主存芯片加到由系统厂商提供的插槽中,用户是不能在内存总线上另加设备的。虽然内存总线的体系结构基本上超出本书的讨论范围,但仍然有几个问题值得弄清楚,这将有助于了解讨论I / O路径的来龙去脉。
有趣的是有人将内存看成某种直接获取数据的袋子,但在C P U的微观世界里,情况并不是这样的。内存是一个电器设备,它同其他的设备一样通过请求/响应来发送信号,完成一个信号的发送往往要耗费C P U几个周期。从诸如磁盘驱动器这样的设备角度看,数据传输到内存的信号往往是微不足道的,但对C P U来说,其影响则十分巨大。因此,为了性能的缘故,通常使用桥接芯片将慢速I / O设备与系统内存分开,慢速I / O设备包括磁盘驱动器和网络适配器等,它们运行在主机I / O总线上,其结构如图2 - 2所示。
通常,我们将处理器性能与I / O性能分开来分析。处理器性能指标之一是从内存到C P U内部处理寄存器的速度,内存经常需要从存储设备接收数据,而这些设备却不连接在系统内存总线上。因此,假如内存不能足够快速地接收信息,并把它传输给处理器,那么,也将对C P U的性能产生负面影响。
这对虚拟内存操作的影响特别明显。虚拟内存是将额外的内存地址映射到存储设备,由此扩展可用内存的大小,这些存储设备并不位于系统存储总线。操作系统用虚拟内存存放不太重要的指令和数据,给更重要的指令和数据腾出内存空间。虚拟内存操作有两种形式,即页面请求和段交换,大部分现代操作系统用其中之一来管理它们的内存资源。
当C P U再次需要保存在虚拟内存中的指令和数据时,它们被重新装入物理内存,为C P U所用。数据从相对慢速的磁盘传输到高速内存会产生一定的时间延迟,这对系统的总体性能有着严重的影响。
除了虚拟内存操作以外,特别的存储应用也与系统内存总线的大量数据移动有关,如备份操作。很明显,数据在系统内存总线上的移动将引起时间延迟,使这些应用的性能受到负面的影响。因此,应该删除争用内存总线资源的不必要的进程,这将有助于改善它们的性能。
警告2 4位位图和3 - D屏幕保护程序消耗相当多的内存总线带宽,最好是将这些带宽用于其他的存储I / O进程。假如在服务器上没有必要应用高质量的图形显示,则尽量不使用它们。不要运行屏幕保护程序,因为它们既消耗处理器的周期,也消耗总线带宽。一个空的屏幕可能并不耀眼,但它却用不着损耗更多的总线能力。
总线控制是主机I / O总线适配器应用的一种技术,这种技术允许主机I / O总线适配器向其他适配器传输数据,而无需系统处理器的干预。一般说来,总线控制使C P U和总线有更高的使用率,结果可以增加系统的总体性能。要想一个服务器工作效率到达顶峰状态,系统中的所有主机I / O 总线适配器都应该是总线控制的。
注意当问及是否服务器需要安装更多的内存时,答案可能不止一种。但在性能是第一需要时,内存是不可替代的。当一个服务器的系统性能达到饱和时,增加内存比增加处理器的速度更有效。