基于Linux的嵌入式高速SAR数据存储技术✴
2011-04-02黄斌
黄斌
(海装重庆局,重庆400043)
基于Linux的嵌入式高速SAR数据存储技术✴
黄斌
(海装重庆局,重庆400043)
为了实现对SAR原始回波数据的实时存储,提出了在以PowerPC为硬件核心的嵌入式Linux软件平台上,使用SSD硬盘实现高速数据存储的方案。采用Linux驱动程序控制SAS硬盘控制器,将SAR原始回波数据记录在SSD硬盘阵列上。模拟实验测试中数据存储速度可以达到200 Mbyte/s。分析了影响数据存储速度的因素,实验表明该方案可以满足SAR原始回波数据实时存储的要求。
合成孔径雷达;原始回波数据;高速数据存储;嵌入式Linux;SSD硬盘;SAS控制器
1 引言
合成孔径雷达(SAR)是一种脉冲体制的高分辨率成像雷达,具有全天时、全天候、侧视成像、分辨率不随轨道高度变化等优点,使之成为备受关注的测绘和侦察手段。随着SAR图像分辨率的提高、测绘带宽的增大以及工作模式的增多,SAR原始回波数据存储速度构成了制约图像质量和观测效率的重要因素。因此,SAR原始回波数据记录速度对于SAR相关技术研究和应用有着重要意义[1]。
本文针对SAR原始回波数据高速实时存储的需求,提出了以PowerPC为核心使用SSD硬盘的系统设计方案。该方案采用SAS控制器控制SSD硬盘,通过在嵌入式Linux软件平台上开发驱动模块,将PCI总线上采集到的回波数据不经过系统内存,以零拷贝的方式直接存储到SSD硬盘阵列中,有效提高了数据的存储速度。最后对该存储方案进行了测试和分析。
2 系统设计方案分析
目前,在实际应用中,高速实时存储系统的存储过程一般分为数据采集和数据存储两个部分。数据采集一般负责将数据采集到数据缓存区中,数据存储负责将缓存区中的数据记录在磁盘阵列中。根据数据采集和数据存储之间软硬件的实现方式不同以及存储过程本身实现方式不同,数据存储系统可以分为专用型数据存储系统和嵌入式总线型数据存储系统两种结构形式。
嵌入式总线型存储系统的结构框图如图1所示。图1中的方式1(细箭头)和方式2(粗箭头)分别代表了存储系统中两种不同的数据流走向,也代表了两种不同的总线型数据存储方式[2]。在方式1所代表的存储方式中,系统内存将数据采集和数据存储两个过程联系起来,高速数据通过FPGA采集缓存后,由PCI总线送进系统内存,然后再通过SAS控制器将内存中的数据写入SSD磁盘阵列中。从图1中可看出,数据进出内存都要占用PCI总线,由于PCI总线是一种共享总线,同一时刻只能有一个设备占用总线,因此数据采集硬件将外部数据送入内存的同时,SAS控制器不能将内存中的数据写入SSD磁盘阵列,即数据采集和数据存储过程不能并行执行,只能顺序操作,从而使总线的效率降低了一半,进而也限制了存储系统性能的提高[3]。
在方式2所代表的存储方式中,数据不经过内存,而是在采集和存储之间建立了直接数据传输通道,这也是本文所采用的数据传输方法。这种方法采用映射内存以及总线主控技术,SAS控制器为PCI总线的主设备,而数据采集FPGA为从设备,SAS控制器对FPGA直接进行访问,这样数据采集和数据存储避开了系统内存这一环节。这种工作方式有效地缩短了系统的数据传输路径,从而在提高系统数据传输速度的同时减小了系统延迟和响应时间,获得了优良的性能[4]。该系统实现方式的关键是如何协调FPGA和SAS控制器的工作,这需要软件对其进行准确的管理和控制[5]。
本文所介绍的系统采用方式2存储方式,在嵌入式Linux平台上通过Linux驱动模块来管理SAS控制器完成整个数据存储过程,存储过程中PowerPC
负责响应FPGA发出的中断进行中断处理,整个数据存储过程由SAS控制器通过DMA方式完成。
3 硬件系统介绍
硬件系统主要由PowerPC处理器、FPGA、SAS硬盘控制器和SSD硬盘阵列组成。PowerPC处理器主要负责整个系统的控制和管理,包括系统内存和PCI总线等硬件资源。FPGA主要负责对数据进行采集处理,按照一定格式将数据存储到缓存中。FPGA作为PCI总线上的从设备与系统进行交互。SAS硬盘控制器负责读取数据,并将数据存储到SSD硬盘阵列中。SSD硬盘阵列是数据的存储介质。硬件系统使用了SSD硬盘,与传统的机械硬盘相比它有许多突出的特点。SSD硬盘指使用NAND FLASH组成的固态硬盘,其特别之处在于没有机械结构,利用传统的NAND FLASH特性,以区块写入和擦除的方式作读写的功能,具有响应时间短、读写效率高、耗电低、耐震、稳定性高和耐低温等优点。采用SSD硬盘作为数据存储介质,使整个系统具有更好的稳定性和适用性。
4 软件系统设计及实现
4.1 U-Boot的移植
嵌入式Linux的运行需要一个Bootloader进行引导。本系统使用U-Boot作为Linux的Bootloader。U-Boot是在Linux内核运行之前运行的一段程序,这段程序完成硬件的初始化和建立内存空间的映射图等重要工作,为内核的启动创建正确的环境,并最终引导启动内核。U-Boot在很大程度上是依赖于具体硬件而实现的,特别是在嵌入式系统中。因此U-Boot除了依赖于CPU的体系结构外,还需要修改其中部分源码以适应具体的嵌入式板级设备。
4.2 嵌入式Linux的移植
嵌入式Linux是整个系统的基础,它为包含在硬件平台上的所有底层可编程部件提供服务,并且为运行在系统上的应用程序提供可执行环境。本系统针对嵌入式Linux所做的主要工作是针对具体板级设备的硬件驱动进行移植和开发,使内核能够进行编译、下载和运行。因为实际系统中硬件的配置和嵌入式Linux的默认硬件配置有所不同,所以需要修改部分硬件驱动来满足实际系统需要。
4.3 高速存储驱动模块原理及实现
4.3.1 块设备操作的分层结构分析
要实现高速存储Linux驱动模块,就必须对Lin-ux内核中SCSI设备的操作机制进行详细的分析。图2是Linux内核中SCSI设备操作的一个分层实现图,主要由虚拟文件系统、文件系统层、通用块层、I/O调度程序层、块设备驱动程序和SCSI子系统组成。虚拟文件系统层的作用是屏蔽下层具体文件系统操作的差异,为上层应用的操作提供统一的接口。文件系统层的主要作用是针对不同的文件系统提供不同的文件操作集合。通用块层作用是接收上层发出的硬盘请求,经过处理后发出I/O请求,它是块设备提供的通用抽象视图。I/O调度层的功能是接收通用块层发出的I/O请求,缓存请求并试图按照调度算法合并相邻请求。块设备驱动层负责从上层取出I/O请求,根据请求信息向具体块设备控制器发送命令[6]。
4.3.2 SCSI子系统分析
块设备包括SCSI硬盘、SATA硬盘和闪存等许多其它设备,块设备驱动层是这些块设备的统一抽象层。具体到不同的块设备,又要使用不同的子系统驱动程序。由于本文所介绍的系统使用的是基于SCSI的存储系统,所以本节将对Linux内核中SCSI子系统进行分析。
Linux内核中SCSI子系统是一种分层的架构,共分为3层。顶部的那层叫做SCSI上层,它代表的是内核(设备级)最高级别的接口。SCSI上层接收来自内核上层的请求并将其转换成SCSI命令,同时将状态信息通知内核上层。接下来的是SCSI中间层,也称为公共层或统一层。它是SCSI上层和底层的公共服务层,提供了很多可供SCSI上层和底层驱动器使用的函数,因而可以充当这两层间的连接层。中间层抽象化了底层驱动器的实现,这意味着可以以同样的方式使用带不同接口的控制器。SCSI中间层还提供了底层驱动器注册和错误处理以及SCSI上层和底层间的SCSI命令排队等功能。最后是SCSI底层,在SCSI底层的是一组驱动,称为SCSI底层驱动。它们是一些可与具体物理设备连接的特定驱动程序。底层提供了自中间层到特定硬件设备的一种抽象,每个SCSI底层驱动都提供了到特定硬件的不同接口,但所使用的到中间层的接口却是一组标准接口。SCSI底层包含大量处理各种不同类型SCSI控制器的驱动。SCSI具体结构如图3所示。
图4 给出了对SCSI设备进行写操作时Linux内核中的程序执行流程。
4.3.3 高速存储驱动模块的实现
高速存储驱动模块主要在两个层次上实现,整个数据存储程序流程如图5所示。首先是在通用块层完成初始化bio结构和通过submit-bio()函数提交操作请求。bio结构中包含了读写硬盘操作时需要的所有信息,所以可以根据需要初始化包括设置硬盘描述符、读写数据量大小和存储硬盘扇区位置等信息。但是在bio结构中数据存储位置只能设置为系统内存虚拟地址,无法直接将其指向FPGA虚拟地址。为了解决这个问题,在系统内存中分配一块内存,在这块内存中设置标志和参数,然后将这块内存虚拟地址赋值给bio结构。然后是在SCSI子系统中根据bio内存中设置的标志和参数,判断该请求是否是高速存储驱动模块请求。如果是,则根据FPGA缓存物理地址和读写数据量大小通过SCSI底层驱动设置控制器特定寄存器,完成数据传输[7]。主要流程如图6所示。
5 应用程序的设计和实现
5.1 存储数据管理
在数据存储过程中,为了提高存储速度,存储系统采用了对硬盘阵列顺序写入的方式,也就是按照硬盘的逻辑块地址将数据依次写入硬盘。这样虽然可以提高数据的存储速度,但是硬盘阵列中就没有文件系统,这对数据的管理提出了要求。存储系统在使用中需要记录多个任务,并且每个任务所记录的数据都有不同的参数和格式,所以必须设计出一种格式对任务信息和数据进行管理,这样才能事后方便地对所记录的数据进行下载、恢复和处理。在存储系统中根据具体需求用头表和任务信息表两个部分来管理硬盘所记录的数据。头表包含硬盘阵列的一些总的信息,包括硬盘个数、总容量、剩余容量等。每1个任务对应1个任务信息表,任务信息表占1个扇区共512 byte,包含有每个任务的具体信息,例如起始、结束逻辑块地址、数据参数等。在开始记录前和停止记录后将得到的参数信息更新到指定的硬盘逻辑块地址中进行保存。当需要下载数据时将数据和参数信息一起发送给主机,主机就可以根据这些参数信息将数据进行恢复和处理。
5.2 网络远程控制
在数据存储系统实际应用中,需要能够对其进行远程的管理和控制。整个系统结构如图7所示。
从图7中可以看出,系统主机需要通过网络来控制数据存储系统。为了实现该功能,必须定义出网络控制和管理命令协议。根据具体应用的需要定义了各种网络命令,目前实现了任务启动/停止、数据删除、信息查询、工作模式设置和数据下载等命令,如图8所示。为了确保存储系统收到命令,存储系统需要对系统主机发出的每个命令进行应答。
6 存储系统的性能测试和分析
为了测试存储系统的性能,测试中FPGA采集模块产生模拟数据,使用4块SSD硬盘组成RAID0阵列,系统持续记录20min。在测试过程中对数据存储信号和中断信号进行测试,如图9所示。其中上方1通道的信号为存储信号,有效时为高电平;下方2通道的信号为中断信号,周期264ms。每个中断周期存储的数据为64 Mbyte。
从图9可以看出,系统存储在264ms的周期中,存储64 Mbyte数据只用了150 ms左右,其余100 ms时间用来防止硬盘写入速度的波动,避免数据的丢失和对系统稳定性的影响。通过对存储数据的校验证明存储系统的正确性,可见整个系统可以满足200 Mbyte/s的持续存储速度。与其它使用FPGA实现高速数据存储的方案比较[8,9],本系统在速度上具有一定优势。
在整个存储系统中数据存储速度是最关键的性能指标。实际系统中当FPGA数据采集缓存存满数据时,以中断方式周期性的通知PowerPC,从而使PowerPC控制硬盘控制器来读取数据。由于FPGA采集缓存容量的限制,中断周期时间相对较短。可见记录任务具有一定的实时性,即在中断周期内必须将FPGA缓存中的数据全部存储到硬盘阵列中。而由于硬盘本身的原理和结构决定了硬盘在写入数据时速度会有一定波动,通常所说的硬盘速度是指硬盘的平均速度。显然,由于记录任务的实时性要求,硬盘阵列平均写入速度肯定无法应用到实际系统中,为了保证实时性只能将硬盘阵列的最低写入速度应用到实际存储系统中,通常为了保证系统的可靠性,会在硬盘阵列最低速度基础上再留出一定冗余时间。为了解决硬盘阵列写入速度不稳定从而影响存储速度的问题,可以使用扩大FPGA采集缓存方法,使存储速度接近于硬盘阵列平均速度,能够进一步有效地提高存储速度。
SAS即串行SCSI技术的出现,摆脱传统并行SCSI技术在连接设备个数和总线带宽上的限制。传统并行SCSI采用并行总线结构,总线总的带宽为320 Mbyte/s,而SAS采用串行总线结构,每个通道传输的速率高达3 Gbit/s,使用多个通道时带宽可以成倍增加[10]。随着SSD固态硬盘技术的发展,SSD固态硬盘可以代替传统机械硬盘应用到实际系统中。目前,Intel SSD硬盘可以达到250 Mbyte/s的持续读取速度和170 Mbyte/s的持续写入速度,再结合RAID技术可大大提高硬盘阵列的读写性能。将SAS和SSD技术应用到存储系统中为存储速度的进一步提高奠定了基础。同时,在嵌入式Linux软件平台上能够很好地支持SAS和SSD技术。试验证明,在使用SAS和SSD的存储系统上,基于嵌入式Linux的数据存储系统的存储速度还有很大的提升空间。
PCIExpress总线克服了PCI总线在总线带宽和数据传输速率上的限制,由于在Linux内核中PCI Express的驱动软件与PCI总线完全兼容,所以高速存储软件系统也可以应用于基于PCIExpress总线的存储系统中。
7 结论
本文提出了一种基于Linux的嵌入式高速数据存储方案,通过使用Linux驱动等软件模块控制和管理存储系统,实现了高速数据的记录。该系统既可以满足高速数据存储速度的要求,又具有容量大、
稳定性高、耐震、耐低温等优点。测试表明系统可以达到200 Mbyte/s的持续存储速度。由于该方案可以扩展到PCI-E架构上,再结合SSD硬盘的使用,系统的数据存储速度还有很大的提升空间。
[1]洪瀑,王岩飞.基于磁盘阵列的超高速SAR原始回波数据记录技术研究[J].电子与信息学报,2009,31(3):749-751.
HONG Pu,WANG Yan-fei.Study on ultra-high speed SAR raw data recorder based on disk array[J].Journal of Electronics&Information Technology,2009,31(3):749-751.(in Chinese)
[2]黄立胜,刘月花.遥感数据的高速实时记录器[J].遥感学报,2003,7(1):19-25.
HUANG Li-sheng,LIU Yue-hua.High speed and real-time recorder of remote sensing data[J].Journal of Remote Sensing,2003,7(1):19-25.(in Chinese)
[3]黄进,郭立红,李岩,等.一种高速CCD视频实时存储方案的速度分析[J].光学技术,2005,31(1):149-150.
HUANG Jin,GUO Li-hong,LIYan,etal.Speed analysis of areal-time storage schema of high speed CCD video[J].Optical Technique,2005,31(1):149-150.(in Chinese)
[4]张昆帆,王展,皇甫堪.高速数据采集和存储[J].现代雷达,2004,26(4):14-16.
ZHANG Kun-fan,WANG Zhan,HUANGFU Kan.High Speed Data Acquisition and Storing[J].Modem Radar,2004,26(4):14-16.(in Chinese)
[5]熊伟,曾峦,赵忠文.用于光电经纬仪的高速图像数据记录技术[J].红外与激光工程,2004,33(5):538-541.
XIONGWei,ZENG Luan,ZHAO Zhong-wen.Technology of high speed image data record applied in photoelectric theodolite[J].Infrared and Laser Engineering,2004,33(5):538-541.(in Chinese)
[6]Bovet Daniel P,Cesati Marco.深入理解Linux内核[M].陈莉君,张琼声,张宏伟,译.北京:中国电力出版社,2007:557-594.
Bovet Daniel P,CesatiMarco.Understanding the Linux Kernel[M].Translated by CHEN Li-jun,ZHANG Qiong-sheng,ZHANGHong-wei.Beijing:China Electric Power Press,2007:557-594.(in Chinese)
[7]Corbet,Rubini,Kroah-hartman.Linux设备驱动程序[M].魏永明,耿岳,钟书毅,译.北京:中国电力出版社,2007:458-490.
Corbet,Rubini,Kroah-hartman.Linux Device Driver[M]. Translated by WEIYong-ming,GENG Yue,ZHONG Shu-yi. Beijing:China Electric Power Press,2007:458-490.(in Chinese)
[8]周国辉.CCD摄影测量相机图像数据高速实时存储的研究[D].北京:中国科学院研究生院,2005.
ZHOU Guo-hui.Study on high-speed and real-time storage system for CCD photogrammetric image data[D].Beijing:Chinese Academy of Sciences,2005.(in Chinese)
[9]余辉龙,何昕,魏仲慧,等.应用NAND型闪存的高速大容量图像存储器[J].光学精密工程,2009,17(10):2549-2553.
YU Hui-long,HE Xin,WEI Zhong-hui,et al.High speed and high capacity image recorder based on NAND flash[J]. Optics and Precision Engineering,2009,17(10):2549-2553.(in Chinese)
[10]卢光军.一种高速采集记录设备的实现[J].计算机应用与软件,2009,26(9):175-176.
LU Guang-jun.Implementation of a high-speed sample-andrecord devcice[J].Computer Application and Software,2009,26(9):175-176.(in Chinese)
Embedded High-speed SAR Data Storage Technology Based on Linux
HUANGBin
(Chongqing Bureau of Naval Armament Department,Chongqing 400043,China)
In order to record SAR(Synthetic Aperture Radar)raw echo data,a method with SSD(Solid State Disk)on embedded Linux is provided in this paper.Linux drivers are used tomanage the SAS(Serial Attached SCSI)controller and the data is stored in SSD with high-speed.The speed of data storage can achieve 200 Mbyte/s in experiment.The factors influencing storage speed are analysed.The test result shows that the design can satisfy the requirements of high-speed data storage.
synthetic aperture radar(SAR);raw echo data;high-speed data storage;embedded Linux;solid state disk(SSD);serial attached SCSI(SAS)controller
TN95
A
10.3969/j.issn.1001-893x.2011.11.015
黄斌(1979—),男,四川资中人,硕士研究生,主要研究方向为通信技术。
1001-893X(2011)11-0073-06
2011-06-16;
2011-10-26
HUANG Bin was born in Zizhong,Sichuang Province,in 1979. He is now a graduate student.His research direction is communication technology.
Email:huangbin09.com@163.com