论文部分内容阅读
[摘 要] 本文分析了PC平台上PCI接口芯片PCI 9052的数据传送性能及读写速度慢的原因。给出了相应的提高PCI9052读写速度的优化方法。综合采用本文提出的优化方法实现的实验结果,使读写速度提高了一倍。
[关键词] PCI9052 读写速度 分析 优化
PLX PCI9052是最常用的PCI接口芯片。其低廉的价格和良好的数据传送性能,得到了普遍的应用。它可实现高性能的猝发式数据传输。但在PC平台实际应用上,读写速度却远远低于这一速度,没有充分发挥它所提供的数据传送能力。本文将就其读写速度问题进行分析,并给出提高读写速度的方法。
一、读写速度分析
PCI9052是一种能提供混合高性能PCI总线目标(从)模式的接口芯片,支持低成本从属适配器。该芯片可与多种局部总线相连,芯片内部包括一个64Byte的写FIFO和一个32Byte 的读FIFO,通过读写FIFOs,可实现高性能的猝发式数据传输,可提供133MB/s的猝发传送速率。但在PC平台上,PC到PCI9052的实际速度一般却为4~5MB/S的读。
造成读写速度慢的原因有两种:
1.系统效率
PC平台是在操作系统的管理下,需要通过各层次的调用才能访问到具体硬件。这样对PCI设备的访问效率自然就降低了很多。另一方面,操作系统中和其他应用程序及进程,也需要占用大量的CPU时间,这样对PCI设备的访问效率上就会降低很多。另外,PCI是共享总线,如果有多个PCI设备存在,则每个PCI设备的访问效率还要受分时访问的影响。
2.猝发模式
造成读写速度慢的根本原因,就是读写模式。虽然PCI9052可实现高性能的猝发式数据传输,但对于PC平台来说,实际并没有实现高性能的较长的连续猝发式数据传输。
在x86(Intel)结构中,CPU发起的到PCI从设备 的读是通过北桥芯片进行的,不是猝发模式。PCI设备是映射到非缓冲存储器的,从PCI从设备的读是非缓冲存储器的读。导致的直接结果是,到PCI从设备的读是速度较慢的块模式的读,即在更早的读完成前,其他的读不是高性能的猝发式数据传输。因此,导致了这种情况:虽然设置和进行的是猝发模式读,但最大的数据“猝发”被限制成x86 CPU能够完成的没有高速缓冲的最大的存储器“单”读。即64位,4字节,2个PCI时钟,全字节使能。通常,这是一个64位读,使用指令MOVQ r64,mem来完成。因此,使用x86 CPU读PCI从设备可以获得的最大的读是64位,或是“双”数据段,而不是9052所提供的高性能的连续猝发式数据传输。
对于从PC平台到PCI从设备写来说,是短猝发写,芯片组结构到目标设备的主存储器的猝发每次不能大于4个长字,也就不允许较大的猝发。猝发写要比猝发读的速度要快。猝发写的长度是读的4倍,减少了写操作的次数,节约了三个相应的读开始和结束周期,因此写速度要比读大约快4倍左右。
据上面分析可知,PCI9052读写速度慢,主要是PC平台的原因造成的较小的短猝发。因此,要提高基于PC平台下PCI9052的读写速度,一方面要对PCI9052的进行优化设置;另一方面,主要是从PC平台着手进行优化,包括对系统的优化,以提高效率,和读写操作的优化,以实现较好的读写时序。
二、读写操作优化
1.系统优化
在进行PCI从设备操作时,尽可能减少其它进程的活动,尽量使系统时间用于PCI从设备的操作,减少访问空闲,提高系统对PCI从设备的访问时效。同时,尽量减少多个PCI从设备同时使用,避免多个PCI从设备分享PCI资源。在这一方面,LIUNX操作系统的效率要高于WINDOWS操作系统。
PC平台的硬件方面,资源和性能配置尽量提高,特别是要有较大内存空间,避免经常性的读写速度较慢的硬盘。
2.读写优化
(1)读模式优化
设置PCI 9052为Read Ahead Mode(预读取模式),CNTRL置1。PCI 9052支持直接从预读模式,数据读取是从PCI 9052内部FIFO读。地址必需是前面连续的地址的并发,且是32位数据(下一个地址是当前地址+4)。预读取模式要求在用于预读模式的存储器映射空间的LASxBRD寄存器设置预取允许,PCI 9052就每一个I/O映射访问刷新它的读FIFO。同时,设置为零等待状态,这样可以使PCI9052的读加倍,实现8~10Mbytes/s的读速度。
(2)其他读优化
分析可知,PCI从设备的存储器映射为非缓冲存储器。可设置PCI从设备的存储器映射为可缓冲,则当PCI从设备被CPU执行单元读时,这时缓冲单元在是完全的缓冲通道。对于连续地址是可以这样做的。在 x86 高速缓冲通道大小(每线64字节)或是16个PCI数据传送时钟下,结果是“猝发”的。但在从同一地址传送之前,必须刷新CPU高速缓冲,标志存储器为直接写,可以得到64字节的读,但当重复从同一地址读时,必须刷新全部的CPU高速缓冲,会导致以较大的猝发实现的失败,甚至系统崩溃。这样通常对系统是有害的。而系统分配给PCI地址后,就是固定的,也就必须完成上述的刷新全部的CPU高速缓冲的操作。
另外,允许执行WBINVD高速缓冲刷新指令时获得的操作系统接口,是一个解决途径。WBINVD是个初始化指令,先擦除内部Cache,并分配一个专用总线周期将外部Cache的内容写回主存,在此后的一个总线周期内将外部Cache刷新。
(3)写优化
A:使用具有许多写缓冲的芯片组,可以将到线性连续地址的连续写组合成单个猝发。B:循环中使用MOVQ mem,m64指令,不用REP movsd指令。x86结构CPU的4长字的写的性能接近50MB/s。C:把设备存储器映射为USWC(无缓冲随机联合写操作)。USWC把每一个小的写入操作联合成一个64位写命令,再发到线性缓冲区,这样能够减少写操作次数,提高写速度。
三、实验结果
利用本文提出的方法,对一款PCI卡进行了优化测试试验,该卡采用DSP6204数字处理器,内部处理速度与数据传送带宽远大于PCI总线的速度,在这一方面不存在影响PCI总线与PCI9052之间的数据传送速度的因素。我们采用预读取模式,在LINUX下可实现12MB/s的读速度和28MB/s的写速度。在WINDOWS 2000下,采用预读取模式和USWC,可实现11MB/s的读速度和30MB/s的写速度。从实验结果得知,LIUNX下的读速度要比WINDOWS2000下的读速度要快一些,这是由于系统效率问题的区别,而WINDOWS2000下的写速度要比LINUX下要快一些,这是由于采用了设备存储器映射为USWC。
四、结束语
本文从PC平台对PCI设备的访问机制出发,从根本上分析了在PC平台下,PCI接口芯片PCI 9052读写速度慢的原因,并给出了相应的优化方法及实验结果。由于PC平台对PCI从设备访问机制的原因,这些优化不会从根本上得到大幅度提高,也不可能达到PC平台及PCI9052所提供的133MB/S的数据传送速率。如果有更高的数据交换速度的要求,只能使用象PCI9054这样可以进行DMA传送的价位较高的接口芯片。
参考文献:
[1]PLX Technology Inc.PCI 9052 Data Book[M].2.0 2001
[2]Intel Corporation.IA-32 Intel Architecture Software Devel-oper’s Manual Volume 2:Instruction Set Reference[M/OL].1999[2006-05-08].http://www.intel.com/Order Number 245471-012
[3]孙德文:微型计算机技术[M].北京:高等教育出版社,2004
[关键词] PCI9052 读写速度 分析 优化
PLX PCI9052是最常用的PCI接口芯片。其低廉的价格和良好的数据传送性能,得到了普遍的应用。它可实现高性能的猝发式数据传输。但在PC平台实际应用上,读写速度却远远低于这一速度,没有充分发挥它所提供的数据传送能力。本文将就其读写速度问题进行分析,并给出提高读写速度的方法。
一、读写速度分析
PCI9052是一种能提供混合高性能PCI总线目标(从)模式的接口芯片,支持低成本从属适配器。该芯片可与多种局部总线相连,芯片内部包括一个64Byte的写FIFO和一个32Byte 的读FIFO,通过读写FIFOs,可实现高性能的猝发式数据传输,可提供133MB/s的猝发传送速率。但在PC平台上,PC到PCI9052的实际速度一般却为4~5MB/S的读。
造成读写速度慢的原因有两种:
1.系统效率
PC平台是在操作系统的管理下,需要通过各层次的调用才能访问到具体硬件。这样对PCI设备的访问效率自然就降低了很多。另一方面,操作系统中和其他应用程序及进程,也需要占用大量的CPU时间,这样对PCI设备的访问效率上就会降低很多。另外,PCI是共享总线,如果有多个PCI设备存在,则每个PCI设备的访问效率还要受分时访问的影响。
2.猝发模式
造成读写速度慢的根本原因,就是读写模式。虽然PCI9052可实现高性能的猝发式数据传输,但对于PC平台来说,实际并没有实现高性能的较长的连续猝发式数据传输。
在x86(Intel)结构中,CPU发起的到PCI从设备 的读是通过北桥芯片进行的,不是猝发模式。PCI设备是映射到非缓冲存储器的,从PCI从设备的读是非缓冲存储器的读。导致的直接结果是,到PCI从设备的读是速度较慢的块模式的读,即在更早的读完成前,其他的读不是高性能的猝发式数据传输。因此,导致了这种情况:虽然设置和进行的是猝发模式读,但最大的数据“猝发”被限制成x86 CPU能够完成的没有高速缓冲的最大的存储器“单”读。即64位,4字节,2个PCI时钟,全字节使能。通常,这是一个64位读,使用指令MOVQ r64,mem来完成。因此,使用x86 CPU读PCI从设备可以获得的最大的读是64位,或是“双”数据段,而不是9052所提供的高性能的连续猝发式数据传输。
对于从PC平台到PCI从设备写来说,是短猝发写,芯片组结构到目标设备的主存储器的猝发每次不能大于4个长字,也就不允许较大的猝发。猝发写要比猝发读的速度要快。猝发写的长度是读的4倍,减少了写操作的次数,节约了三个相应的读开始和结束周期,因此写速度要比读大约快4倍左右。
据上面分析可知,PCI9052读写速度慢,主要是PC平台的原因造成的较小的短猝发。因此,要提高基于PC平台下PCI9052的读写速度,一方面要对PCI9052的进行优化设置;另一方面,主要是从PC平台着手进行优化,包括对系统的优化,以提高效率,和读写操作的优化,以实现较好的读写时序。
二、读写操作优化
1.系统优化
在进行PCI从设备操作时,尽可能减少其它进程的活动,尽量使系统时间用于PCI从设备的操作,减少访问空闲,提高系统对PCI从设备的访问时效。同时,尽量减少多个PCI从设备同时使用,避免多个PCI从设备分享PCI资源。在这一方面,LIUNX操作系统的效率要高于WINDOWS操作系统。
PC平台的硬件方面,资源和性能配置尽量提高,特别是要有较大内存空间,避免经常性的读写速度较慢的硬盘。
2.读写优化
(1)读模式优化
设置PCI 9052为Read Ahead Mode(预读取模式),CNTRL置1。PCI 9052支持直接从预读模式,数据读取是从PCI 9052内部FIFO读。地址必需是前面连续的地址的并发,且是32位数据(下一个地址是当前地址+4)。预读取模式要求在用于预读模式的存储器映射空间的LASxBRD寄存器设置预取允许,PCI 9052就每一个I/O映射访问刷新它的读FIFO。同时,设置为零等待状态,这样可以使PCI9052的读加倍,实现8~10Mbytes/s的读速度。
(2)其他读优化
分析可知,PCI从设备的存储器映射为非缓冲存储器。可设置PCI从设备的存储器映射为可缓冲,则当PCI从设备被CPU执行单元读时,这时缓冲单元在是完全的缓冲通道。对于连续地址是可以这样做的。在 x86 高速缓冲通道大小(每线64字节)或是16个PCI数据传送时钟下,结果是“猝发”的。但在从同一地址传送之前,必须刷新CPU高速缓冲,标志存储器为直接写,可以得到64字节的读,但当重复从同一地址读时,必须刷新全部的CPU高速缓冲,会导致以较大的猝发实现的失败,甚至系统崩溃。这样通常对系统是有害的。而系统分配给PCI地址后,就是固定的,也就必须完成上述的刷新全部的CPU高速缓冲的操作。
另外,允许执行WBINVD高速缓冲刷新指令时获得的操作系统接口,是一个解决途径。WBINVD是个初始化指令,先擦除内部Cache,并分配一个专用总线周期将外部Cache的内容写回主存,在此后的一个总线周期内将外部Cache刷新。
(3)写优化
A:使用具有许多写缓冲的芯片组,可以将到线性连续地址的连续写组合成单个猝发。B:循环中使用MOVQ mem,m64指令,不用REP movsd指令。x86结构CPU的4长字的写的性能接近50MB/s。C:把设备存储器映射为USWC(无缓冲随机联合写操作)。USWC把每一个小的写入操作联合成一个64位写命令,再发到线性缓冲区,这样能够减少写操作次数,提高写速度。
三、实验结果
利用本文提出的方法,对一款PCI卡进行了优化测试试验,该卡采用DSP6204数字处理器,内部处理速度与数据传送带宽远大于PCI总线的速度,在这一方面不存在影响PCI总线与PCI9052之间的数据传送速度的因素。我们采用预读取模式,在LINUX下可实现12MB/s的读速度和28MB/s的写速度。在WINDOWS 2000下,采用预读取模式和USWC,可实现11MB/s的读速度和30MB/s的写速度。从实验结果得知,LIUNX下的读速度要比WINDOWS2000下的读速度要快一些,这是由于系统效率问题的区别,而WINDOWS2000下的写速度要比LINUX下要快一些,这是由于采用了设备存储器映射为USWC。
四、结束语
本文从PC平台对PCI设备的访问机制出发,从根本上分析了在PC平台下,PCI接口芯片PCI 9052读写速度慢的原因,并给出了相应的优化方法及实验结果。由于PC平台对PCI从设备访问机制的原因,这些优化不会从根本上得到大幅度提高,也不可能达到PC平台及PCI9052所提供的133MB/S的数据传送速率。如果有更高的数据交换速度的要求,只能使用象PCI9054这样可以进行DMA传送的价位较高的接口芯片。
参考文献:
[1]PLX Technology Inc.PCI 9052 Data Book[M].2.0 2001
[2]Intel Corporation.IA-32 Intel Architecture Software Devel-oper’s Manual Volume 2:Instruction Set Reference[M/OL].1999[2006-05-08].http://www.intel.com/Order Number 245471-012
[3]孙德文:微型计算机技术[M].北京:高等教育出版社,2004