《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 超算中心環(huán)境監(jiān)測系統(tǒng)的設(shè)計和實現(xiàn)
超算中心環(huán)境監(jiān)測系統(tǒng)的設(shè)計和實現(xiàn)
2015年微型機與應(yīng)用第18期
冉凡燦,蔣句平
(國防科學技術(shù)大學 計算機學院,湖南 長沙 410073)
摘要: 超級計算機對其運行環(huán)境有極為苛刻的要求,它的持續(xù)穩(wěn)定運行需要通過水冷、風冷等設(shè)備對機房溫度進行嚴格控制,為了檢測制冷設(shè)備的穩(wěn)定程度并制定合理的溫度控制策略,提出了以Linux操作系統(tǒng)和S3C2440處理器為平臺構(gòu)建分布式溫度采集系統(tǒng)的思想,該系統(tǒng)通過分布在機房多處的溫度傳感器采集機房內(nèi)的溫度值,并將這些數(shù)據(jù)存入本地SQLite數(shù)據(jù)庫,再通過Boa服務(wù)和CGI技術(shù)訪問這些信息,系統(tǒng)管理人員則可以通過分析這些溫度信息判斷制冷設(shè)備的可靠性并制定合理的溫度控制策略。首先論述了系統(tǒng)的相關(guān)技術(shù)和實現(xiàn)方法,再將系統(tǒng)布置在機房中進行測試,測試結(jié)果表明,系統(tǒng)運行穩(wěn)定、監(jiān)測數(shù)據(jù)可靠,能夠滿足需求。
Abstract:
Key words :

  摘  要: 超級計算機對其運行環(huán)境有極為苛刻的要求,它的持續(xù)穩(wěn)定運行需要通過水冷、風冷等設(shè)備對機房溫度進行嚴格控制,為了檢測制冷設(shè)備的穩(wěn)定程度并制定合理的溫度控制策略,提出了以Linux操作系統(tǒng)和S3C2440處理器為平臺構(gòu)建分布式溫度采集系統(tǒng)的思想,該系統(tǒng)通過分布在機房多處的溫度傳感器采集機房內(nèi)的溫度值,并將這些數(shù)據(jù)存入本地SQLite數(shù)據(jù)庫,再通過Boa服務(wù)和CGI技術(shù)訪問這些信息,系統(tǒng)管理人員則可以通過分析這些溫度信息判斷制冷設(shè)備的可靠性并制定合理的溫度控制策略。首先論述了系統(tǒng)的相關(guān)技術(shù)和實現(xiàn)方法,再將系統(tǒng)布置在機房中進行測試,測試結(jié)果表明,系統(tǒng)運行穩(wěn)定、監(jiān)測數(shù)據(jù)可靠,能夠滿足需求。

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

0 引言

  隨著計算任務(wù)規(guī)模越來越大,對超級計算機的性能要求也越來越高,但隨之而來的問題是超級計算機的功耗和發(fā)熱量越來越大,同時由于計算密度的差異,同一個計算任務(wù)在不同的時間段內(nèi)計算機的發(fā)熱量不同,因此機房內(nèi)的溫度極易波動。而超級計算機的持續(xù)可靠運行需要穩(wěn)定的機房溫度,因此機房內(nèi)的制冷效果以及制冷策略的制定變得極為重要。本文以天河2號超級計算機機房管理為背景,提出了一種分布式溫度采集方法用以檢測機房內(nèi)溫度的穩(wěn)定性和制冷設(shè)備的可靠性。首先分析了以Linux操作系統(tǒng)和S3C2440嵌入式處理器為平臺,并利用Boa服務(wù)器、SQLite數(shù)據(jù)庫和溫度傳感器構(gòu)建分布式溫度采集系統(tǒng)的可行性,并給出了系統(tǒng)的具體實現(xiàn)方法,最后對系統(tǒng)進行了測試。由于這種分布式溫度采集系統(tǒng)能夠同時采集到機房內(nèi)多處的溫度信息,相比使用單個傳感器或使用溫度計對機房溫度進行采集,該系統(tǒng)的效率更高,采集到的數(shù)據(jù)也更加可靠。而機房維護人員則可以通過分析保存在數(shù)據(jù)庫里的歷史數(shù)據(jù)判斷制冷設(shè)備的可靠性,并以此為依據(jù)科學地制定機房溫度控制策略。

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

  該系統(tǒng)基于一種嵌入式開發(fā)平臺,該平臺上集成了一顆S3C2440嵌入式處理器,并且平臺上已經(jīng)移植了Linux操作系統(tǒng)。在此基礎(chǔ)上又移植了Boa服務(wù)器和SQLite數(shù)據(jù)庫,并在處理器的6個IO引腳上掛接了溫度傳感器DS18B20,這些傳感器分布在機房各處。系統(tǒng)采集的溫度數(shù)據(jù)存儲到數(shù)據(jù)庫中,而機房維護人員可以通過瀏覽器查看這些信息,圖1為單個溫度采集系統(tǒng)的框圖。

001.jpg

  1.1 Boa服務(wù)器

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

  1.2 CGI編程

  CGI程序是Web服務(wù)器的一種后臺程序,用于處理來自瀏覽器的請求,是實現(xiàn)瀏覽器與服務(wù)器動態(tài)交互的一種方式,通常情況下提交瀏覽器中的表單或點擊一個超級鏈接就能夠觸發(fā)一個CGI程序的執(zhí)行[5],例如<form action="/cgi-bin/relay.cgi"method="post">是瀏覽器中的一個表單,提交這個表單就能夠觸發(fā)位于服務(wù)器上的一個CGI程序relay.cgi的執(zhí)行;而<a href="/cgi-bin/dump.cgi">dump database</a>是一個超鏈接,點擊這個超鏈接就能夠觸發(fā)dump.cgi的執(zhí)行。CGI程序能夠從環(huán)境變量或標準輸入中獲取來自瀏覽器的數(shù)據(jù),并能將處理結(jié)果返回給瀏覽器[4-5]。

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

  SQLite是一款開源的、嵌入式關(guān)系型數(shù)據(jù)庫,它主要應(yīng)用在嵌入式設(shè)備上,在很多Android和IOS設(shè)備上都可以看到它的身影。與其他大型數(shù)據(jù)庫不同,SQLite數(shù)據(jù)庫和基于這個數(shù)據(jù)庫的應(yīng)用程序共同運行于同一個系統(tǒng)中,應(yīng)用程序產(chǎn)生的數(shù)據(jù)可以直接存入數(shù)據(jù)庫中而不需要通過網(wǎng)絡(luò)傳輸[6-7]。本系統(tǒng)中通過源碼方式安裝SQLite數(shù)據(jù)庫,需要注意的是在安裝過程中會生成一些文件,需要將其中的動態(tài)鏈接庫文件復(fù)制到嵌入式Linux的/usr/lib目錄下,除此之外還有一個頭文件sqlite3.h和一個庫文件libsqlite3.a,在編寫基于數(shù)據(jù)庫的應(yīng)用程序時需要使用這兩個文件。在本系統(tǒng)中數(shù)據(jù)庫用于存儲溫度傳感器采集的溫度值,每個傳感器都對應(yīng)數(shù)據(jù)庫中的一個表,該表用于存儲傳感器采集的數(shù)據(jù)。機房管理人員通過分析大量的歷史數(shù)據(jù),可以判斷機房內(nèi)的制冷設(shè)備能夠滿足制冷需求,還能夠根據(jù)歷史數(shù)據(jù)制定合理的溫度控制策略,使天河2號計算機系統(tǒng)持續(xù)穩(wěn)定地運行。

2 溫度監(jiān)測系統(tǒng)的實現(xiàn)

  2.1 系統(tǒng)硬件實現(xiàn)

002.jpg

  圖2為溫度采集系統(tǒng)中單個節(jié)點的硬件連接圖,每個節(jié)點由一個S3C2440嵌入式控制平臺和8個溫度傳感器組成。圖中的8個圓圈是DS18B20溫度傳感器,該傳感器是一種高精度的單線式傳感器,通過一條數(shù)據(jù)線與處理器互連;圖中的4條數(shù)據(jù)線長度為4 m,其余4條數(shù)據(jù)線的長度為2 m,這種拓撲結(jié)構(gòu)可以保證該節(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條復(fù)位指令、5條ROM指令、6條RAM指令,每進行一次操作都需要至少3條組合指令,即1條復(fù)位指令、1條ROM指令和1條RAM指令,在某些情況下并不需要執(zhí)行ROM指令,這時可以使用“跳過ROM”指令來代替ROM指令[8-9]。傳感器驅(qū)動程序作為Linux系統(tǒng)的內(nèi)核加載模塊[10],每隔  5 min依次讀取所有傳感器的數(shù)據(jù),驅(qū)動程序的核心函數(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為溫度傳感器驅(qū)動程序的流程圖。

003.jpg

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

  傳感器的驅(qū)動程序讀取溫度值后會調(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ù)化語句功能可以很好地滿足這種應(yīng)用[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服務(wù)器的后臺CGI程序支持。由于SQLite是一種嵌入式數(shù)據(jù)庫,它對網(wǎng)絡(luò)應(yīng)用的支持不全面,因此如果需要通過網(wǎng)絡(luò)訪問數(shù)據(jù)庫中的信息,可以先將數(shù)據(jù)庫中的信息導(dǎo)出到本地文件中,再通過網(wǎng)絡(luò)訪問這個本地文件。每個監(jiān)測節(jié)點中都有一個CGI程序負責將數(shù)據(jù)庫中的信息導(dǎo)出到本地的文本文件中,以導(dǎo)出表ds18b20_0中的數(shù)據(jù)為例,過程如下:

  char*sql="select*from ds18b20_0;"

  //定義一條SQL語句,查詢整個表ds18b20_0

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

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

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

  最后這個CGI程序還要將保存在result中的臨時結(jié)果輸出到文本文件中,因此當網(wǎng)頁中一個超鏈接指向這個文本文件時,用戶在瀏覽器中點擊這個超鏈接就可以查看溫度信息。

3 測試結(jié)果

  在系統(tǒng)構(gòu)建完成之后將其部署在機房中并對其穩(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)。

004.jpg

4 結(jié)論

  Web服務(wù)器提供了一種通過局域網(wǎng)或廣域網(wǎng)訪問和控制嵌入式設(shè)備的方式,這種方式基于成熟的網(wǎng)絡(luò)通信技術(shù),使用這種方式能夠?qū)⑶度胧皆O(shè)備部署到任何地方而無需過多額外成本,而嵌入式數(shù)據(jù)庫則為數(shù)據(jù)的存儲和訪問帶來了極大的便利。本文首先分析了天河2號機房溫度采集的需求,針對這種需求提出了構(gòu)建分布式溫度采集系統(tǒng)的思想,該系統(tǒng)通過分布在機房各處的傳感器實現(xiàn)溫度信息的采集,并將采集到的數(shù)據(jù)存儲到數(shù)據(jù)庫中。由于傳感器分布在機房的多個位置,因此采集到的數(shù)據(jù)能更好地反映機房內(nèi)的溫度信息。相比傳統(tǒng)方式,這種分布式溫度采集系統(tǒng)采集到的數(shù)據(jù)更為可靠,能夠更準確反映機房的溫度信息。而機房維護員則可以通過網(wǎng)絡(luò)查看這些數(shù)據(jù),并以這些數(shù)據(jù)為依據(jù)調(diào)整水冷和風冷設(shè)備的工作狀態(tài),使機房環(huán)境保持在最佳狀態(tài)以保證天河2號超級計算機的可靠穩(wěn)定運行。

參考文獻

  [1] 孫輝,陸松年,楊樹堂.基于Linux和S3c2410的嵌入式Web Sever的研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2007,24(2):134-136.

  [2] 劉鑫.基于ARM平臺的嵌入式Web服務(wù)器的設(shè)計與實現(xiàn)[D].成都:電子科技大學,2010.

  [3] 王軍飛.基于ARM和Linux的嵌入式Web服務(wù)器的研究與實現(xiàn)[D].太原:太原理工大學,2009.

  [4] 張曦熀,柴志雷.嵌入式Web服務(wù)器中的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服務(wù)器的研究及應(yīng)用[D].南昌:南昌大學,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].微型機與應(yīng)用,2013,32(15):69-72.

  [10] CORBET J, RUBINI A, KROAH-HARTMAN G. Linux設(shè)備驅(qū)動程序(第三版)[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.


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