一、概述
1.關于zynq7035的ARM處理器一秒能夠支持多少次中斷觸發,需要綜合來考慮。需要確定ARM處理器的參數,目前zynq7000系列,使用的雙核Cortex-A9處理器。其中主頻大概在500MHZ~1GHZ左右,不同的用戶配置的主頻可能稍微有差別。
2.ARM處理器能夠接收觸發次數受多個因素影響:
首先,中斷處理本省需要的時間,就是中斷這個事件觸發后,需要保護現場,需要保存上下文,執行中斷服務程序ISR,然后ISR中斷服務程序完成后,恢復中斷上下文等。如果ISR中斷服務程序很短,可能每個中斷只是需要幾十到幾百個clock周期即可。
3.舉例:如果配置的時鐘主頻是667MHZ,一個周期大概就是1.5ns,如果中斷處理函數執行
需要100個clock,那么處理一個中斷需要150ns.那么1s/150ns=6.67百萬次中斷。這個值是理論上
的最大值,實際情況,由于中斷之間的沖突,中斷的優先級,cache hit or miss緩存擊中擊不中這些因素都會降低中斷響應效率。
4.除了要考慮ARM中對中斷的響應和中斷處理函數的處理速度,還需要考慮的一個點就是中斷控制器GIC本身的限制。Zynq的GIC通用中斷控制器對中斷頻率也是有影響的,GIC在處理中斷分發的時候,如果中斷過于頻繁,GIC會成為性能瓶頸,因為中斷頻繁觸發,導致系統沒有辦法處理其他任務,造成系統不穩定。
5.在實際的工程應用中,切記不要頻繁的使用中斷,一般需要考慮使用DMA方式或者硬件加速方式將CPU的負載能力降下來,較少CPU的負擔。
二、影響中斷觸發極限頻率的因素
1.中斷的類型
2.中斷處理程序ISR的處理速度
3.中斷控制器GIC的性能
4.上下文切換速度
5.保存現場,幀棧入棧和出棧的速度。
三、理論計算
1.CPU主頻:ARM9-cortex的主頻為667MHZ為例
2.中斷處理時間:
2.1.最小中斷延時,從觸發中斷到ISR中斷服務程序入口的時間:大概為20~30clock(也是硬件自動保存上下文的時間)
2.2.ISR中斷服務程序執行時間:這個取決于用戶,如果只是簡單的幾個寄存器操作,例如,關閉中斷或者清理中斷,那么,這個中斷服務程序可能只是需要50~100個clock;
2.3.中斷需要的總時間大概為70~130clock,時鐘頻率以667MHZ為例,那么一次中斷需要105~195ns.
3.綜上,1秒/105ns,大概最大為9.5百萬次中斷每秒
四、實際情況計算
1.GIC中斷控制器瓶頸
GIC的優先級仲裁和分發延遲增加高頻下的擁堵風險;
兩次中斷的中斷間隔需要大于GIC處理一次中斷的時間,一般大概幾百納秒;
2.系統總線競爭
目前zynq系統使用AXI總線,頻繁的中斷,可能導致AXI總線的帶寬使用競爭,這個
會對ISR中斷服務函數訪問外設或者內存的效率有很大的影響。
3.cache緩存或者流水線影響
高頻中斷可能導致cache訪問的抖動,也就是不穩定,會影響hit or miss命中的效率
4.操作系統的開銷
如果是linux系統,內核中斷處理top-half或者bottom-half的拆分會引入額外的延遲。
五、實際測試值
1.standalone裸機環境:這種情況下編寫的ISR中斷服務程序(匯編優化+寄存器直接操作)可以達到1~2百萬次/每秒
2.linux環境下:受到內核調度和中斷屏蔽影響,通道低于50萬次/秒。
六、高頻中斷使用建議
1.硬件輔助:使用PL端的FPGA邏輯實現多次中斷合并或者事件的計數,降低CPU中斷的頻率;
2.使用DMA傳輸:使用DMA在后臺搬動數據,替代CPU中斷驅動頻率,較少中斷次數;
3.輪詢模式:針對有些場景,需要權衡響應時間和CPU占用率;
4.不建議使用超高頻率中斷,對系統的穩定性有很大影響。