為了讓英創更多的Linux主板能夠滿足工業應用在實時性上的要求,我們在ESM6800H/E和ESM7000系列主板的內核(4.9.11)基礎上,使用了針對該版本的RT PATCH(實時補丁),將系統升級為實時Linux系統,讓主板能夠滿足一定的實時性需求。ESM6800H/E板載Crotex A7架構CPU(iMX6ULL),主頻為792MHz,是一款性價比極高的工控主板。而ESM7000系列主板板載雙核Crotex A7架構CPU(iMX7D),主頻為1GHz,是性能非常強勁的工控主板系列,客戶可以根據性價比以和性能來選擇符合需求的工控主板進行開發,同時這兩個系列的主板硬件和軟件都是兼容的,方便客戶根據不同應用需求無縫替換主板。
實時Linux系統主要是提升了實時線程的響應時間,所以對于應用程序來說,只需要對有實時要求的線程設置實時優先級屬性,以及設置響應的實時線程調度策略就可以了,并沒有特殊的API函數。英創公司網站上面有專門關于設置實時線程的相關編程介紹,可以參考《移植Real Time Linux到英創工控主板》。本文主要介紹ESM6800和ESM7000升級實時Linux系統后對于實時性提升的測試實驗。
為了驗證系統的實時性,我們采用了兩種方法來測試,第一種方法是采用實時Linux網站推薦的測試工具cyclictest,這個工具會先創建一個普通進程,然后再根據參數創建實時線程,并定時喚醒和休眠實時線程,通過對比實時線程預期喚醒時間和實際喚醒時間來計算出系統的響應時間。第二種方法是由GPIO中斷作為硬件事件,使用外部的方波信號作為中斷源,驅動檢測到GPIO中斷后會喚醒用戶層的中斷處理線程(該線程已設置為實時線程),實時中斷處理線程作為對中斷事件的響應,將另一位GPIO的輸出電平反相(Toggle處理)。用示波器測量輸入的中斷信號和作為響應的GPIO信號之間的時間延遲。
因為系統實時性還和負載也有一定的關系,所以我們采用了空載和滿載兩種情況測試,滿載的測試條件是考慮模擬出對系統實時性最差的情況,即將CPU的使用率以及IO的使用率全部提升到滿載。滿載和空載是兩種相對極端的情況,最終的實時性還是應該以實際使用的負載和運行的程序而定,關于系統負載和實時性測試的相關介紹可以通過網站https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/test-design來了解。
首先是第一種方法采用cyclictest工具來進行測試,通過軟件來記錄全部數據,并且可以采集大量數據來參考,結果如下:
主板型號 | ESM6800 | ESM7000 | ||
CPU信息 | 單核Cortex-A7 主頻792MHz | 雙核Cortex-A7 主頻1GHz | ||
操作系統 | Linux-4.9.11 | RT Linux-4.9.11 | Linux-4.9.11 | RT Linux-4.9.11 |
空載喚醒延時最小值(us) | 17us | 15us | 8us | 8us |
空載喚醒延時最大值(us) | 1662us | 119us | 66us | 54us |
空載喚醒延時平均值(us) | 28us | 27us | 13us | 12us |
滿載喚醒延時最小值(us) | 29us | 28us | 10us | 10us |
滿載喚醒延時最大值(us) | 2167us | 161us | 1946us | 62us |
滿載喚醒延時平均值(us) | 82us | 70us | 33us | 22us |
第二種方法,選用100Hz方波作為信號源,通過示波器隨機采樣的方式來選取測試數據,測試結果如下:
主板型號 | ESM6800 | ESM7000 | ||
CPU信息 | 單核Cortex-A7 主頻792MHz | 雙核Cortex-A7 主頻1GHz | ||
操作系統 | Linux-4.9.11 | RT Linux-4.9.11 | Linux-4.9.11 | RT Linux-4.9.11 |
空載中斷延時最小值(us) | 25us | 65us | 20us | 25us |
空載中斷延時最大值(us) | 400us | 180us | 85us | 115us |
空載中斷延時平均值(us) | 38us | 80us | 70us | 80us |
滿載中斷延時最小值(us) | 80us | 120us | 25us | 30us |
滿載中斷延時最大值(us) | 1800us | 500us | 2000us | 90us |
滿載中斷延時平均值(us) | 145us | 165us | 60us | 60us |
最主要關注的參數應該是響應時間的最大值,這個參數可以反映系統響應時間的穩定性以及能夠達到的實時性指標,因為兩個表格測試的方法不同,所以兩個表格之間沒有比較的意義,應該在表格內部比較不同的主板和不同的系統之間的差異。
第一個表格主要是測試實時線程的響應時間,從表格中可以看到實時和非實時Linux系統在最小響應時間和平均響應時間上沒有太大的差距,而在最大響應時間上實時Linux系統有明顯的提升,這也驗證了實時補丁主要提升的是響應時間的穩定性。
第二個表格主要是測試對于外部中斷的響應,結論和表格一是相同的,即實時補丁主要提升的是響應時間的穩定性。關于ESM7000主板的測試結果需要說明一下,在空載的時候,非實時Linux系統的平均時間表現要比實時系統好一些,這是因為在多核的情況下,系統缺省把對中斷的處理均放在CPU0所致。盡管可通過手動重新配置各個CPU核的初始任務,來消除這個現象,但實際應用肯定會有一定負載率的,系統將會根據負載,自動均衡各CPU的任務,達到表二的指標。對這個問題感興趣的客戶,可關注我們后續關于實時性分析的文章。
根據上面的總結,可以看到升級為實時Linux系統后,對于系統響應時間的穩定性有較大的提升,對系統實時性有一定要求的客戶,可以根據上面的測試數據來選擇主板。而對比ESM6800和ESM7000,擁有雙核CPU的ESM7000響應時間更快,而且在實驗中模擬的滿載情況下對響應時間的影響較小,能夠滿足較高的實時性要求。
成都英創信息技術有限公司 028-8618 0660