2013-02-03 34 views
4

我想估計一個ARMcortex A9單核處理IRQ所需的操作碼數量。Linux內核需要多少條指令才能處理arm arm cortex A9上的中斷?

假設我使用Linux內核3.4,需要多少操作碼才能調用irq並執行irq_handler

+4

爲什麼操作碼?你是指指令還是時鐘週期? –

+0

你爲什麼問?不是允許的中斷頻率或延遲(從中斷硬件衝動到內核中的處理程序啓動還是應用程序中的信號處理程序)更相關? –

+0

@BillPringlemeir http://stackoverflow.com/questions/14698229/what-is-the-irq-latency-due-to-the-operating-system請填寫免費主題添加到這個問題,並回答它 – 0x90

回答

7

你的問題是關於如何計算Linux的interrupt latency。至少你可能會對你的中斷開始之前需要多長時間感興趣。這裏我們將忽略irqs的這個方面。

一個簡單的方法是切換GPIO並使用示波器測量中斷。您甚至可以多次切換GPIO以查看不同階段的時間。這個Window CE link顯示了一個衡量延遲的例子。某些中斷控制器(如IMX)具有I/O複用模式,其中一箇中斷號將升高/降低特定的I/O線。或者,您可以添加代碼來切換行(請參閱下面的例程)。

主要中斷處理源在entry-armv.S。有爲您使用的中斷控制器定義的宏,這些宏取決於.config文件。例如,存在先佔式中斷,多中斷控制器,SMP等。向量在入口部件的底部被定義爲S。一般的要點是檢查當前的操作模式,然後採取__irq_usr__irq_svc。這些例程有一個不同的預存儲狀態,但它們最終都會調用irq_handler宏。 _irq_usr有關於cmpxchg的內容,但是如果您在您的.config中指定了ARM皮質,則不適用。主要區別在於IRQ在用戶模式下發生後可能的上下文切換。你的機器定義了mach/entry-macro.S這是彙編器宏來訪問中斷控制器並獲得一箇中斷號。然後跳轉到頂層內核目錄中的通用irqhandling code

所以第二種方法是檢查代碼並直接計算它。如果您查看源代碼,編譯您的內核,然後在vmlinux圖像上執行objdump --disassemble並查找這些符號,這可能會更容易。您將看到擴展的irq_handler宏,它最終應該跳轉到您的IRQ代碼。

正如您從源頭上看到的那樣,還有TRACE_IRQFLAGS。您可以檢查是否可以在您使用的Cortex A9上使用make menuconfig(和/TRACE_IRQFLAGS)。我不知道它是否可用。

有變體如,

  1. 中斷從用戶/ SVC模式。
  2. 當前正在運行的其他中斷。
  3. 被中斷的代碼(如stm/ldm)可能需要一些時間才能完成。
  4. ISR中的頁面錯誤。至少在一些Linux版本中,一些Alsa驅動程序可能會導致未分配的頁面發生故障。
  5. ISR中的條件。

測量範圍將顯示抖動IRQ服務。檢查說明通常會顯示IRQ可能永遠不會被服務;例如,如果較高優先級的中斷不斷搶先/阻止IRQ。可能你需要同時做到這一點,以完全優化一個艱難的最後期限。

通常你不在乎整個IRQ需要多長時間,而是在IRQ行被觸發和寫入/讀取一些外設寄存器之間的時間。例如,FIFO可能具有有限的深度,如果發生和讀取IRQ之間的延遲的FIFO寄存器大於FIFO_SIZE X BPS,那麼你必須與FIFO四溢的問題。

FIQ基礎結構是快了很多,但你可以使用內核設施遠不如!

編輯:Cortex A9 technical reference在附錄B.大多數ARM指令指令計數是在大多數架構一個週期內,除了內存加載/存儲,倍數和分支機構。按照上面的第3段和第4段,找到完整的指令路徑來處理您的配置的Linux中斷,只需將其添加到;對於的估計值(正如原始問題所要求的那樣),您可以對指令進行計數,因爲它們通常是單個週期。

6

雖然你可以通過源代碼的檢查計算內核週期的理論最小數,實際發生的數量遠不如某些由於緩存,內存和存儲控制器的性能,其他的什麼核心是在做效果時間和各種其他因素,這取決於所討論的ARM處理器的微架構。

我懷疑你會過得更好的測量系統的實際中斷延遲性能,無論是使用數字「範圍或性能計數器。

當然,對於硬實時的應用程序,你需要知道最壞的情況下中斷延遲 - 其中包括所有這些因素的最壞情況。

+0

您能否詳細解釋一下如何從源代碼理論上衡量最糟糕的情況?謝謝 – 0x90

+0

如果沒有對整個CPU和內存子系統(例如Verilog或VHDL中的設計)進行準確的寄存器級模擬,以及在其上運行的工作負載,我看不到任何這樣做的方式,以便您可以對其進行建模設備中各種緩存的效果。再次,我認爲你必須測量它並作出一些假設。 – marko

+0

你一定可以粗略地約束它。如果你可以限制星球中的粒子數量,我認爲你可以限制ARM CPU在最好的情況下的工作方式 – 0x90