2. 中国电信股份有限公司 西安分公司, 陕西 西安 710004
在工业测控系统中,嵌入式设备有限的内存和CPU资源限制了其在某些领域的应用。研究不同设备之间的资源共享的十分必要[1]。Google在(SES San Jose 2006)首次提出“云计算”的概念,提供了解决异域异构信息资源共享、信息综合利用的方案。以虚拟化为核心技术构建云计算平台,实现嵌入式设备资源的共享及并行访问,提高资源的使用率,实现弹性计算,是高性能计算的一种有效途径[2]。2012年风河公司首次提出了嵌入式云计算,以有效改善嵌入式设备CPU资源和内存的不足[3]。云计算可以解决工业现场中海量密集数据的统一存储与管理以及实现软硬件资源与信息资源的共享利用。但是在工业自动化、过程控制、航空航天等应用中,为应对外界事件响应速度和精确事件的处理能力,还需保证系统的实时性[4],所以资源实时共享是目前嵌入式云计算系统应用研究的核心技术之一。
本文基于开源的Eucalyptus云平台,设计以S3C2440A为中央处理器的嵌入式云终端的硬件平台,在终端硬件平台上构建Linux+Xenomai系统,把现场数据采集任务作为系统的实时任务调度,利用KVM/QEMU虚拟化技术把现场嵌入式设备构建成嵌入式云计算系统中的NC节点,纳入嵌入式云计算系统中管理,在云计算系统的实时调度下,实现嵌入式设备资源实时共享,提高资源的利用率。通过在油田现场进行测试,验证该方法的实用性。
1 系统体系结构本文研究的基于嵌入式云计算系统的资源实时共享方法,其中的嵌入式云计算系统由现场资源节点和云管理中心两部分组成,前端的测控节点实现嵌入式系统的CPU、网卡、存储、传感器等资源的虚拟化。系统的总体结构如图 1所示。
基于亚马逊公司的Eucalyptus云平台完成嵌入式云计算系统数据管理中心的资源调度功能。Eucalyptus能够监控各种虚拟机实例、虚拟设备的全局性,能够动态地配置各个集群的计算、存储、网络资源和传感器等资源,同时提供与AWS(amazon web services)的EC2(elastic compute cloud)兼容的云计算平台和与S3(simple storage service)兼容的云存储平台。Eucalyptus架构包含5个组件:CLC(cloud controller)组件,Walrus(put/get存储)组件,CLC和Walrus构成云管理层;CC组件(cluster controller),SC组件(storage controller),CC和SC对各自集群资源进行管理。受实验环境限制,这里将上述管理组件安装在1台PC机上。用NC组件(node controller)把节点资源虚拟化后构成资源池[4]。云计算平台整体架构如图 2所示,当有远端的请求命令访问嵌入式云计算系统的云管理层程客户时,云计算系统实现高效配置资源和远程实时控制,为用户提供服务。
现场测控时,前端NC节点选取三星公司的S3C2440A作为核心芯片(采用ARM920T内核),为克服Linux系统的分时特性,在软件上移植实时核Xenomai,通过现场构建起的Mesh Generation网络,实现现场分布式实时采集和远程实时控制,以及计算资源、传感器等虚拟化,达到资源客户端高效的现场资源共享。
2 硬件结构选用飞凌公司的FL2440核心板,该板使用S3C2440A作核心芯片,底板为实验室自主设计的底板。现场嵌入式终端测控节点的外围硬件电路按主要功能划分为:信号调理模块、数据采集模块及通信网络模块等。硬件结构如图 3所示[5]。
①数据采集部分:采集次声波选用ADS8341做模数转换;
②网络部分包含WIFI网络模块及以太网2种网络模块。WIFI网络模块使用基于SPI的marvell 88w8686 WIFI网络传输模块,是构建Mesh网络的硬件基础;以太网模块使用10/100M自适应的DM9000A构建网络传输模块,连接系统的云管理层;
③其他接口电路包括时系统复位电路、时钟电路、电源转换电路、NandFlash/NorFlash选择电路、串口电路、JTAG接口电路。
3 软件设计 3.1 XenomaiXenomai原理 基于Adeos(adaptive domain environment for operating system)纳内核之上实现,Adeos在操作系统上集成一个灵活自适应的可扩展运行环境,为多个操作系统的共存和各系统共享硬件资源提供条件。Adeos纳内核的原理是在独立的域内运行各自操作系统,并且各个域也有独立的软件抽象层(如进程抽象、虚拟内存等),其中的资源也可以被各个域共享利用[6]。Adeos纳内核是在现有操作系统下插入一个软件层,为上层的多个操作系统提供机制实现硬件共享机理和某些原语。应用时提供的“硬件-内核”的纳内核能满足系统的硬件实时要求[7]。Xenomai采用双内核机制,是Linux内核的强实时扩展,是集成于Linux中的实时开发框架,能够提供给用户空间应用程序与接口无关的硬实时性能[8, 9]。图 4描述了Xenomai的分层架构。
由图 4看出,Xenomai中含有多个抽象层:直接工作于硬件之上的Adeos纳内核,位于Adeos之上的是与处理器的体系结构相关的硬件抽象层(hardware abstraction lay,HAL),在HAL之上的是Xenomai的核心部分,即抽象实时操作系统内核,其实现了一系列实用RTOS的基本服务,包括由Xenomai的本地API(native)和由其他传统RTOS的客户API(如RTAI、VxWorks、POSIX等)。客户API旨在使运行于传统RTOS的应用程序易于移植于Xenomai上。Linux+Xenomai系统拥有2种运行模式,即内核模式和用户模式,前者通过实时内核实现,为系统提供硬实时性,后者通过系统调用接口实现,保证了系统的可靠性和良好的软实时性[10]。
构建Linux+Xenomai操作系统 交叉编译Linux+Xenomai内核和BusyBox,选用corss4.3.3 .tar.bz2交叉工具链,编译过程如下:
# mkdir /usr/local/arm/;把corss-4.3.3.tar.bz2放在该目录下解压:# tar-jxvf corss-4.3.3.tar.bz2;在进行交叉编译之前,修改配置交叉编译路径:# export PATH=/usr/local/arm/4.3.3/bin:$PATH。
选用Linux-2.6.33+Xenomai 2.6.2.1 构建操作系统。构建内核步骤如下:
[root@EmbedSky xenomai-2.6.2.1] # ./scripts/prepare-kernel.sh-linux=/usr/src/linux-2.6.33
Target architecture[default i686]:arm
I-ipe patch[default/usr/src/xenomai-2.6.2.1/ksrc/arm/patch
/adeos-ipipe-2.6.33-arm-1.16-01.patch]:
编译前对Makefile文件进行修改,选择内核移植的目标单板体系架构为arm,修改CROSS-COMPILE=arm-linux-,由于有些内核选项会影响系统对实时性的支持,因此,编译内核过程中必须修改以下配置:关闭power management support;关闭CPU frequency scaling;开启抢占式内核选项。由于S3C2440A没有FPU单元,因此关闭选项CONFIG XENO HW FPU。对于Xenomai接口的设置,根据需要选择Xenomai中本地API编译成内核模块或编译进内核。选择编译成内核模块,修改内核其他源码,定制自己的内核,最后编译。
Xenomai交叉编译 添加交叉编译工具链的路径到PATH中后执行下面命令:
[root@EmbedSky xenomai-2.6.2.1] #./configure CFLAGS="-march=armv4t" LDFLAGS="-march=armv4t"-build=i686-pc-linux-gnu-host=arm-none-linux-gnueabi-disable-arm-tsc[root@EmbedSky xenomai-2.6.2.1]#make DESTDIR=/usr/xenomai/-install install;其中/usr/xenomai/-install是Xenomai的安装目录。
根文件系统的构建 文件系统的启动是在内核启动之后进行的,文件系统是嵌入式Linux系统一切数据的基础。构建根文件系统的过程,包括Linux常用命令和工具的编译(如BusyBox工具)及根文件系统的制作。在制作文件系统时把_install/usr/xenomai/拷到制作的文件系统的/usr/中之后进行编译[11, 12]。
3.2 虚拟化技术KVM/QEMU虚拟化技术 KVM(kernel based virtual machine)是开源虚拟机软件,使用Linux自身的调度器进行管理,结合QEMU采用基于硬件的全虚拟化解决方案来完成设备的虚拟化。KVM虚拟化的架构如图 5所示[13, 14]。
本文使用KVM技术,通过扩展处理器来实现虚拟化,达到Linux和Windows镜像的多个虚拟机同时运行于同一硬件平台上的目的。KVM使系统内核本身成为一个虚拟机管理程序(hypervisor)。通过/dev/kvm字符设备的加载来创建新虚拟设备,实现与用户空间设备通信,完成对虚拟机的管理。通过QEMU进程为KVM虚拟机创建客户操作系统。当宿主机系统为Linux系统时,其中的虚拟机就是QEMU进程,相当于Linux中的标准进程,虚拟机的虚拟处理器相当于进程中的线程[13, 14]。QEMU与KVM相互配合完成系统的虚拟化。首先,在QEMU中执行ioctl函数运行/dev/kvm设备,即创建一个KVM虚拟机,给虚拟机分配内存。然后把QEMU中引导镜像映射到内存,并运行一个循环,在循环中调用一个ioctl函数来开启虚拟机操作系统。当进程在客户操作系统中执行后,ioctl函数调用返回。QEMU保证了虚拟机操作系统退出的原因和动作之间的一致。在KVM申请QEMU中的I/O设备时,QEMU会对I/O设备虚拟化,执行ioctl来运行KVM[15]。
ARM架构平台虚拟化 作为典型的虚拟机管理程序,ARM体系架构虚拟化工作包括3部分:CPU虚拟化、存储虚拟化和I/O虚拟化[16]。对CPU虚拟化时采用传统“陷阱-仿真”机制解决敏感指令的陷入,因为ARM硬件本身并不支持虚拟化;对内存的虚拟化,使用的功能单元是MMU,使用影子页表来动态为VMM分配地址,避免了为客户端系统静态分配地址的低效与僵化;对I/O的虚拟化,利用QEMU来虚拟I/O接口。
编译QEMU QEMU是一个通用开源机器的仿真器和虚拟器。把QEMU仿真器作为用户空间进程运行于KVM的上下文环境中,通过与操作系统的相互配合,发送消息给内核模块并对I/O及其他设备执行仿真,完成系统级和用户级的仿真。在配置好QEMU的运行参数后,QEMU支持KVM。KVM 提供一个运行在“KVM用户空间”的代码包。
编译QEMU的基本步骤如下:
1)将/home/QEMU/git/qemu中的kvm.h文件的第 21行修改为:#include
2)将/usr/include/linux/kvm.h文件中的第13行#include
#include
3)在qemu目录中编译 qemu # make
KVM需要先虚拟CPU和模拟内存管理单元(MMU),之后通过KVM把集成了Xenomai实时核的数据采集设备虚拟化,共享虚拟采集设备。同样也可以使用QEMU虚拟化网卡、USB等。
创建并运行虚拟机 在云计算系统中,首先要进行网络配置、euca的网络设置和NC节点的配置与注册。具体步骤如下:
1) 交换公共SSH密钥
在cloud controller上设置eucalyptus的密码:
sudo passwd eucalyptus
sudo-u eucalyptus ssh-copy-id-I /var/lib /eucalyptus/.ssh
/id-rsa.pubeucalyptus@ip of nc
2) 前端节点注册
sudo /usr/sbin/euca-conf-register-nodes ip of nc /etc/eucalyptus
/eucalyptus.conf
在eucalyptus中对简单虚拟机基本管理功能的实现就是将基本的虚拟化管理功能构建成API,本文使用下载安装的euca2ools工具完成镜像的制作、实例上传运行、查看实例运行情况等功能,通过统一的Web界面禁止镜像访问和修改镜像资料。其中Amazon的EC2用于托管虚拟机的通用基础设施服务;用户通过网页访问平台,在这些虚拟机上运行程序。
资源实时共享 通过构建的Linux+Xenomai系统,利用Xenomai中的API,使用Xenomai的本地API,把实时性要求高的任务做为Xenomai中的任务进行管理调度。通过KVM/QEMU虚拟化技术对实时任务进行封装,把封装后的虚拟机任务做为嵌入式云计算系统中的实时任务进行管理调度,实现采集设备等实时性要求高的测试资源实时共享。
4 系统测试将文中研究的基于嵌入式云计算系统的资源实时共享的方法应用到油井深度测量系统项目中。测试现场数据的采集是通过在油田现场构建的Mesh网络实现资源节点之间的网络连接。在系统功能上,采集到的数据通过剔除野点值、接箍波提取、液面回波提取、FFT变换等一系列处理后,得到油井液面深度,供用户实时查询;同时现场数据在嵌入式数据库中管理和实时同步至远程的数据管理中心进行管理。在油井深度测量系统中,在以S3C2440A为中央处理器的硬件平台上,移植实时核Xenomai,构建Linux+Xenomai系统,把数据采集做为系统中的实时任务,通过虚拟化封装后纳入嵌入式云计算系统中进行实时管理,实现了采集设备资源的实时共享。系统通过对华北油田项目的20多口井进行测试,运行正常,资源能够达到实时共享。现场使用手机控制测量的操作界面如图 6所示。
5 结 论本文基于嵌入式云计算系统提出并实现了一种嵌入式云资源实时共享的方法。基于开源的eucalyptus云平台,首先设计出了基于S3C2440A的采集前端硬件,然后在系统软件上移植了Xenomai,提高了系统的实时性,利用虚拟化技术把数据采集设备做为实时任务纳入了嵌入式云计算系统中管理,把采集设备封装成嵌入式云计算系统中的实时任务来管理和调度,实现了资源的实时共享。通过系统测试验证结果表明,嵌入式云计算系统完成了现场测试资源的实时共享。现场试验结果表明,所使用的基于嵌入式云计算系统的实时资源共享方法能够满足工程应用需求。基于网卡等更多嵌入式硬件设备资源的实时共享和基于嵌入式云计算平台资源的实时调度是将是下一步研究的重点内容。
[1] | Shahzad A A, Musa S, Aborujilah A, et al. A Performance Approach: SCADA System Implementation within Cloud Computing Environment[C]//2013 International Conference on Advanced Computer Science Applications and Technologies, 2013: 274-277 |
Click to display the text | |
[2] | Guan N, Ekberg P, Stigge M, et al. Resource Sharing Protocols for Real-Time Task Graph Systems[C]//2011 23rd Euromicro Conference on Real-Time Systems, 2011: 272-281 |
Click to display the text | |
[3] | Behnam M, Nemati F, Nolte T, et al. Towards an Efficient Approach for Resource Sharing in Real-Time Multiprocessor Systems[C]//2011 6th IEEE International Symposium on Industrial Embedded Systems, 2011: 99-102 |
Click to display the text | |
[4] | Hazarika P, Baliga V, Tolety S. The Mobile-Cloud Computing (MCC) Roadblocks[C]//2014 Eleventh International Conference on Wireless and Optical Communications Networks, 2014: 1-5 |
[5] | Lim H C, Babu S, Chase J S, et al. Automated Control in Cloud Computing: Challenges and Opportunities[J]. First Workshop on Automated Control for Datacenters and Clouds, 2009, 30(1): 621-628 |
Click to display the text | |
[6] | Lin F C, Wang C J, Chung L K, et al. The Framework of Novel K-Means Embedded Cloud Computing Platform for Real-Time Unmanned Aerial Vehicle (UAV) Remote Sensing Images Processing[C]//The International Symposium on Grids and Clouds, 2013: 13-18 |
[7] | Suakanto S, Supangkat S H, Saragih R. Performance Measurement of Cloud Computing Services[C]//Computer Science, 2012: 1205 |
[8] |
韩守谦, 裴海龙,王清阳. 基于Xenomai的实时嵌入式Linux操作系统的构建[J]. 计算机工程与设计,2011, 32(1):96-98 Han Shouqian, Pei Hailong, Wang Qingyang. Construction Real-Time Embedded Linux Operating System Based on Xenomai[J]. Computer Engineering and Design. 2011, 32(1): 96-98 (in Chinese) |
Cited By in Cnki (20) | Click to display the text | |
[9] | Nemati F. Resource Sharing in Real-Time Systems on Multiprocessors[D]. Malardalen University, Sweden, 2012 |
Click to display the text | |
[10] | Litayem N, Saoud S B. Impact of the Linux Real-Time Enhancements on the System Performances for Multi-Core Intel Architectures[J]. International Journal of Computer Applications, 2011(3):17-23 |
Click to display the text | |
[11] | Kudryavtsev A, Koshelev V, Avetisyan A. Modern hpc Cluster Virtualization Using kvm and Palacios[C]//2012 19th International Conference on High Performance Computing, 2012: 1-9 |
[12] | Schoeberl M, Korsholm S, Kalibera T, et al. A Hardware Abstraction Layer in Java[J]. Acm Transactions on Embedded Computing Systems, 2011, 10(4):1061-1075 |
Click to display the text | |
[13] | Dall C, Nieh J. KVM for ARM[C]//Proceedings of the Ottawa Linux Symposium, 2010: 45-56 |
[14] |
姚华超,王振宇. 基于KVM-QEMU与Libvirt的虚拟化资源池构建[J]. 计算机与现代化,2013(7):26-29 Yao Huachao, Wang Zhenyu. Construction of Virtualized Resource Pool Based on KVM-QEMU with Libvirt[J]. Computer and Modernization, 2013(7):26-29 (in Chinese) |
Cited By in Cnki | Click to display the text | |
[15] | Motakis A, Rigo A, Raho D. Platform Device Assignment to KVM-on-ARM Virtual Machines via VFIO[C]//2014 12th IEEE International Conference on Embedded and Ubiquitous Computing, 2014: 170-177 |
[16] | Divya K, Jeyalatha S. Key Technologies in Cloud Computing[C]//2012 International Conference on Technologies, Applications and Management, 2012: 196-199 |
2. Shannxi Branch of China Telecom Corporation Limited, Xi'an 710129, China