《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 超算中心环境监测系统的设计和实现
超算中心环境监测系统的设计和实现
2015年微型机与应用第18期
冉凡灿,蒋句平
(国防科学技术大学 计算机学院,湖南 长沙 410073)
摘要: 超级计算机对其运行环境有极为苛刻的要求,它的持续稳定运行需要通过水冷、风冷等设备对机房温度进行严格控制,为了检测制冷设备的稳定程度并制定合理的温度控制策略,提出了以Linux操作系统和S3C2440处理器为平台构建分布式温度采集系统的思想,该系统通过分布在机房多处的温度传感器采集机房内的温度值,并将这些数据存入本地SQLite数据库,再通过Boa服务和CGI技术访问这些信息,系统管理人员则可以通过分析这些温度信息判断制冷设备的可靠性并制定合理的温度控制策略。首先论述了系统的相关技术和实现方法,再将系统布置在机房中进行测试,测试结果表明,系统运行稳定、监测数据可靠,能够满足需求。
Abstract:
Key words :

  摘  要: 超级计算机对其运行环境有极为苛刻的要求,它的持续稳定运行需要通过水冷、风冷等设备对机房温度进行严格控制,为了检测制冷设备的稳定程度并制定合理的温度控制策略,提出了以Linux操作系统和S3C2440处理器为平台构建分布式温度采集系统的思想,该系统通过分布在机房多处的温度传感器采集机房内的温度值,并将这些数据存入本地SQLite数据库,再通过Boa服务和CGI技术访问这些信息,系统管理人员则可以通过分析这些温度信息判断制冷设备的可靠性并制定合理的温度控制策略。首先论述了系统的相关技术和实现方法,再将系统布置在机房中进行测试,测试结果表明,系统运行稳定、监测数据可靠,能够满足需求。

  关键词嵌入式系统;Linux;Boa;SQLite;公共网关接口

0 引言

  随着计算任务规模越来越大,对超级计算机的性能要求也越来越高,但随之而来的问题是超级计算机的功耗和发热量越来越大,同时由于计算密度的差异,同一个计算任务在不同的时间段内计算机的发热量不同,因此机房内的温度极易波动。而超级计算机的持续可靠运行需要稳定的机房温度,因此机房内的制冷效果以及制冷策略的制定变得极为重要。本文以天河2号超级计算机机房管理为背景,提出了一种分布式温度采集方法用以检测机房内温度的稳定性和制冷设备的可靠性。首先分析了以Linux操作系统和S3C2440嵌入式处理器为平台,并利用Boa服务器、SQLite数据库和温度传感器构建分布式温度采集系统的可行性,并给出了系统的具体实现方法,最后对系统进行了测试。由于这种分布式温度采集系统能够同时采集到机房内多处的温度信息,相比使用单个传感器或使用温度计对机房温度进行采集,该系统的效率更高,采集到的数据也更加可靠。而机房维护人员则可以通过分析保存在数据库里的历史数据判断制冷设备的可靠性,并以此为依据科学地制定机房温度控制策略。

1 系统技术分析

  该系统基于一种嵌入式开发平台,该平台上集成了一颗S3C2440嵌入式处理器,并且平台上已经移植了Linux操作系统。在此基础上又移植了Boa服务器和SQLite数据库,并在处理器的6个IO引脚上挂接了温度传感器DS18B20,这些传感器分布在机房各处。系统采集的温度数据存储到数据库中,而机房维护人员可以通过浏览器查看这些信息,图1为单个温度采集系统的框图。

001.jpg

  1.1 Boa服务器

  Boa是类Unix操作系统下的一个开源的Web服务器软件,最新版本的源码包不到200 KB。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 温度监测系统的实现

  2.1 系统硬件实现

002.jpg

  图2为温度采集系统中单个节点的硬件连接图,每个节点由一个S3C2440嵌入式控制平台和8个温度传感器组成。图中的8个圆圈是DS18B20温度传感器,该传感器是一种高精度的单线式传感器,通过一条数据线与处理器互连;图中的4条数据线长度为4 m,其余4条数据线的长度为2 m,这种拓扑结构可以保证该节点能够均匀地采集到其覆盖范围内的温度信息。另外为保障系统的稳定性,传感器的VCC和GND引脚没有与处理器相连,而是使用独立的5 V电源为传感器供电[8]。经实地测试,10个图2所示的温度采集节点基本可以将天河2号机房完整地覆盖,这些节点接入同一个路由器并与一台PC互联,而系统维护人员则能够通过这台PC获取机房内各处的温度信息。

  2.2 温度信息的采集

  处理器通过单总线发送指令控制传感器,对该传感器进行操作的指令可以分为3类:1条复位指令、5条ROM指令、6条RAM指令,每进行一次操作都需要至少3条组合指令,即1条复位指令、1条ROM指令和1条RAM指令,在某些情况下并不需要执行ROM指令,这时可以使用“跳过ROM”指令来代替ROM指令[8-9]。传感器驱动程序作为Linux系统的内核加载模块[10],每隔  5 min依次读取所有传感器的数据,驱动程序的核心函数是Write_byte和Read_byte,两个函数分别用于向传感器写1 B数据和从传感器读1 B数据,需要根据传感器的时序图实现这两个函数。向传感器发送ROM或RAM指令是通过函数Write_byte实现的,从传感器读取温度值是通过函数Read_byte实现的,图3为温度传感器驱动程序的流程图。

003.jpg

  2.3 温度信息存入数据库

  传感器的驱动程序读取温度值后会调用copy_to_user将温度数据传输到用户态进程[11],用户态进程则会将数据存入数据库。为了存储温度数据,每个温度采集节点需要创建一个本地的数据库,该数据库存放在嵌入式开发平台的板载Flash芯片上,每个数据库中需要创建8个表,用于存储该节点下每个传感器采集的数据。以0号传感器为例,该传感器采集的数据存储在表ds18b20_0中,表中有3列数据,分别为行编号、温度值、采集数据的时刻。由于需要循环将温度信息存入数据库,SQLite提供的参数化语句功能可以很好地满足这种应用[12],具体过程如下(下面函数省略了全部或部分参数):

  char*sql="insert into ds18b20_0 values(?,?,?)"

  //定义一条参数化的SQL语句

  sqlite3_prepare()//将上述语句编译成数据库引擎字节码

  sqlite3_bind_int(1,id)//将id和第一个“?”绑定

  sqlite3_bind_int(2,temperature)

  //将温度值temperature和第二个“?”绑定

  sqlite3_bind_text(3,time)

  //将时间字符串time和第三个“?”绑定

  sqlite3_step()//执行绑定了参数的SQL语句

  2.4 查询温度信息

  系统维护人员可以通过PC上的浏览器访问任意一个节点数据库中的温度信息,实现该功能需要节点中Boa服务器的后台CGI程序支持。由于SQLite是一种嵌入式数据库,它对网络应用的支持不全面,因此如果需要通过网络访问数据库中的信息,可以先将数据库中的信息导出到本地文件中,再通过网络访问这个本地文件。每个监测节点中都有一个CGI程序负责将数据库中的信息导出到本地的文本文件中,以导出表ds18b20_0中的数据为例,过程如下:

  char*sql="select*from ds18b20_0;"

  //定义一条SQL语句,查询整个表ds18b20_0

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

  //执行上述SQL语句,将查询结果保存在result中,

  并返回查询结果中的行数和列数

  最后这个CGI程序还要将保存在result中的临时结果输出到文本文件中,因此当网页中一个超链接指向这个文本文件时,用户在浏览器中点击这个超链接就可以查看温度信息。

3 测试结果

  在系统构建完成之后将其部署在机房中并对其稳定性和可靠性进行测试,启动系统并使其运行一段时间,以保证能够采集到足够量的数据。在浏览器地址栏输入其中一个温度监控节点的IP地址,例如192.168.1.112,并选择查看该节点下的任意一个传感器采集的数据,浏览器就能显示图4所示的该传感器采集的温度信息。由图4可知,这段时间内该传感器附近的温度维持在23℃,将多个传感器采集的数据与机房内的温度计对比可知,通过该系统采集到的数据可靠,同时也可以说明机房内各处的温度保持在一个稳定的状态。

004.jpg

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.


此内容为AET网站原创,未经授权禁止转载。