物聯網平臺Modbus協議采樣命令下發并發性能測試方法
Part 01
采樣命令
Modbus協議同樣也是物聯網平臺的流行協議之一,采樣命令作為Modbus協議的主要功能,其主要流程是設備在平臺設置周期采樣命令,平臺會周期性主動對在線設備下發采樣命令。
我們在為雄安建設物聯網平臺時,正好平臺就有Modbus的能力,平臺交付就必須要測試Modbus的采樣命令并發。
物聯網平臺Modbus協議采樣命令下發流程如下:
- 創建設備,在平臺給設備設置采樣命令:采樣周期、功能編號、從機地址、數據長度等信息。
- 設備上線后,平臺按照采樣周期對設備進行周期性發送采樣命令。
- 設備收到采樣命令后將寄存器數據返回結果給平臺,并保存采樣數據。
通常情況下我們做性能測試都是客戶端發起請求服務的響應客戶端,而Modbus的采樣命令恰好相反,以往我們常用的性能測試工具就不可行了。
要如何才能測試服務的采樣命令的并發呢?
Part 02
測試方法
為了測試物聯網平臺Modbus協議采樣命令并發性能,我們研究出了一種高并發的采樣命令并發性能測試方法。該方法采用異步IO的方式批量模擬設備連接服務器、接收采樣命令并響應命令,并統計每秒接收的命令數量。技術實現細節如下:
1、通過API批量創建Modbus設備,并給每個設備創建n個采樣命令。即無需提前創建設備和設備的采樣命令;
2、批量初始化設備的socket連接,socket設置為非阻塞,生成socket列表。采用異步IO,減少多線程線程切換帶來的資源消耗,提升CPU利用率;
3、同時啟動以下三個線程:
①批量設備注冊線程:批量上報注冊報文,設備注冊完成后線程退出;
②采樣命令條數統計線程:所有設備注冊成功后,每秒統計一次最近1秒內收到采樣命令條數;
③采樣命令接收處理線程:采用select批量管理設備socket列表,接收并立即響應采樣命令,并實時記錄采樣命令條數。select模型為非阻塞式IO,能夠一定程度上減少服務器瞬間的并發線程數,從而提高CPU執行效率;
Python代碼示例(片段)
4、根據運行設備數量以及平均每秒接收到采樣命令數量來判斷平臺是否滿足當前的采樣命令的處理性能。性能滿足的條件下預期結果為
預期每秒命令接收數量 ≈ 設備數量 * n
逐步增加設備數量,當預期每秒命令接收數量 > 設備數量 * n時,即服務已達到瓶頸。則最終測試服務的采樣命令最大并發量為,滿足預期結果時的設備最大接入量 * n。
該測試方法優點:
1、無需單獨添加創建設備和設備的采樣命令,簡化了Modbus協議采樣命令性能測試的準備工作;
2、在設備端統計并發量,無需在服務端增加任何統計邏輯;
3、采用模擬設備,無需準備大量真實設備,降低了Modbus協議采樣命令性能測試的成本;
4、通過非阻塞式IO,顯著提升Modbus協議采樣命令并發性能測試的設備響應速度,解決Modbus協議采樣命令并發性能測試高并發狀態下的資源浪費問題;
5、設備響應速度的提升,有效提高Modbus協議采樣命令并發性能測試的準確度。
我們采用此種方法編寫的Python代碼,單個腳本可以支撐1秒內1萬+次的命令處理能力。在雄安物聯網平臺的性能測試中起到了非常好的作用,同時運行10個腳本,完成了雄安平臺Modbus協議采樣命令10萬并發的測試。