彈性內存分配在IOT中的重要性
譯文?譯者 | 張怡
審校 | 孫淑娟
一般而言,開發人員不太會考慮內存分配。畢竟,現代計算機、平板電腦和服務器的內存如此之大,通常看起來像是無限的資源。而且,內存分配失敗或錯誤不太可能發生,即使出現問題,系統通常默認退出程序。
然而,當涉及到物聯網(IoT)時,情況大有不同。在這些嵌入式連接設備中,內存會變得更加搶手,多個程序會爭奪有限的資源;而且集成系統越小,內存也更小。因此,最好將其視為有限的資源并保守使用。
正是在這種背景下,內存分配(malloc)在IOT行業中非常重要。malloc是計算機在運行程序或進程時動態分配內存的過程。尤其是對于連接到互聯網的設備,正確處理malloc直接決定其性能好壞。
下面,讓我們來看看開發人員如何在他們的內存分配方法中彈性設計,以及這對未來的物聯網設備意味著什么。
1、內存分配和物聯網設備
傳統上,內存分配(malloc)經常不用于嵌入式系統。這是因為較舊的設備通常不會連接到互聯網,因此計算的內存需求并不大。
但是,這些較舊的設備在系統啟動時創建了一個資源池來分配資源。一個資源可以是一個連接,一個系統可以配置n個來自靜態分配池的連接。
在未連接Internet的系統中,系統的狀態通常受到一定程度的限制,因此更容易估計內存分配malloc的上限。但是,一旦嵌入式系統連接到互聯網,這種情況就會發生巨大變化。
例如,一個設備需要計算多個連接,并且每個連接都有不同的內存需求,這取決于連接的用途。每個連接上的數據流所需的緩沖內存取決于連接的延遲,通過使用某些概率函數或其他網絡連接的行為方式來處理數據包丟失,從而獲得一定的吞吐量。
通常這在現代高端系統上不是問題。但是,開發人員在嵌入式環境中面臨有限的內存資源,我們不能簡單地假設有足夠的內存。
這就是為什么在物聯網嵌入式開發中,考慮如何規避內存分配錯誤或者malloc失敗是非常重要的。
2、現代嵌入式系統和malloc
在現代的嵌入式系統中,malloc的使用頻率更高,許多嵌入式系統和平臺都有不錯的malloc實現。這種轉變的原因是現代連接的嵌入式系統執行更多的任務,通常無法靜態地為所有程序的執行分配所需的最大資源。
在現代互聯嵌入式系統中積極使用malloc,這種轉變需要更徹底和系統的軟件測試來發現錯誤。
通常,malloc錯誤不會系統測試,因為它發生的概率極低,不值得這么去做。正因為malloc錯誤非常罕見,所以其漏洞在發現之前可能已存在數年。
3、mallocfail工具:如何測試錯誤
令人高興的是,開發人員可以利用軟件來測試分配錯誤。有一種新穎的方法是通過運行一個程序,在發生分配的所有執行路徑中注入分配錯誤。這可以通過mallocfail工具實現。
顧名思義,Mallocfail以確定的方式測試malloc錯誤。該工具不是隨機測試,而是通過不同的控制路徑自動枚舉malloc錯誤。它的靈感來自于Stack Overflow。
簡而言之,此工具使用自定義版本分配器malloc、calloc和realloc。每次運行自定義分配器時,都會使用libbacktrace獲取當前線程的函數調用堆棧,生成對應的 sha256 哈希值。然后,該工具檢查是否出現新的哈希值。如果出現從未見過的哈希(特定的調用堆棧),則內存分配malloc失敗,并將哈希值存儲在內存中寫入磁盤;如果之前見過,則正常調用分配器libc版本。每次程序啟動時,已見過的哈希值都會從磁盤加載。
這是我第一手使用過的東西,發現非常有用。例如,我們在嵌入式邊緣軟件開發工具包上成功測試了mallocfail。該工具成功識別了SDK及其第三方庫中的一些問題,而且它們的問題現已修復了。
4、處理malloc問題
在復雜的系統中,處理分配錯誤可能有點棘手。例如,處理一個事件需要考慮分配多少內存。當然,解決方案有很多種。最重要的是分配必要的內存,以便在分配失敗時可以將錯誤傳遞回程序,不至于某些問題被悄無聲息的隱藏其中。
處理malloc 失敗的能力是我們團隊經常考慮的問題。當然,這在其他設備上可能并沒有什么,但它會在連接到互聯網的嵌入式設備上引起大問題。
因此,我們的 SDK 會計算限制某些資源的功能,包括連接、流、緩沖區等。這樣,系統配置限制使用的內存量,以免發生malloc錯誤。
通常,系統內存不足會導致系統難以運行。因此,通過限制同時發生的功能/任務,降低內存分配錯誤的概率是很有意義的。
回首過去,我已經在這個互聯網設備領域工作了二十年,期待同行開發人員在現代嵌入式開發中,采用最佳的malloc實踐。
建議您深入考慮嵌入式設備如何解決內存分配問題,積極研究使用內存的最有效方式。盡可能使用動態內存分配和mallocfail測試進行開發,因為它對嵌入式物聯網設備的性能及其可用性至關重要。
原文鏈接:https://dzone.com/articles/why-memory-allocation-resilience-matters-in-iot
譯者介紹
張怡,51CTO社區編輯,主要研究人工智能算法實現以及場景應用,對機器學習算法和自動控制算法有所了解和掌握。?