摘 要: 超級計算機對其運行環(huán)境有極為苛刻的要求,,它的持續(xù)穩(wěn)定運行需要通過水冷、風冷等設備對機房溫度進行嚴格控制,,為了檢測制冷設備的穩(wěn)定程度并制定合理的溫度控制策略,,提出了以Linux操作系統(tǒng)和S3C2440處理器為平臺構建分布式溫度采集系統(tǒng)的思想,該系統(tǒng)通過分布在機房多處的溫度傳感器采集機房內(nèi)的溫度值,并將這些數(shù)據(jù)存入本地SQLite數(shù)據(jù)庫,,再通過Boa服務和CGI技術訪問這些信息,,系統(tǒng)管理人員則可以通過分析這些溫度信息判斷制冷設備的可靠性并制定合理的溫度控制策略。首先論述了系統(tǒng)的相關技術和實現(xiàn)方法,,再將系統(tǒng)布置在機房中進行測試,,測試結果表明,系統(tǒng)運行穩(wěn)定,、監(jiān)測數(shù)據(jù)可靠,能夠滿足需求,。
關鍵詞: 嵌入式系統(tǒng),;Linux;Boa,;SQLite,;公共網(wǎng)關接口
0 引言
隨著計算任務規(guī)模越來越大,對超級計算機的性能要求也越來越高,,但隨之而來的問題是超級計算機的功耗和發(fā)熱量越來越大,,同時由于計算密度的差異,同一個計算任務在不同的時間段內(nèi)計算機的發(fā)熱量不同,,因此機房內(nèi)的溫度極易波動,。而超級計算機的持續(xù)可靠運行需要穩(wěn)定的機房溫度,因此機房內(nèi)的制冷效果以及制冷策略的制定變得極為重要,。本文以天河2號超級計算機機房管理為背景,,提出了一種分布式溫度采集方法用以檢測機房內(nèi)溫度的穩(wěn)定性和制冷設備的可靠性。首先分析了以Linux操作系統(tǒng)和S3C2440嵌入式處理器為平臺,,并利用Boa服務器,、SQLite數(shù)據(jù)庫和溫度傳感器構建分布式溫度采集系統(tǒng)的可行性,并給出了系統(tǒng)的具體實現(xiàn)方法,,最后對系統(tǒng)進行了測試,。由于這種分布式溫度采集系統(tǒng)能夠同時采集到機房內(nèi)多處的溫度信息,相比使用單個傳感器或使用溫度計對機房溫度進行采集,,該系統(tǒng)的效率更高,,采集到的數(shù)據(jù)也更加可靠。而機房維護人員則可以通過分析保存在數(shù)據(jù)庫里的歷史數(shù)據(jù)判斷制冷設備的可靠性,,并以此為依據(jù)科學地制定機房溫度控制策略,。
1 系統(tǒng)技術分析
該系統(tǒng)基于一種嵌入式開發(fā)平臺,該平臺上集成了一顆S3C2440嵌入式處理器,,并且平臺上已經(jīng)移植了Linux操作系統(tǒng),。在此基礎上又移植了Boa服務器和SQLite數(shù)據(jù)庫,并在處理器的6個IO引腳上掛接了溫度傳感器DS18B20,這些傳感器分布在機房各處,。系統(tǒng)采集的溫度數(shù)據(jù)存儲到數(shù)據(jù)庫中,,而機房維護人員可以通過瀏覽器查看這些信息,圖1為單個溫度采集系統(tǒng)的框圖,。
1.1 Boa服務器
Boa是類Unix操作系統(tǒng)下的一個開源的Web服務器軟件,,最新版本的源碼包不到200 KB。Boa是一個單任務服務器,,即在同一時刻只能響應一個用戶的請求,,當多個用戶同時訪問服務器時,只能有一個用戶的請求得到響應,,而其他用戶必須等待[1],。由于這些特性,Boa服務器適合移植到資源受限的嵌入式系統(tǒng)中,。當服務器收到來自瀏覽器的請求后,,會分析請求類型,若請求的是靜態(tài)網(wǎng)頁,,則服務器直接向瀏覽器返回靜態(tài)網(wǎng)頁,,如是更復雜的請求,例如表單處理等,,則需要調(diào)用CGI程序處理用戶請求[2],。該系統(tǒng)通過源碼方式安裝Boa服務器,在安裝完成后還需要通過修改配置文件boa.conf對服務器進行配置[3-4],。
1.2 CGI編程
CGI程序是Web服務器的一種后臺程序,,用于處理來自瀏覽器的請求,是實現(xiàn)瀏覽器與服務器動態(tài)交互的一種方式,,通常情況下提交瀏覽器中的表單或點擊一個超級鏈接就能夠觸發(fā)一個CGI程序的執(zhí)行[5],,例如<form action="/cgi-bin/relay.cgi"method="post">是瀏覽器中的一個表單,提交這個表單就能夠觸發(fā)位于服務器上的一個CGI程序relay.cgi的執(zhí)行,;而<a href="/cgi-bin/dump.cgi">dump database</a>是一個超鏈接,,點擊這個超鏈接就能夠觸發(fā)dump.cgi的執(zhí)行。CGI程序能夠從環(huán)境變量或標準輸入中獲取來自瀏覽器的數(shù)據(jù),,并能將處理結果返回給瀏覽器[4-5],。
1.3 SQLite數(shù)據(jù)庫
SQLite是一款開源的、嵌入式關系型數(shù)據(jù)庫,,它主要應用在嵌入式設備上,,在很多Android和IOS設備上都可以看到它的身影。與其他大型數(shù)據(jù)庫不同,,SQLite數(shù)據(jù)庫和基于這個數(shù)據(jù)庫的應用程序共同運行于同一個系統(tǒng)中,,應用程序產(chǎn)生的數(shù)據(jù)可以直接存入數(shù)據(jù)庫中而不需要通過網(wǎng)絡傳輸[6-7]。本系統(tǒng)中通過源碼方式安裝SQLite數(shù)據(jù)庫,需要注意的是在安裝過程中會生成一些文件,,需要將其中的動態(tài)鏈接庫文件復制到嵌入式Linux的/usr/lib目錄下,,除此之外還有一個頭文件sqlite3.h和一個庫文件libsqlite3.a,在編寫基于數(shù)據(jù)庫的應用程序時需要使用這兩個文件,。在本系統(tǒng)中數(shù)據(jù)庫用于存儲溫度傳感器采集的溫度值,,每個傳感器都對應數(shù)據(jù)庫中的一個表,該表用于存儲傳感器采集的數(shù)據(jù),。機房管理人員通過分析大量的歷史數(shù)據(jù),,可以判斷機房內(nèi)的制冷設備能夠滿足制冷需求,還能夠根據(jù)歷史數(shù)據(jù)制定合理的溫度控制策略,,使天河2號計算機系統(tǒng)持續(xù)穩(wěn)定地運行,。
2 溫度監(jiān)測系統(tǒng)的實現(xiàn)
2.1 系統(tǒng)硬件實現(xiàn)
圖2為溫度采集系統(tǒng)中單個節(jié)點的硬件連接圖,每個節(jié)點由一個S3C2440嵌入式控制平臺和8個溫度傳感器組成,。圖中的8個圓圈是DS18B20溫度傳感器,該傳感器是一種高精度的單線式傳感器,,通過一條數(shù)據(jù)線與處理器互連,;圖中的4條數(shù)據(jù)線長度為4 m,其余4條數(shù)據(jù)線的長度為2 m,,這種拓撲結構可以保證該節(jié)點能夠均勻地采集到其覆蓋范圍內(nèi)的溫度信息,。另外為保障系統(tǒng)的穩(wěn)定性,傳感器的VCC和GND引腳沒有與處理器相連,,而是使用獨立的5 V電源為傳感器供電[8],。經(jīng)實地測試,10個圖2所示的溫度采集節(jié)點基本可以將天河2號機房完整地覆蓋,,這些節(jié)點接入同一個路由器并與一臺PC互聯(lián),,而系統(tǒng)維護人員則能夠通過這臺PC獲取機房內(nèi)各處的溫度信息。
2.2 溫度信息的采集
處理器通過單總線發(fā)送指令控制傳感器,,對該傳感器進行操作的指令可以分為3類:1條復位指令,、5條ROM指令、6條RAM指令,,每進行一次操作都需要至少3條組合指令,,即1條復位指令、1條ROM指令和1條RAM指令,,在某些情況下并不需要執(zhí)行ROM指令,,這時可以使用“跳過ROM”指令來代替ROM指令[8-9]。傳感器驅動程序作為Linux系統(tǒng)的內(nèi)核加載模塊[10],,每隔 5 min依次讀取所有傳感器的數(shù)據(jù),,驅動程序的核心函數(shù)是Write_byte和Read_byte,兩個函數(shù)分別用于向傳感器寫1 B數(shù)據(jù)和從傳感器讀1 B數(shù)據(jù),需要根據(jù)傳感器的時序圖實現(xiàn)這兩個函數(shù),。向傳感器發(fā)送ROM或RAM指令是通過函數(shù)Write_byte實現(xiàn)的,,從傳感器讀取溫度值是通過函數(shù)Read_byte實現(xiàn)的,圖3為溫度傳感器驅動程序的流程圖,。
2.3 溫度信息存入數(shù)據(jù)庫
傳感器的驅動程序讀取溫度值后會調(diào)用copy_to_user將溫度數(shù)據(jù)傳輸?shù)接脩魬B(tài)進程[11],,用戶態(tài)進程則會將數(shù)據(jù)存入數(shù)據(jù)庫。為了存儲溫度數(shù)據(jù),,每個溫度采集節(jié)點需要創(chuàng)建一個本地的數(shù)據(jù)庫,,該數(shù)據(jù)庫存放在嵌入式開發(fā)平臺的板載Flash芯片上,每個數(shù)據(jù)庫中需要創(chuàng)建8個表,,用于存儲該節(jié)點下每個傳感器采集的數(shù)據(jù),。以0號傳感器為例,該傳感器采集的數(shù)據(jù)存儲在表ds18b20_0中,,表中有3列數(shù)據(jù),,分別為行編號、溫度值,、采集數(shù)據(jù)的時刻,。由于需要循環(huán)將溫度信息存入數(shù)據(jù)庫,SQLite提供的參數(shù)化語句功能可以很好地滿足這種應用[12],,具體過程如下(下面函數(shù)省略了全部或部分參數(shù)):
char*sql="insert into ds18b20_0 values(?,,?,?)"
//定義一條參數(shù)化的SQL語句
sqlite3_prepare()//將上述語句編譯成數(shù)據(jù)庫引擎字節(jié)碼
sqlite3_bind_int(1,,id)//將id和第一個“,?”綁定
sqlite3_bind_int(2,temperature)
//將溫度值temperature和第二個“,?”綁定
sqlite3_bind_text(3,,time)
//將時間字符串time和第三個“?”綁定
sqlite3_step()//執(zhí)行綁定了參數(shù)的SQL語句
2.4 查詢溫度信息
系統(tǒng)維護人員可以通過PC上的瀏覽器訪問任意一個節(jié)點數(shù)據(jù)庫中的溫度信息,,實現(xiàn)該功能需要節(jié)點中Boa服務器的后臺CGI程序支持,。由于SQLite是一種嵌入式數(shù)據(jù)庫,它對網(wǎng)絡應用的支持不全面,,因此如果需要通過網(wǎng)絡訪問數(shù)據(jù)庫中的信息,,可以先將數(shù)據(jù)庫中的信息導出到本地文件中,再通過網(wǎng)絡訪問這個本地文件,。每個監(jiān)測節(jié)點中都有一個CGI程序負責將數(shù)據(jù)庫中的信息導出到本地的文本文件中,,以導出表ds18b20_0中的數(shù)據(jù)為例,過程如下:
char*sql="select*from ds18b20_0,;"
//定義一條SQL語句,,查詢整個表ds18b20_0
sqlite3_get_table(db,,sql,&result,,&row,,&colum,&zErr)
//執(zhí)行上述SQL語句,,將查詢結果保存在result中,,
并返回查詢結果中的行數(shù)和列數(shù)
最后這個CGI程序還要將保存在result中的臨時結果輸出到文本文件中,因此當網(wǎng)頁中一個超鏈接指向這個文本文件時,,用戶在瀏覽器中點擊這個超鏈接就可以查看溫度信息,。
3 測試結果
在系統(tǒng)構建完成之后將其部署在機房中并對其穩(wěn)定性和可靠性進行測試,啟動系統(tǒng)并使其運行一段時間,,以保證能夠采集到足夠量的數(shù)據(jù),。在瀏覽器地址欄輸入其中一個溫度監(jiān)控節(jié)點的IP地址,例如192.168.1.112,,并選擇查看該節(jié)點下的任意一個傳感器采集的數(shù)據(jù),,瀏覽器就能顯示圖4所示的該傳感器采集的溫度信息。由圖4可知,,這段時間內(nèi)該傳感器附近的溫度維持在23℃,,將多個傳感器采集的數(shù)據(jù)與機房內(nèi)的溫度計對比可知,通過該系統(tǒng)采集到的數(shù)據(jù)可靠,,同時也可以說明機房內(nèi)各處的溫度保持在一個穩(wěn)定的狀態(tài)。
4 結論
Web服務器提供了一種通過局域網(wǎng)或廣域網(wǎng)訪問和控制嵌入式設備的方式,,這種方式基于成熟的網(wǎng)絡通信技術,,使用這種方式能夠將嵌入式設備部署到任何地方而無需過多額外成本,而嵌入式數(shù)據(jù)庫則為數(shù)據(jù)的存儲和訪問帶來了極大的便利,。本文首先分析了天河2號機房溫度采集的需求,,針對這種需求提出了構建分布式溫度采集系統(tǒng)的思想,該系統(tǒng)通過分布在機房各處的傳感器實現(xiàn)溫度信息的采集,,并將采集到的數(shù)據(jù)存儲到數(shù)據(jù)庫中,。由于傳感器分布在機房的多個位置,因此采集到的數(shù)據(jù)能更好地反映機房內(nèi)的溫度信息,。相比傳統(tǒng)方式,,這種分布式溫度采集系統(tǒng)采集到的數(shù)據(jù)更為可靠,能夠更準確反映機房的溫度信息,。而機房維護員則可以通過網(wǎng)絡查看這些數(shù)據(jù),,并以這些數(shù)據(jù)為依據(jù)調(diào)整水冷和風冷設備的工作狀態(tài),使機房環(huán)境保持在最佳狀態(tài)以保證天河2號超級計算機的可靠穩(wěn)定運行,。
參考文獻
[1] 孫輝,,陸松年,,楊樹堂.基于Linux和S3c2410的嵌入式Web Sever的研究與實現(xiàn)[J].計算機應用與軟件,2007,,24(2):134-136.
[2] 劉鑫.基于ARM平臺的嵌入式Web服務器的設計與實現(xiàn)[D].成都:電子科技大學,,2010.
[3] 王軍飛.基于ARM和Linux的嵌入式Web服務器的研究與實現(xiàn)[D].太原:太原理工大學,2009.
[4] 張曦熀,,柴志雷.嵌入式Web服務器中的CGI特點及實現(xiàn)[J].小型微型計算機系統(tǒng),,2003,24(11):2046-2048.
[5] 黃奇光.CGI編程指南[M].北京:電子工業(yè)出版社,,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] 李雪峰.分布式溫度采集網(wǎng)絡在恒溫控制中的應用[J].微型機與應用,2013,,32(15):69-72.
[10] CORBET J,, RUBINI A, KROAH-HARTMAN G. Linux設備驅動程序(第三版)[M].魏永明,,耿岳,,鐘書毅,譯.北京:中國電力出版社,,2009.
[11] BOVET D,, CESATI M.深入理解Linux內(nèi)核(第三版)[M].陳莉君,張瓊聲,,張宏偉,,譯.北京:中國電力出版社,2009.
[12] BI C Y. Research and application of sqlite embedded database technology[J]. Wseas Transactions on Computer,,2009,,8(1):83-92.