引 言
在过去的20年里,存储系统的发展速度一直较慢。尽管IDE技术、SCSI技术的发展提供了更有效的数据传输、更快的磁盘驱动和更大的磁盘容量,但是存储系统仍然是作为服务器的附属设备,没有摆脱服务器/存储系统的模式,服务器单点失效及瓶颈问题依然存在。吉比特以太网和Fibre Channel技术的出现,使服务器和存储系统作为对等的实体存在于网络上成为可能,存储系统不再依附于服务器,服务器的失效不会导致对存储系统上数据访问的失效。
所谓的智能网络磁盘1ND(Intelligent NetworkDisk),不是直接连在个人计算机上,而是通过网络接口连接在网络上,用户可通过文件属性来访问文件数据。智能网络磁盘向用户提供统一的接口,利用元数据为用户提供面向集合的数据视图。在物理上,同一集合的数据可能分布在不同的智能网络磁盘上。存储时根据元数据决定数据的存储位置;响应数据访问请求根据所存储的元数据定位数据的具体存储位置,然后向用户发送数据。智能网络磁盘可以分为系统软件和应用软件两大部分;系统软件包括TCP/IP协议栈、文件系统、驱动程序等几个部分。应用软件包括数据访问模块、数据定位模块、元数据管理模块及数据缓存模块等。数据访问模块经过虚拟文件系统访问存储在存储介质上的数据;数据定位模块根据元数据定位数据具体的存放位置;元数据管理模块负责元数据的有效性;数据缓存模块提供访问数据的缓存机制。企业通过使用智能网络磁盘,既可以提高企业内部公共数据存储空间,方便数据共享和管理,又可以减少为了增加存储空间而增加服务器所花费的代价;另一方面,企业可以减少每台个人计算机的存储空间,加大智能网络磁盘的空间或数量,从整体上降低企业为存储所花费的代价。
下面详细介绍智能网络磁盘的数据访问模块及系统软件部分。
1 硬件设计
智能网络磁盘硬件设计的核心是Samsung公司的S3C44BOX微处理器。S3C44BOX微处理器主频为66 MHz,采用ARM7TDMI内核,支持16位的Thumb指令集和32位的ARM指令集;支持8个32 MB的存储体地址空间。为了降低成本,SaC44BOX提供了丰富的片上设备,包括8 KB Cache、SRAM、LCD控制器、2通道UART、4通道DMA、系统管理器(片选逻辑、FP/EDO/SDRAM控制器)、带PWM功能的5通道定时器、1个内部定时器、I/O端口、RTC、8通道10位ADC、12C总线接口、12S总线接口、同步SIO接口和PLL倍频器。在片外为S3C44BOX微处理器增加了2 MB F1ash、8 MB SDRAM、1个IDE接口和1个RTL8019AS以太网通信芯片。Flash主要用于存放BootLoader程序、uClinux内核映像、ROMFS文件系统和应用程序。智能网络磁盘采用IDE接口硬盘作为存储介质。普通IDE接口硬盘数据传输速率为133 Mbps,远远比磁带机快,有利于数据传输;固态存储器尽管存储速度快,但其昂贵的价格使其在目前仍不适于海量数据存储。S3C44BOX开发板的原理框图如图1所示。
S3C44BOX微处理器提供25位的地址总线Addr0~Addr24,提供16位的数据总线data0~datal5,因此SaC44BOX支持的最大存储体空间为32 MB。IDE硬盘与内存之间按照DMA方式进行数据传送,而以太网卡与内存之间采用中断方式进行数据传送。对于S3C44BOX微处理器,SDRAM安排于第6个或第7个bank,地址分别OxOc000000或OxOc800000开始。ATA接口位于第2个bank内,而以太网接口位于第1个bank内。
2 软件设计
智能网络磁盘系统软件功能模块如图2所示。IND软件负责接受请求、请求调度、数据分布管理及数据定位等功能;VFS为虚拟文件系统,为不同的逻辑文件系统提供统一的接口;ROMFS和Ext2为逻辑文件系统。块设备驱动程序为不同的块设备提供一个统一的接口,并负责块设备数据缓存功能;ATA接口驱动程序提供标准的AT总线接口驱动程序;TCP/IP协议和802.3协议组成一个协议栈,使设备可用于以太网,数据可经过Internet传送;网络设备经过8019AS芯片连接,为此提供了RTL8019AS芯片驱动程序。
IND软件模块响应用户的读请求和写请求,按照先来先服务策略调度请求,统一管理数据在磁盘上的分布视图。每当有连接请求时,IND软件模块就要生成一个轻量级进程,响应连接请求,并根据请求的元数据,决定文件的存储和读取集合。客户与IND智能网络磁盘之间采用无状态连接,以减小客户与网络磁盘之间连接的复杂性。当打开一个网络磁盘文件时,数据以一个临时文件的形式存放在本地系统上,以后的操作都是对本地的临时文件进行操作,打开完毕后,网络磁盘上相应的文件对象自动关闭,响应进程死亡。在关闭文件的时候,如果文件被修改过,则写回网络磁盘,并且删除掉本地的临时文件;如果文件没有经过修改'则不用进行回写操作,只在本地删除掉临时文件即可。一般情况下,打开文件时要建立一次连接,而关闭文件时可能要建立一次连接,也可能不要。目录是一种特殊的文件,按照普通文件进行处理。
目前,系统只支持两种文件系统ROMFS和Ext2。ROMFS是一个小型的ROM文件系统,只能读不能写。它包含了需要在uClinux上运行的应用程序,在uClinux操作系统编译期间被包含进uClinux二进制代码中。Ext2文件系统安装于ROMFS文件系统的/var目录上。系统运行以后,ROMFS文件系统和ext2文件系统在内存中的逻辑关系如图3所示。带“*”号的为Ext2文件系统对象,不带“*”的为ROMFS文件系统对象。
网络通信采用TCP/IP协议和802.3协议实现。以太网已从一个共享的、低速的拓扑结构发展成为一种高性能的吉比特交换传输技术,采用以太网技术有利于网络磁盘向吉比特以太网上移植。TCP/IP协议是一种开放式的网络互联协议,兼容性强,普及程度高,数据可以通过Intemet传输。
3 智能网络磁盘系统软件的实现
智能网络磁盘采用uClinux作为操作系统。uClinux是专为不带MMU的CPU而设计的嵌人式Linux操作系统,具有以下优点:第一,其源码在GNU公共许可证下是开放的,任何人都可以自由使用和研究;第二,uClinux采用模块化设计,具有很强的可裁减性,用户可以根据自己的需要增加或裁减功能模块;第三,uClinux功能强大,支持多任务操作、TCP/IP协议栈、多种文件系统等功能;第四,uClinux可移植性强,已经成功地移植到各种CPU平台上.像S3C44BOX、Motorola MC68000、MCF5206和MCF5207ColdFire等;第五,uClintlx还有1个与之相兼容的小型C语言库uClihc,它与GNUC语言库glibc兼容,方便用户开发应用程序。目前,uClinux支持3个Linux内核版本,分别为2.O.x、2.4.x和2.6.x,本设计采用的是2.4.xLinux内核。该内核与IEEE POSIX标准兼容,使得大部分开源代码不经过修改,只需要简单编译一下就可以移植到目标平台上。
在实现智能网络磁盘时,先开发了基于S3C44BOX微处理器的系统电路板,然后将uClinux操作系统移植到本电路板上,最后编写IND软件。下面主要介绍uClinux操作系统的移植过程和uClinux操作系统的引导过程。
在移植uClinux操作系统时,先要得到一个完整的uClinux操作系统源码,既可以从网站上下载一个完整的uClinux光盘,也可以从网站上下载必要的源码,如Linux内核、uClinux补丁程序、uClibc和所需的应用程序源码。我们下载的是uClinuX_dist一20041215.tar光盘,其中包含对s3C44BOX的支持。其次是要建立交叉编译开发环境。针对电路板所产生的部分配置内容如下:
#define CONFIG_ARCH_SAMSUNG 1
#deflne DRAM_BASE OxOc000000
#define DRAM_SIZE 0x00800000
#cleftne Flash_MEM_BASE Ox0000000
#define FIash_SIZE0x00200000
#deflne CONFIG_RAMKERNEL 1
#deflne C()NFIG_SPU_NAME″S3C4480X″
#define CONFIG_CPU_S3C44BOX 1
#define CONFIG_CPU_ARM710 1
#define CONFIG_CPU_32v4 1
#defIne CONFIG_CPU_32 1
#defIne CONFIG_No_PGT_CACHE l
#define CoNFIG_CPU_WITH_CACHE 1
#define CONFIG_ARM_CLK(6000000)
#define CoNFIG_SERIAL_S3C4480X 1
从以上内容可以看出,Flash位于S3C44BOX的第0个Bank,地址从Ox00000000到0x00200000,容量为2MB。SDRAM位于第6个Bank,地址从Oxoc000000到0xOc800000,容量为8 MB。S3C44BOX工作频率为60 MHz,串口采用S3C44BOx片上的一个UART,并在该串口上支持控制台功能,使得uClinux的启动输出信息可以在超级终端上显示出来。其他的配置包括TCP/IP网络,10/100 Mbps以太网络、IDE和ext2文件系统等内容。配置完的uClinux操作系统带有进程调度模块、内存管理模块、ATA接口驱动程序、文件系统、TCP/1P协议栈、网卡驱动等功能。
uClinux配置完成以后即可对uClinux编译,产生两个文件:一个是非压缩的uClinux操作系统二进制代码uCllnux_bootram.bin,其在SDRAM中工作的起始地址为0xoc008000;另一个是压缩的uclinux操作系统二进制代码uClinux_bootrom.bin,通过JTAG线缆烧写到Flash中,由bootloader程序将其加载到SDRAM中执行。在系统启动的时候uCIinux_bootrom.bin要先进行解压缩,存放到SDRAM中,然后跳转到uClinux操作系统的入口处执行。内核在启动时要检查机器的CPU类型和体系结构、初始化CPU、建立RAM页表和中断矢量表、加载设备驱动程序。这一切完成之后,uClinux创建最初的init进程,安装根文件系统ROMFS和ext2磁盘文件系统。最后,操作系统将自动执行IND软件,等待接收客户端请求。
uClinux操作系统的引导通过B00tlDader程序完成。从本质上讲,它不属于操作系统内核,针对不同的CPU体系结构,不具有可移植性。本设计所编写的Bootloader程序在系统启动时完成以下几项工作:
①将存放在Flash中压缩的操作系统内核进行解压缩,然后复制到从0xoc008000处开始的SDRAM中;
②改写系统的内存地址镜像,将RAM的起始地址映射为O;
③设置CPU的sp寄存器,并将内核的BSS段清零;
④设置CPU的pc寄存器,使其值指向内核的起始地址。
4 性能分析
智能网络磁盘的性能受到系统各个方面的制约,像IND软件的进程调度策略、局域网的带宽、ATA总线的带宽、文件系统的缓存机制和客户端的缓存机制。这里分析文件系统的缓存机制及系统数据吞吐率,以此对智能网络磁盘的性能作个初步的衡量。
虚拟文件系统和块设备驱动程序普遍采用高速缓存技术,将最近最常使用的数据保存在内存中,提高数据在内存中的命中率。文件系统的目录项对象、索引节点对象、文件对象及vfsmount对象都存在独立的高速缓存区中,当请求的对象在高速缓存区中,且有效时,就直接从高速缓存区中取出数据发送给客户;如果所请求的数据不存在,则在高速缓存区中取出一个空闲的对象作为新对象的描述符,这样可以减少为创建新对象而分配内存所花费的时间,提高系统的效率。对于索引节点对象、目录项对象及vfsmount对象,为了提高它们的查找效率,这些对象都存在于它们各自的Hash表中。对于块设备驱动程序使用高速缓存区,可以降低频繁地读取存储设备的次数。对客户端目录文件的读取要采用一定的预取机制,因为对目录文件的打开比较频繁,每打开一个目录,都要建立一次连接,因此,采可行的预取机制可以有效地减少建立连接的次数。
系统性能测试采用BenchMark软件。硬件测试平台由智能网络磁盘、l00MB交换机和24台客户机组成。测试文件大小为1 MB,客户机随机地向智能网络磁盘发送读请求,测试结果如图4所示。吞吐率表示多用户请求时单位时间内通过网络传输的数据总量。
从测试结果可以得出,当客户数逐渐增多时,每个客户所得到的平均带宽逐渐渐少。当客户增加到24个时,每个客户可得到大约O.3 Mbps的带宽,可以满足文件远程访问请求。
结 语
本文首先介绍了智能网络磁盘的硬件开发环境,然后详细介绍了智能网络磁盘的软件模块及关键技术,最后在S3C4480X嵌入式开发板上实现了智能网络磁盘。客户端在访问智能网络磁盘时,速度还有待进一步提高。这可以从改善网络环境,提高网卡的速度着手,对客户端请求的调度策略也可以作为一个方面的研究,其他的功能模块还需要继续添加。相信智能网络磁盘对企业来说是一个好的解决存储设备问题的方案。