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