冉凡燦,蔣句平(國防科學技術大學 計算機學院,湖南 長沙 410073)
超算中心環境監測系統的設計和實現
冉凡燦,蔣句平
(國防科學技術大學 計算機學院,湖南 長沙 410073)
超級計算機對其運行環境有極為苛刻的要求,它的持續穩定運行需要通過水冷、風冷等設備對機房溫度進行嚴格控制,為了檢測制冷設備的穩定程度并制定合理的溫度控制策略,提出了以Linux操作系統和S3C2440處理器為平臺構建分布式溫度采集系統的思想,該系統通過分布在機房多處的溫度傳感器采集機房內的溫度值,并將這些數據存入本地SQLite數據庫,再通過Boa服務和CGI技術訪問這些信息,系統管理人員則可以通過分析這些溫度信息判斷制冷設備的可靠性并制定合理的溫度控制策略。首先論述了系統的相關技術和實現方法,再將系統布置在機房中進行測試,測試結果表明,系統運行穩定、監測數據可靠,能夠滿足需求。
嵌入式系統;Linux;Boa;SQLite;公共網關接口
隨著計算任務規模越來越大,對超級計算機的性能要求也越來越高,但隨之而來的問題是超級計算機的功耗和發熱量越來越大,同時由于計算密度的差異,同一個計算任務在不同的時間段內計算機的發熱量不同,因此機房內的溫度極易波動。而超級計算機的持續可靠運行需要穩定的機房溫度,因此機房內的制冷效果以及制冷策略的制定變得極為重要。本文以天河2號超級計算機機房管理為背景,提出了一種分布式溫度采集方法用以檢測機房內溫度的穩定性和制冷設備的可靠性。首先分析了以Linux操作系統和S3C2440嵌入式處理器為平臺,并利用Boa服務器、SQLite數據庫和溫度傳感器構建分布式溫度采集系統的可行性,并給出了系統的具體實現方法,最后對系統進行了測試。由于這種分布式溫度采集系統能夠同時采集到機房內多處的溫度信息,相比使用單個傳感器或使用溫度計對機房溫度進行采集,該系統的效率更高,采集到的數據也更加可靠。而機房維護人員則可以通過分析保存在數據庫里的歷史數據判斷制冷設備的可靠性,并以此為依據科學地制定機房溫度控制策略。
該系統基于一種嵌入式開發平臺,該平臺上集成了一顆S3C2440嵌入式處理器,并且平臺上已經移植了Linux操作系統。在此基礎上又移植了Boa服務器和SQLite數據庫,并在處理器的6個IO引腳上掛接了溫度傳感器DS18B20,這些傳感器分布在機房各處。系統采集的溫度數據存儲到數據庫中,而機房維護人員可以通過瀏覽器查看這些信息,圖1為單個溫度采集系統的框圖。

圖1 系統框圖
1.1 Boa服務器
Boa是類Unix操作系統下的一個開源的Web服務器軟件,最新版本的源碼包不到200KB。Boa是一個單任務服務器,即在同一時刻只能響應一個用戶的請求,當多個用戶同時訪問服務器時,只能有一個用戶的請求得到響應,而其他用戶必須等待[1]。由于這些特性,Boa服務器適合移植到資源受限的嵌入式系統中。當服務器收到來自瀏覽器的請求后,會分析請求類型,若請求的是靜態網頁,則服務器直接向瀏覽器返回靜態網頁,如是更復雜的請求,例如表單處理等,則需要調用CGI程序處理用戶請求[2]。該系統通過源碼方式安裝Boa服務器,在安裝完成后還需要通過修改配置文件boa.conf對服務器進行配置[3-4]。
1.2 CGI編程
CGI程序是Web服務器的一種后臺程序,用于處理來自瀏覽器的請求,是實現瀏覽器與服務器動態交互的一種方式,通常情況下提交瀏覽器中的表單或點擊一個超級鏈接就能夠觸發一個CGI程序的執行[5],例如〈form action="/cgi-bin/relay.cgi"method="post"〉是瀏覽器中的一個表單,提交這個表單就能夠觸發位于服務器上的一個CGI程序relay.cgi的執行;而〈a href="/cgi-bin/dump.cgi"〉dump database〈/a〉是一個超鏈接,點擊這個超鏈接就能夠觸發dump.cgi的執行。CGI程序能夠從環境變量或標準輸入中獲取來自瀏覽器的數據,并能將處理結果返回給瀏覽器[4-5]。
1.3 SQLite數據庫
SQLite是一款開源的、嵌入式關系型數據庫,它主要應用在嵌入式設備上,在很多Android和IOS設備上都可以看到它的身影。與其他大型數據庫不同,SQLite數據庫和基于這個數據庫的應用程序共同運行于同一個系統中,應用程序產生的數據可以直接存入數據庫中而不需要通過網絡傳輸[6-7]。本系統中通過源碼方式安裝SQLite數據庫,需要注意的是在安裝過程中會生成一些文件,需要將其中的動態鏈接庫文件復制到嵌入式Linux的/usr/lib目錄下, 除此之外還有一個頭文件sqlite3.h和一個庫文件libsqlite3.a,在編寫基于數據庫的應用程序時需要使用這兩個文件。在本系統中數據庫用于存儲溫度傳感器采集的溫度值,每個傳感器都對應數據庫中的一個表,該表用于存儲傳感器采集的數據。機房管理人員通過分析大量的歷史數據,可以判斷機房內的制冷設備能夠滿足制冷需求,還能夠根據歷史數據制定合理的溫度控制策略,使天河2號計算機系統持續穩定地運行。
2.1 系統硬件實現
圖2為溫度采集系統中單個節點的硬件連接圖,每個節點由一個S3C2440嵌入式控制平臺和8個溫度傳感器組成。圖中的8個圓圈是DS18B20溫度傳感器,該傳感器是一種高精度的單線式傳感器,通過一條數據線與處理器互連;圖中的4條數據線長度為4m,其余4條數據線的長度為2m,這種拓撲結構可以保證該節點能夠均勻地采集到其覆蓋范圍內的溫度信息。另外為保障系統的穩定性,傳感器的VCC和GND引腳沒有與處理器相連,而是使用獨立的5V電源為傳感器供電[8]。經實地測試,10個圖2所示的溫度采集節點基本可以將天河2號機房完整地覆蓋,這些節點接入同一個路由器并與一臺PC互聯,而系統維護人員則能夠通過這臺PC獲取機房內各處的溫度信息。

圖2 單個節點硬件連接圖
2.2 溫度信息的采集
處理器通過單總線發送指令控制傳感器,對該傳感器進行操作的指令可以分為3類:1條復位指令、5條ROM指令、6條RAM指令,每進行一次操作都需要至少3條組合指令,即1條復位指令、1條ROM指令和1條RAM指令,在某些情況下并不需要執行ROM指令,這時可以使用“跳過ROM”指令來代替ROM指令[8-9]。傳感器驅動程序作為Linux系統的內核加載模塊[10],每隔5min依次讀取所有傳感器的數據,驅動程序的核心函數是Write_byte和Read_byte,兩個函數分別用于向傳感器寫1B數據和從傳感器讀1B數據,需要根據傳感器的時序圖實現這兩個函數。向傳感器發送ROM或RAM指令是通過函數Write_byte實現的,從傳感器讀取溫度值是通過函數 Read_byte實現的,圖3為溫度傳感器驅動程序的流程圖。

圖3 溫濕度傳感器驅動程序流程
2.3 溫度信息存入數據庫
傳感器的驅動程序讀取溫度值后會調用copy_to_user將溫度數據傳輸到用戶態進程[11],用戶態進程則會將數據存入數據庫。為了存儲溫度數據,每個溫度采集節點需要創建一個本地的數據庫,該數據庫存放在嵌入式開發平臺的板載Flash芯片上,每個數據庫中需要創建8個表,用于存儲該節點下每個傳感器采集的數據。以0號傳感器為例,該傳感器采集的數據存儲在表ds18b20_0中,表中有3列數據,分別為行編號、溫度值、采集數據的時刻。由于需要循環將溫度信息存入數據庫,SQLite提供的參數化語句功能可以很好地滿足這種應用[12],具體過程如下(下面函數省略了全部或部分參數):

2.4 查詢溫度信息
系統維護人員可以通過PC上的瀏覽器訪問任意一個節點數據庫中的溫度信息,實現該功能需要節點中Boa服務器的后臺CGI程序支持。由于SQLite是一種嵌入式數據庫,它對網絡應用的支持不全面,因此如果需要通過網絡訪問數據庫中的信息,可以先將數據庫中的信息導出到本地文件中,再通過網絡訪問這個本地文件。每個監測節點中都有一個CGI程序負責將數據庫中的信息導出到本地的文本文件中,以導出表ds18b20_0中的數據為例,過程如下:

最后這個CGI程序還要將保存在result中的臨時結果輸出到文本文件中,因此當網頁中一個超鏈接指向這個文本文件時,用戶在瀏覽器中點擊這個超鏈接就可以查看溫度信息。
在系統構建完成之后將其部署在機房中并對其穩定性和可靠性進行測試,啟動系統并使其運行一段時間,以保證能夠采集到足夠量的數據。在瀏覽器地址欄輸入其中一個溫度監控節點的IP地址,例如192.168.1.112,并選擇查看該節點下的任意一個傳感器采集的數據,瀏覽器就能顯示圖4所示的該傳感器采集的溫度信息。由圖4可知,這段時間內該傳感器附近的溫度維持在23℃,將多個傳感器采集的數據與機房內的溫度計對比可知,通過該系統采集到的數據可靠,同時也可以說明機房內各處的溫度保持在一個穩定的狀態。

圖4 查詢溫度信息
Web服務器提供了一種通過局域網或廣域網訪問和控制嵌入式設備的方式,這種方式基于成熟的網絡通信技術,使用這種方式能夠將嵌入式設備部署到任何地方而無需過多額外成本,而嵌入式數據庫則為數據的存儲和訪問帶來了極大的便利。本文首先分析了天河2號機房溫度采集的需求,針對這種需求提出了構建分布式溫度采集系統的思想,該系統通過分布在機房各處的傳感器實現溫度信息的采集,并將采集到的數據存儲到數據庫中。由于傳感器分布在機房的多個位置,因此采集到的數據能更好地反映機房內的溫度信息。相比傳統方式,這種分布式溫度采集系統采集到的數據更為可靠,能夠更準確反映機房的溫度信息。而機房維護員則可以通過網絡查看這些數據,并以這些數據為依據調整水冷和風冷設備的工作狀態,使機房環境保持在最佳狀態以保證天河2號超級計算機的可靠穩定運行。
[1]孫輝,陸松年,楊樹堂.基于Linux和S3c2410的嵌入式Web Sever的研究與實現[J].計算機應用與軟件,2007,24(2):134-136.
[2]劉鑫.基于ARM平臺的嵌入式Web服務器的設計與實現[D].成都:電子科技大學,2010.
[3]王軍飛.基于ARM和Linux的嵌入式Web服務器的研究與實現[D].太原:太原理工大學,2009.
[4]張曦熀,柴志雷.嵌入式Web服務器中的CGI特點及實現[J].小型微型計算機系統,2003,24(11):2046-2048.
[5]黃奇光.CGI編程指南[M].北京:電子工業出版社,1999.
[6]ALLEN G,OWENS M.The definitive guide to SQLite(Second Edition)[M].Berkeley:Apress,2010.
[7]施忠華.基于嵌入式Linux和Sqlite的Web服務器的研究及應用[D].南昌:南昌大學,2012.
[8]ds18b20[EB/OL].[2015-01-08].http://baike.baidu.com/link?Nhh7VxAxdcGfK-t5sbmM1tZIhXB1a5yo1P3DbisgKmlbuH xU vvxKbns7a3dLuNeUkrDHTf2qxZiM-K.
[9]李雪峰.分布式溫度采集網絡在恒溫控制中的應用[J].微型機與應用,2013,32(15):69-72.
[10]CORBET J,RUBINI A,KROAH-HARTMAN G.Linux設備驅動程序(第三版)[M].魏永明,耿岳,鐘書毅,譯.北京:中國電力出版社,2009.
[11]BOVET D,CESATI M.深入理解Linux內核(第三版)[M].陳莉君,張瓊聲,張宏偉,譯.北京:中國電力出版社,2009.
[12]BI C Y.Research and application of sqlite embedded database technology[J].Wseas Transactions on Computer,2009,8(1):83-92.
Design and implementation of temperature acquisition system for supercomputer center
Ran Fancan,Jiang Juping
(College of Computer,National University of Defense Technology,Changsha 410073,China)
Supercomputer is strict with operating environment,and refrigeration equipments are used to keep temperature stable in engine room.In order to test the stability of temperature and making temperature control strategies,a distributed temperature acquisition system based on Linux operating system and S3C2440 processor was built.This system collects temperature informations by temperature sensors,and then the informations are stored in SQLite database and queried through Boa server and CGI technology. Related technologies and implementation methods were firstly discussed,and then a testing was performed.Testing demonstrated that the system could meet the demands.
embedded system;Linux;Boa;SQLite;CGI
TP399
A
1674-7720(2015)18-0089-03
冉凡燦,蔣句平.超算中心環境監測系統的設計和實現[J].微型機與應用,2015,34(18):89-91,94.
2015-04-23)
冉凡燦(1990-),男,碩士研究生,主要研究方向:嵌入式系統。
蔣句平(1965-),男,碩士,研究員,主要研究方向:計算機系統結構、系統RAS技術、嵌入式系統。