[摘 要] 本文分析了PC平臺上PCI接口芯片PCI 9052的數(shù)據(jù)傳送性能及讀寫速度慢的原因。給出了相應的提高PCI9052讀寫速度的優(yōu)化方法。綜合采用本文提出的優(yōu)化方法實現(xiàn)的實驗結果,使讀寫速度提高了一倍。
[關鍵詞] PCI9052 讀寫速度 分析 優(yōu)化
PLX PCI9052是最常用的PCI接口芯片。其低廉的價格和良好的數(shù)據(jù)傳送性能,得到了普遍的應用。它可實現(xiàn)高性能的猝發(fā)式數(shù)據(jù)傳輸。但在PC平臺實際應用上,讀寫速度卻遠遠低于這一速度,沒有充分發(fā)揮它所提供的數(shù)據(jù)傳送能力。本文將就其讀寫速度問題進行分析,并給出提高讀寫速度的方法。
一、讀寫速度分析
PCI9052是一種能提供混合高性能PCI總線目標(從)模式的接口芯片,支持低成本從屬適配器。該芯片可與多種局部總線相連,芯片內(nèi)部包括一個64Byte的寫FIFO和一個32Byte 的讀FIFO,通過讀寫FIFOs,可實現(xiàn)高性能的猝發(fā)式數(shù)據(jù)傳輸,可提供133MB/s的猝發(fā)傳送速率。但在PC平臺上,PC到PCI9052的實際速度一般卻為4~5MB/S的讀。
造成讀寫速度慢的原因有兩種:
1.系統(tǒng)效率
PC平臺是在操作系統(tǒng)的管理下,需要通過各層次的調(diào)用才能訪問到具體硬件。這樣對PCI設備的訪問效率自然就降低了很多。另一方面,操作系統(tǒng)中和其他應用程序及進程,也需要占用大量的CPU時間,這樣對PCI設備的訪問效率上就會降低很多。另外,PCI是共享總線,如果有多個PCI設備存在,則每個PCI設備的訪問效率還要受分時訪問的影響。
2.猝發(fā)模式
造成讀寫速度慢的根本原因,就是讀寫模式。雖然PCI9052可實現(xiàn)高性能的猝發(fā)式數(shù)據(jù)傳輸,但對于PC平臺來說,實際并沒有實現(xiàn)高性能的較長的連續(xù)猝發(fā)式數(shù)據(jù)傳輸。
在x86(Intel)結構中,CPU發(fā)起的到PCI從設備 的讀是通過北橋芯片進行的,不是猝發(fā)模式。PCI設備是映射到非緩沖存儲器的,從PCI從設備的讀是非緩沖存儲器的讀。導致的直接結果是,到PCI從設備的讀是速度較慢的塊模式的讀,即在更早的讀完成前,其他的讀不是高性能的猝發(fā)式數(shù)據(jù)傳輸。因此,導致了這種情況:雖然設置和進行的是猝發(fā)模式讀,但最大的數(shù)據(jù)“猝發(fā)”被限制成x86 CPU能夠完成的沒有高速緩沖的最大的存儲器“單”讀。即64位,4字節(jié),2個PCI時鐘,全字節(jié)使能。通常,這是一個64位讀,使用指令MOVQ r64,mem來完成。因此,使用x86 CPU讀PCI從設備可以獲得的最大的讀是64位,或是“雙”數(shù)據(jù)段,而不是9052所提供的高性能的連續(xù)猝發(fā)式數(shù)據(jù)傳輸。
對于從PC平臺到PCI從設備寫來說,是短猝發(fā)寫,芯片組結構到目標設備的主存儲器的猝發(fā)每次不能大于4個長字,也就不允許較大的猝發(fā)。猝發(fā)寫要比猝發(fā)讀的速度要快。猝發(fā)寫的長度是讀的4倍,減少了寫操作的次數(shù),節(jié)約了三個相應的讀開始和結束周期,因此寫速度要比讀大約快4倍左右。
據(jù)上面分析可知,PCI9052讀寫速度慢,主要是PC平臺的原因造成的較小的短猝發(fā)。因此,要提高基于PC平臺下PCI9052的讀寫速度,一方面要對PCI9052的進行優(yōu)化設置;另一方面,主要是從PC平臺著手進行優(yōu)化,包括對系統(tǒng)的優(yōu)化,以提高效率,和讀寫操作的優(yōu)化,以實現(xiàn)較好的讀寫時序。
二、讀寫操作優(yōu)化
1.系統(tǒng)優(yōu)化
在進行PCI從設備操作時,盡可能減少其它進程的活動,盡量使系統(tǒng)時間用于PCI從設備的操作,減少訪問空閑,提高系統(tǒng)對PCI從設備的訪問時效。同時,盡量減少多個PCI從設備同時使用,避免多個PCI從設備分享PCI資源。在這一方面,LIUNX操作系統(tǒng)的效率要高于WINDOWS操作系統(tǒng)。
PC平臺的硬件方面,資源和性能配置盡量提高,特別是要有較大內(nèi)存空間,避免經(jīng)常性的讀寫速度較慢的硬盤。
2.讀寫優(yōu)化
(1)讀模式優(yōu)化
設置PCI 9052為Read Ahead Mode(預讀取模式),CNTRL置1。PCI 9052支持直接從預讀模式,數(shù)據(jù)讀取是從PCI 9052內(nèi)部FIFO讀。地址必需是前面連續(xù)的地址的并發(fā),且是32位數(shù)據(jù)(下一個地址是當前地址+4)。預讀取模式要求在用于預讀模式的存儲器映射空間的LASxBRD寄存器設置預取允許,PCI 9052就每一個I/O映射訪問刷新它的讀FIFO。同時,設置為零等待狀態(tài),這樣可以使PCI9052的讀加倍,實現(xiàn)8~10Mbytes/s的讀速度。
(2)其他讀優(yōu)化
分析可知,PCI從設備的存儲器映射為非緩沖存儲器??稍O置PCI從設備的存儲器映射為可緩沖,則當PCI從設備被CPU執(zhí)行單元讀時,這時緩沖單元在是完全的緩沖通道。對于連續(xù)地址是可以這樣做的。在 x86 高速緩沖通道大?。烤€64字節(jié))或是16個PCI數(shù)據(jù)傳送時鐘下,結果是“猝發(fā)”的。但在從同一地址傳送之前,必須刷新CPU高速緩沖,標志存儲器為直接寫,可以得到64字節(jié)的讀,但當重復從同一地址讀時,必須刷新全部的CPU高速緩沖,會導致以較大的猝發(fā)實現(xiàn)的失敗,甚至系統(tǒng)崩潰。這樣通常對系統(tǒng)是有害的。而系統(tǒng)分配給PCI地址后,就是固定的,也就必須完成上述的刷新全部的CPU高速緩沖的操作。
另外,允許執(zhí)行WBINVD高速緩沖刷新指令時獲得的操作系統(tǒng)接口,是一個解決途徑。WBINVD是個初始化指令,先擦除內(nèi)部Cache,并分配一個專用總線周期將外部Cache的內(nèi)容寫回主存,在此后的一個總線周期內(nèi)將外部Cache刷新。
(3)寫優(yōu)化
A:使用具有許多寫緩沖的芯片組,可以將到線性連續(xù)地址的連續(xù)寫組合成單個猝發(fā)。B:循環(huán)中使用MOVQ mem,m64指令,不用REP movsd指令。x86結構CPU的4長字的寫的性能接近50MB/s。C:把設備存儲器映射為USWC(無緩沖隨機聯(lián)合寫操作)。USWC把每一個小的寫入操作聯(lián)合成一個64位寫命令,再發(fā)到線性緩沖區(qū),這樣能夠減少寫操作次數(shù),提高寫速度。
三、實驗結果
利用本文提出的方法,對一款PCI卡進行了優(yōu)化測試試驗,該卡采用DSP6204數(shù)字處理器,內(nèi)部處理速度與數(shù)據(jù)傳送帶寬遠大于PCI總線的速度,在這一方面不存在影響PCI總線與PCI9052之間的數(shù)據(jù)傳送速度的因素。我們采用預讀取模式,在LINUX下可實現(xiàn)12MB/s的讀速度和28MB/s的寫速度。在WINDOWS 2000下,采用預讀取模式和USWC,可實現(xiàn)11MB/s的讀速度和30MB/s的寫速度。從實驗結果得知,LIUNX下的讀速度要比WINDOWS2000下的讀速度要快一些,這是由于系統(tǒng)效率問題的區(qū)別,而WINDOWS2000下的寫速度要比LINUX下要快一些,這是由于采用了設備存儲器映射為USWC。
四、結束語
本文從PC平臺對PCI設備的訪問機制出發(fā),從根本上分析了在PC平臺下,PCI接口芯片PCI 9052讀寫速度慢的原因,并給出了相應的優(yōu)化方法及實驗結果。由于PC平臺對PCI從設備訪問機制的原因,這些優(yōu)化不會從根本上得到大幅度提高,也不可能達到PC平臺及PCI9052所提供的133MB/S的數(shù)據(jù)傳送速率。如果有更高的數(shù)據(jù)交換速度的要求,只能使用象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