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