激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

Windows工控主板實時性能測試

 2024-12-5 17:53:49     作者:劉乾坤     聯系作者    


與典型的實時操作系統RT-Linux、WinCE、VxWorks等相比,Windows似乎無法直接應用于對實時性有要求的場合。而本文將在安裝了Windows 10 IoT企業版的ESM8400工控主板上、測試系統實時性能的一個重要指標——中斷響應延時。測試結果將表明,安裝Windows操作系統的ESM8400工控主板,在啟用軟實時特性后,系統實時性能將顯著提高,在ESM8400上實際測試中斷響應延時能穩定的控制在200us以內。

ESM8400是基于NXP iMX8MP的 名片尺寸ARM64工控主板,可安裝Windows 10 IoT企業版操作系統,Windows 10 IoT企業版就是完整版本的Windows 10,而且支持軟實時特性,下面依次說明如何啟用Windows IoT企業版系統的軟實時特性,如果開發支持軟實時的應用程序。最后將對比ESM8400 工作在Windows標準模式和軟實時模式下GPIO中斷響應延時情況。


1.     啟用Windows IoT企業版 軟實時特性

Windows 10 軟實時是 Windows 10 IoT 企業版 版本 21H2 的一項新功能,它允許設備制造商在其設備上引入軟實時功能。此實時行為通過 4 個關鍵設置引入:

1.    CPU 隔離:將系統級干擾從隔離的 CPU 遷移出去,減少對用戶實時應用程序的潛在抖動。

2.    獨立 CPU 上的自定義 ISR/DPC 固定:所有硬件中斷都路由到系統和非實時內核,但通過編寫自定義 ISR/DPC 驅動程序,可以將設備特定的中斷路由到實時內核。

3.    互斥體的優先級繼承:此設置可確保執行最高優先級的線程,即使在復雜的多線程場景中也是如此。

4.    最多 16 個 RT 線程優先級別:這使程序員能夠在實時任務間分配資源,以確保首先執行最重要的任務。

  1.1    啟用Windows IoT企業版 軟實時特性

在Windows管理員命令提示符下執行以下腳本:

::禁用空閑狀態
powercfg.exe / setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IdleDisable 1
powercfg.exe / setactive SCHEME_CURRENT

::禁用診斷策略服務DPS
sc query dps
sc stop dps
sc config dps start = disabled

::禁用Windows音頻
sc query Audiosrv
sc stop Audiosrv
sc config Audiosrv start = disabled

::禁用SysMain
sc query SysMain
sc stop SysMain
sc config SysMain start = disabled

::禁用Windows更新
sc query wuauserv
sc stop wuauserv
sc config wuauserv start = disabled

::禁用線程 DPC
reg add "HKLM\System\CurrentControlSet\Control\Session Manager\kernel" / v ThreadDpcEnable / t REG_DWORD / f / d 0

  1.2    為實時應用分配CPU核心

將系統配置為實時性能,需要提供要分配給實時任務的 CPU 核心數,其余部分用于運行系統或標準用戶任務。 必須在 Windows IoT CSP SetRTCores 節點中提供數值,這是專用于實時工作負載的 CPU 核心數,有效數值必須至少為 1 且小于 CPU 中的物理核心數。ESM8400主CPU為4核ARM Cortex-A53,建議將1個核作為實時任務的CPU核心。

需要注意的是,軟實時功能一旦啟用,就只能對分配的CPU核心數進行調整,要完全禁用軟實時只能重裝Windows系統。

1.    下載 psexec 工具。

2.    運行管理命令提示符。

3.    在命令提示符下,在系統帳戶下啟動 PowerShell psexec.exe -s -i powershell.exe

4.    執行以下腳本:

$nameSpaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_WindowsIoT_SoftRealTimeProperties01"
$obj = Get - CimInstance - Namespace $namespaceName - ClassName $className
Add - Type - AssemblyName System.Web
Set - CimInstance - CimInstance $obj
$obj.SetRTCores = 1
Set - CimInstance - CimInstance $obj

5.    重啟計算機以激活更改。


2.     開發軟實時應用程序

將設備配置為實現實時性能后,可以將應用程序設置為使用標準 Win32 API 進行實時運行。賦予線程或進程實時性能的唯一因素是線程/進程優先級排名和 CPU 核心關聯。

若要獲取特定線程或進程的實時性能,其優先級應在實時性能范圍內,并且應將其關聯設置為在實時內核上運行。


  配置實時進程

1.    使用 SetPriorityClass 函數 :將進程的 ProcessPriorityClass 屬性設置為 REALTIME_PRIORITY_CLASS。

2.    使用 SetProcessAffinityMask 函數 將進程設置為僅在為實時應用程序保留的內核上運行


  配置實時線程

1.    使用 NtSetInformationThread 函數 將線程的 ThreadBasePriority 設置為 16 到 31 之間的值

2.    使用 SetThreadAffinityMask 函數 將線程設置為僅在為實時應用程序保留的內核上運行


3.     GPIO中斷響應延時測試

中斷響應延時測試方法是:利用ESM8400的GPIO0作為中斷觸發信號,持續翻轉高低電平輸出,GPIO1中斷輸入管腳。利用Windows系統的QPC計數器,在操作GPIO0翻轉之前調用QPC獲取時間戳,在GPIO1中斷響應回調函數中再次獲取時間戳,然后計算兩個時間之間的間隔,以此完成GPIO中斷響應延時的精確測量。硬件上需要在ESM8400評估底板上用跳線器將ESM8400的GPIO0與GPIO1短接進行測試。

w1.png

參考本文第1節,我們已經可以將ESM8400設置成軟實時模式,參考第2節讓測試程序在分配的實時CPU核心上運行。

下面分別統計了1千萬次Windows工作在標準模式與實時模式時、系統CPU空閑和高負載情況下、GPIO中斷響應延時時間。

w2.png

可以看到當CPU空閑時,無論Windows是否工作在實時模式,99.99%的中斷響應都小于200us。當CPU負載加重時,Windows標準模式下的中斷響應時間變得極不確定,而實時模式下的中斷響應時間幾乎不受CPU負載的影響,仍然確保99.99%的中斷在200us內得到響應。

下圖對GPIO中斷響應最大延時的測量,更能直觀反映Windows標準模式與實時模式在系統實時性能上的差距。

w3.png


主站蜘蛛池模板: 黑人巨大vsさとう遥希| 免费观看片| 一级免费黄色录像| 免费看香港一级毛片| 国产高清小视频| 国产精品无码久久av| 欧美在线观看一区二区三| 亚洲色图清纯唯美| 一级片免费在线| 日本在线国产| 亚洲一区二区三区四区五区| 色婷婷综合久久久中文字幕| 国产a级淫片| 国产草逼视频| 性做爰片免费视频毛片中文ilo| 精品视频国产| 的九一视频入口在线观看| 激情丁香网| 欧美激情综合亚洲一二区| 亚洲91在线视频| 一级生活片| 久久黄色一级片| 日本在线观看免费看片| 毛片毛片毛片毛片毛片毛片毛片| 欧美成人午夜做爰视频在线观看| 黄色在线免费看| 91视频啪| 成人午夜视频免费| 久久久婷婷亚洲5月97色| 日韩第一页| 综合精品视频| 99在线观看国产| 日韩3级| 成年超爽大片免费视频播放| 这里有精品| 欧美一级毛级毛片| 国产色秀视频在线观看| 国产黄色在线免费观看| 国产综合色在线视频区| 国产浮力草草影院ccyy| 国产精品一区二区三区高清在线|