《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 超算中心環(huán)境監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
超算中心環(huán)境監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
2015年微型機(jī)與應(yīng)用第18期
冉凡燦,,蔣句平
(國(guó)防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,湖南 長(zhǎng)沙 410073)
摘要: 超級(jí)計(jì)算機(jī)對(duì)其運(yùn)行環(huán)境有極為苛刻的要求,,它的持續(xù)穩(wěn)定運(yùn)行需要通過(guò)水冷,、風(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)通過(guò)分布在機(jī)房多處的溫度傳感器采集機(jī)房?jī)?nèi)的溫度值,,并將這些數(shù)據(jù)存入本地SQLite數(shù)據(jù)庫(kù),再通過(guò)Boa服務(wù)和CGI技術(shù)訪問(wèn)這些信息,,系統(tǒng)管理人員則可以通過(guò)分析這些溫度信息判斷制冷設(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ù)可靠,能夠滿(mǎn)足需求,。
Abstract:
Key words :

  摘  要: 超級(jí)計(jì)算機(jī)對(duì)其運(yùn)行環(huán)境有極為苛刻的要求,,它的持續(xù)穩(wěn)定運(yùn)行需要通過(guò)水冷,、風(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)通過(guò)分布在機(jī)房多處的溫度傳感器采集機(jī)房?jī)?nèi)的溫度值,,并將這些數(shù)據(jù)存入本地SQLite數(shù)據(jù)庫(kù),,再通過(guò)Boa服務(wù)和CGI技術(shù)訪問(wèn)這些信息,,系統(tǒng)管理人員則可以通過(guò)分析這些溫度信息判斷制冷設(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ù)可靠,,能夠滿(mǎn)足需求,。

  關(guān)鍵詞嵌入式系統(tǒng),;Linux,;Boa;SQLite,;公共網(wǎng)關(guān)接口

0 引言

  隨著計(jì)算任務(wù)規(guī)模越來(lái)越大,對(duì)超級(jí)計(jì)算機(jī)的性能要求也越來(lái)越高,,但隨之而來(lái)的問(wèn)題是超級(jí)計(jì)算機(jī)的功耗和發(fā)熱量越來(lái)越大,,同時(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ù)人員則可以通過(guò)分析保存在數(shù)據(jù)庫(kù)里的歷史數(shù)據(jù)判斷制冷設(shè)備的可靠性,,并以此為依據(jù)科學(xué)地制定機(jī)房溫度控制策略,。

1 系統(tǒng)技術(shù)分析

  該系統(tǒng)基于一種嵌入式開(kāi)發(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ù)人員可以通過(guò)瀏覽器查看這些信息,,圖1為單個(gè)溫度采集系統(tǒng)的框圖,。

001.jpg

  1.1 Boa服務(wù)器

  Boa是類(lèi)Unix操作系統(tǒng)下的一個(gè)開(kāi)源的Web服務(wù)器軟件,,最新版本的源碼包不到200 KB,。Boa是一個(gè)單任務(wù)服務(wù)器,即在同一時(shí)刻只能響應(yīng)一個(gè)用戶(hù)的請(qǐng)求,,當(dāng)多個(gè)用戶(hù)同時(shí)訪問(wèn)服務(wù)器時(shí),,只能有一個(gè)用戶(hù)的請(qǐng)求得到響應(yīng),,而其他用戶(hù)必須等待[1],。由于這些特性,,Boa服務(wù)器適合移植到資源受限的嵌入式系統(tǒng)中,。當(dāng)服務(wù)器收到來(lái)自瀏覽器的請(qǐng)求后,,會(huì)分析請(qǐng)求類(lèi)型,,若請(qǐng)求的是靜態(tài)網(wǎng)頁(yè),,則服務(wù)器直接向?yàn)g覽器返回靜態(tài)網(wǎng)頁(yè),,如是更復(fù)雜的請(qǐng)求,例如表單處理等,,則需要調(diào)用CGI程序處理用戶(hù)請(qǐng)求[2],。該系統(tǒng)通過(guò)源碼方式安裝Boa服務(wù)器,在安裝完成后還需要通過(guò)修改配置文件boa.conf對(duì)服務(wù)器進(jìn)行配置[3-4],。

  1.2 CGI編程

  CGI程序是Web服務(wù)器的一種后臺(tái)程序,,用于處理來(lá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)輸入中獲取來(lái)自瀏覽器的數(shù)據(jù),,并能將處理結(jié)果返回給瀏覽器[4-5],。

  1.3 SQLite數(shù)據(jù)庫(kù)

  SQLite是一款開(kāi)源的、嵌入式關(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ù)中而不需要通過(guò)網(wǎng)絡(luò)傳輸[6-7]。本系統(tǒng)中通過(guò)源碼方式安裝SQLite數(shù)據(jù)庫(kù),,需要注意的是在安裝過(guò)程中會(huì)生成一些文件,,需要將其中的動(dòng)態(tài)鏈接庫(kù)文件復(fù)制到嵌入式Linux的/usr/lib目錄下,除此之外還有一個(gè)頭文件sqlite3.h和一個(gè)庫(kù)文件libsqlite3.a,,在編寫(xiě)基于數(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ī)房管理人員通過(guò)分析大量的歷史數(shù)據(jù),可以判斷機(jī)房?jī)?nèi)的制冷設(shè)備能夠滿(mǎn)足制冷需求,還能夠根據(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)

002.jpg

  圖2為溫度采集系統(tǒng)中單個(gè)節(jié)點(diǎn)的硬件連接圖,每個(gè)節(jié)點(diǎn)由一個(gè)S3C2440嵌入式控制平臺(tái)和8個(gè)溫度傳感器組成,。圖中的8個(gè)圓圈是DS18B20溫度傳感器,,該傳感器是一種高精度的單線(xiàn)式傳感器,通過(guò)一條數(shù)據(jù)線(xiàn)與處理器互連,;圖中的4條數(shù)據(jù)線(xiàn)長(zhǎng)度為4 m,,其余4條數(shù)據(jù)線(xiàn)的長(zhǎng)度為2 m,這種拓?fù)浣Y(jié)構(gòu)可以保證該節(jié)點(diǎn)能夠均勻地采集到其覆蓋范圍內(nèi)的溫度信息,。另外為保障系統(tǒng)的穩(wěn)定性,,傳感器的VCC和GND引腳沒(méi)有與處理器相連,而是使用獨(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ù)人員則能夠通過(guò)這臺(tái)PC獲取機(jī)房?jī)?nèi)各處的溫度信息,。

  2.2 溫度信息的采集

  處理器通過(guò)單總線(xiàn)發(fā)送指令控制傳感器,對(duì)該傳感器進(jìn)行操作的指令可以分為3類(lèi):1條復(fù)位指令,、5條ROM指令,、6條RAM指令,每進(jìn)行一次操作都需要至少3條組合指令,,即1條復(fù)位指令,、1條ROM指令和1條RAM指令,在某些情況下并不需要執(zhí)行ROM指令,,這時(shí)可以使用“跳過(guò)ROM”指令來(lái)代替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ù)分別用于向傳感器寫(xiě)1 B數(shù)據(jù)和從傳感器讀1 B數(shù)據(jù),需要根據(jù)傳感器的時(shí)序圖實(shí)現(xiàn)這兩個(gè)函數(shù),。向傳感器發(fā)送ROM或RAM指令是通過(guò)函數(shù)Write_byte實(shí)現(xiàn)的,,從傳感器讀取溫度值是通過(guò)函數(shù)Read_byte實(shí)現(xiàn)的,圖3為溫度傳感器驅(qū)動(dòng)程序的流程圖,。

003.jpg

  2.3 溫度信息存入數(shù)據(jù)庫(kù)

  傳感器的驅(qū)動(dòng)程序讀取溫度值后會(huì)調(diào)用copy_to_user將溫度數(shù)據(jù)傳輸?shù)接脩?hù)態(tài)進(jìn)程[11],,用戶(hù)態(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ù)存放在嵌入式開(kāi)發(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ǔ)句功能可以很好地滿(mǎn)足這種應(yīng)用[12],具體過(guò)程如下(下面函數(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 查詢(xún)溫度信息

  系統(tǒng)維護(hù)人員可以通過(guò)PC上的瀏覽器訪問(wèn)任意一個(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)用的支持不全面,,因此如果需要通過(guò)網(wǎng)絡(luò)訪問(wèn)數(shù)據(jù)庫(kù)中的信息,,可以先將數(shù)據(jù)庫(kù)中的信息導(dǎo)出到本地文件中,再通過(guò)網(wǎng)絡(luò)訪問(wèn)這個(gè)本地文件,。每個(gè)監(jiān)測(cè)節(jié)點(diǎn)中都有一個(gè)CGI程序負(fù)責(zé)將數(shù)據(jù)庫(kù)中的信息導(dǎo)出到本地的文本文件中,,以導(dǎo)出表ds18b20_0中的數(shù)據(jù)為例,過(guò)程如下:

  char*sql="select*from ds18b20_0,;"

  //定義一條SQL語(yǔ)句,,查詢(xún)整個(gè)表ds18b20_0

  sqlite3_get_table(db,sql,,&result,,&row,&colum,,&zErr)

  //執(zhí)行上述SQL語(yǔ)句,,將查詢(xún)結(jié)果保存在result中,

  并返回查詢(xún)結(jié)果中的行數(shù)和列數(shù)

  最后這個(gè)CGI程序還要將保存在result中的臨時(shí)結(jié)果輸出到文本文件中,,因此當(dāng)網(wǎng)頁(yè)中一個(gè)超鏈接指向這個(gè)文本文件時(shí),,用戶(hù)在瀏覽器中點(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ì)比可知,通過(guò)該系統(tǒng)采集到的數(shù)據(jù)可靠,,同時(shí)也可以說(shuō)明機(jī)房?jī)?nèi)各處的溫度保持在一個(gè)穩(wěn)定的狀態(tài),。

004.jpg

4 結(jié)論

  Web服務(wù)器提供了一種通過(guò)局域網(wǎng)或廣域網(wǎng)訪問(wèn)和控制嵌入式設(shè)備的方式,這種方式基于成熟的網(wǎng)絡(luò)通信技術(shù),,使用這種方式能夠?qū)⑶度胧皆O(shè)備部署到任何地方而無(wú)需過(guò)多額外成本,,而嵌入式數(shù)據(jù)庫(kù)則為數(shù)據(jù)的存儲(chǔ)和訪問(wèn)帶來(lái)了極大的便利。本文首先分析了天河2號(hào)機(jī)房溫度采集的需求,,針對(duì)這種需求提出了構(gòu)建分布式溫度采集系統(tǒng)的思想,,該系統(tǒng)通過(guò)分布在機(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ù)員則可以通過(guò)網(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] 孫輝,,陸松年,,楊樹(shù)堂.基于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].魏永明,耿岳,,鐘書(shū)毅,,譯.北京:中國(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.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。