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