雙機通信在CPCI總線上的實現
發布時間:2007/4/23 0:00:00 訪問次數:2465
在電信、電力、國防等應用領域中,經常要求其所用設備有極高的實時性。當需要在各個設備間進行大容量的信息交換時,傳統的網絡包交換模式已不能很好地滿足實時性的要求。而借助于CPCI總線,兩個設備可以互訪對方的內存,具有傳輸速度快、傳輸容量大和高可靠性等特點,非常適合大容量的信息傳遞。國家數字交換系統工程技術研究中心承擔的國家863計劃項目——“中國第三代移動通信系統”CDMA2000系統集成就選擇基于CPCI總線的多SBC平臺。各個SBC間的通信效率直接決定了整個系統性能的高低。
目前常用的實時操作系統如VxWorks、Lynx等,都針對CPCI總線實現了消息隊列,可用于SBC間的消息通信。但VxWorks、Lynx中消息傳遞的實現方式很不靈活,一般是通過在一個特定的SBC(通常為system board)中開啟一塊共享內存,其他各個SBC(通常為non system board)通過對共享內存的讀寫交換信息;每完成一次兩個non system SBC間的信息交換,都要進行一次PCI讀寫操作,效率不高。另外VxWorks、Lynx中的消息長度都有一個最大值,當要進行大數據量(如1GB的內存數據庫)的信息傳輸時,操作系統提供消息傳遞機制也無能為力。而以上這些問題,都可以通過任意兩個SBC間的直接內存訪問得到解決。本文首先介紹了PCI Bridge的工作原理;然后以Motorola公司提供的CPX8000系列工控機為例,討論了兩個SBC是如何基于背板(Backplane)上的CPCI總線,并利用PCI Bridge的地址映射機制,通過互訪內存的方式最終實現雙機通信;最后介紹了實際應用時應注意的性能優化問題。
1 PCI Bridge的工作原理
在簡單的計算機系統中,其擁有的外部設備較少,單級總線結構便能滿足系統的需要。但是由于單個 PCI總線可支持的 PCI 設備數量有電氣限制,對擁有大量外設的計算機系統而言,單級總線結構已不能滿足系統的要求,因此便產生了橋接設備。通過PCI-to-PCI Bridge可擴展出新的PCI總線,通過PCI-to-ISA Bridge可擴展出ISA總線。借助PCI Bridge這些特殊的PCI設備,系統中各級總線被粘和在一起,使整個系統成為一個有機整體。
每個PCI設備都有自己的PCI I/O空間、PCI內存空間和PCI配置空間(configuration space)。PCI設備的設備驅動程序對PCI配置空間進行初始化設置后,各個智能控制器如CPU、DMA控制器等,可以對PCI設備的PCI I/O空間、PCI內存空間進行訪問。在圖1中,CPU若要訪問網卡,首先會在PCI Bus0上生成一個物理地址,這個地址經PCI-to-PCI Bridge的過濾及轉換后,在PCI Bus1上產生一PCI Bus地址,網卡通過地址譯碼,響應對這個地址的訪問。
圖1 基于PCI的系統
從這個過程可以了解到,PCI-to-PCI Bridge有兩種基本的功能:
(1)地址映射功能。雖然同是對網卡進行訪問,但PCI Bus0與PCI Bus1上的地址意義是不同的。兩個地址分屬各自的地址空間,通過PCI-to-PCI Bridge實現兩個地址的映射。根據這兩個地址是否相同,可將PCI-to-PCI Bridge區分為兩種類型:
·PCI-to-PCI Transparent Bridge。PCI Bridge不對PCI Bus0上的地址進行轉換,直接將其映射到PCI Bus1上。PCI Bus0與PCI Bus1上的地址是相同的。
·PCI-to-PCI Non Transparent Bridge。PCI Bus0上的地址必須經過PCI Bridge的轉換,才能映射到PCI Bus1上。PCI Bus0與PCI Bus1上的地址是不同的。
(2)地址過濾功能。PCI Bridge在把PCI Bus0上的地址向下游總線(ISA Bus、PCI Bus1)傳遞時,具有選擇性。在圖1中,CPU在PCI Bus0上所產生的地址,只有對SCSI和Ethernet的訪問,PCI-to-PCI Bridge才予以接收;而對于PCI Bus0的其他地址,PCI-to-PCI Bridge均不予響應。每一個PCI Bridge所響應的地址范圍,可形象地稱其為此PCI Bridge的地址窗口,只有當上游總線的地址落進PCI Bridge的地址窗口中,PCI Bridge才響應此地址并向下游總線傳遞。
2 雙機通信的具體實現
本節以Motorola公司提供的CPX8000系列工控機為例,介紹了如何通過CPCI總線實現雙機間的通信。如圖2所示,兩個SBC通過背板上的CPCI總線實現了物理上的連接。如果兩個SBC能夠互相訪問對方的內存,就可實現兩者間的數據交流。以系統處理機板(System Processor Board,又稱主機板)訪問非系統處理機板(Non-system Processor Board, 又稱子機板)內存為例,介紹雙機通信的具體實現。本方案已在Lynx及VxWorks實時操作系統上實現。
在圖2中,主機板CPU若要訪問子機板中的1MB內存單元,必須將這塊內存映射到主機板CPU的虛擬地址空間中,可以通過對主機板、子機板、主機板與子機板的接口配置來達到目的。此1MB的內存單元可被映射到不同的地址空間(如CPU虛擬地址空間、物理地址空間、本地PCI地址空間、系統CPCI地址空間等),映射地址也各不相同。在圖2中,對于此1MB內存的起始單元在不同地址空間中的映射地址,分別用符號A1、A2、…A7表示。
在電信、電力、國防等應用領域中,經常要求其所用設備有極高的實時性。當需要在各個設備間進行大容量的信息交換時,傳統的網絡包交換模式已不能很好地滿足實時性的要求。而借助于CPCI總線,兩個設備可以互訪對方的內存,具有傳輸速度快、傳輸容量大和高可靠性等特點,非常適合大容量的信息傳遞。國家數字交換系統工程技術研究中心承擔的國家863計劃項目——“中國第三代移動通信系統”CDMA2000系統集成就選擇基于CPCI總線的多SBC平臺。各個SBC間的通信效率直接決定了整個系統性能的高低。
目前常用的實時操作系統如VxWorks、Lynx等,都針對CPCI總線實現了消息隊列,可用于SBC間的消息通信。但VxWorks、Lynx中消息傳遞的實現方式很不靈活,一般是通過在一個特定的SBC(通常為system board)中開啟一塊共享內存,其他各個SBC(通常為non system board)通過對共享內存的讀寫交換信息;每完成一次兩個non system SBC間的信息交換,都要進行一次PCI讀寫操作,效率不高。另外VxWorks、Lynx中的消息長度都有一個最大值,當要進行大數據量(如1GB的內存數據庫)的信息傳輸時,操作系統提供消息傳遞機制也無能為力。而以上這些問題,都可以通過任意兩個SBC間的直接內存訪問得到解決。本文首先介紹了PCI Bridge的工作原理;然后以Motorola公司提供的C8000系列工控機為例,討論了兩個SBC是如何基于背板(Backplane)上的CPCI總線,并利用PCI Bridge的地址映射機制,通過互訪內存的方式最終實現雙機通信;最后介紹了實際應用時應注意的性能優化問題。
1 PCI Bridge的工作原理
在簡單的計算機系統中,其擁有的外部設備較少,單級總線結構便能滿足系統的需要。但是由于單個 PCI總線可支持的 PCI 設備數量有電氣限制,對擁有大量外設的計算機系統而言,單級總線結構已不能滿足系統的要求,因此便產生了橋接設備。通過PCI-to-PCI Bridge可擴展出新的PCI總線,通過PCI-to-ISA Bridge可擴展出ISA總線。借助PCI Bridge這些特殊的PCI設備,系統中各級總線被粘和在一起,使整個系統成為一個有機整體。
每個PCI設備都有自己的PCI I/O空間、PCI內存空間和PCI配置空間(configuration space)。PCI設備的設備驅動程序對PCI配置空間進行初始化設置后,各個智能控制器如CPU、DMA控制器等,可以對PCI設備的PCI I/O空間、PCI內存空間進行訪問。在圖1中,CPU若要訪問網卡,首先會在PCI Bus0上生成一個物理地址,這個地址經PCI-to-PCI Bridge的過濾及轉換后,在PCI Bus1上產生一PCI Bus地址,網卡通過地址譯碼,響應對這個地址的訪問。
圖1 基于PCI的系統
從這個過程可以了解到,PCI-to-PCI Bridge有兩種基本的功能:
(1)地址映射功能。雖然同是對網卡進行訪問,但PCI Bus0與PCI Bus1上的地址意義是不同的。兩個地址分屬各自的地址空間,通過PCI-to-PCI Bridge實現兩個地址的映射。根據這兩個地址是否相同,可將PCI-to-PCI Bridge區分為兩種類型:
·PCI-to-PCI Transparent Bridge。PCI Bridge不對PCI Bus0上的地址進行轉換,直接將其映射到PCI Bus1上。PCI Bus0與PCI Bus1上的地址是相同的。
·PCI-to-PCI Non Transparent Bridge。PCI Bus0上的地址必須經過PCI Bridge的轉換,才能映射到PCI Bus1上。PCI Bus0與PCI Bus1上的地址是不同的。
(2)地址過濾功能。PCI Bridge在把PCI Bus0上的地址向下游總線(ISA Bus、PCI Bus1)傳遞時,具有選擇性。在圖1中,CPU在PCI Bus0上所產生的地址,只有對SCSI和Ethernet的訪問,PCI-to-PCI Bridge才予以接收;而對于PCI Bus0的其他地址,PCI-to-PCI Bridge均不予響應。每一個PCI Bridge所響應的地址范圍,可形象地稱其為此PCI Bridge的地址窗口,只有當上游總線的地址落進PCI Bridge的地址窗口中,PCI Bridge才響應此地址并向下游總線傳遞。
2 雙機通信的具體實現
本節以Motorola公司提供的C8000系列工控機為例,介紹了如何通過CPCI總線實現雙機間的通信。如圖2所示,兩個SBC通過背板上的CPCI總線實現了物理上的連接。如果兩個SBC能夠互相訪問對方的內存,就可實現兩者間的數據交流。以系統處理機板(System Processor Board,又稱主機板)訪問非系統處理機板(Non-system Processor Board, 又稱子機板)內存為例,介紹雙機通信的具體實現。本方案已在Lynx及VxWorks實時操作系統上實現。
在圖2中,主機板CPU若要訪問子機板中的1MB內存單元,必須將這塊內存映射到主機板CPU的虛擬地址空間中,可以通過對主機板、子機板、主機板與子機板的接口配置來達到目的。此1MB的內存單元可被映射到不同的地址空間(如CPU虛擬地址空間、物理地址空間、本地PCI地址空間、系統CPCI地址空間等),映射地址也各不相同。在圖2中,對于此1MB內存的起始單元在不同地址空間中的映射地址,分別用符號A1、A2、…A7表示。
上一篇:超寬帶雷達信號電路的設計與實現
上一篇:用于清除數據噪聲的簡單數字濾波器
熱門點擊