基于PVFS(并行虚拟文件系统)的并行网络存储系统 _浪潮

 并行网络存储系统是浪潮存储开发的新一代网络存储系统。浪潮并行文件系统以PVFS作为开发原型,并在此基础上进行改进,使其与并行网络存储系统紧密结合。在这里,将对基于PVFS的浪潮并行文件系统作一个简单的介绍。

  PVFS的优点和缺憾

  在网络后台,以集群的形式来扩大数据存放空间已经成为一个不可避免的趋势,而在应用端,多机多个进程访问的需求也在日益增长。在这种应用的迫切需求下,并行文件系统便油然而生。

  所谓并行文件系统,是指应用于多机环境的网络文件系统,单个文件的数据采用分条等形式存放于不同的I/O节点之上,支持多机多个进程的并发存取,同时支持元数据和数据的分布存放,并提供单一的目录空间。而要实现一个完整的并行文件系统,需要实现如下两个方面:第一,实现单一的文件映像,并行文件存放在盘阵上的具体分布情况对于用户来说是透明的,并行文件系统在用户看来是一完整的树型结构,在调用时只要给出文件名即可;第二,采用条(Stripe)和分区(Partition)技术,支持一个文件数据在多个磁盘之上和多个进程之间的分布,即多个进程并发读写多个磁盘上的数据。

  在经过比较和甄选,我们选择了PVFS(并行虚拟文件系统)作为开发原型。PVFS采用客户-服务器架构,利用一组协作的用户空间进程(Daemon),提供一个群集范围内的一致的命名空间,并将数据条块化,分配到集群节点中。PVFS提供可靠的通讯环境,客户和服务器之间的信息传递通过TCP/IP完成。

  如图1所示,PVFS使用了三种类型的节点:管理节点、I/O节点和计算节点。管理节点运行元数据服务器(Mgr daemon),处理所有的文件元数据(元数据是描述文件信息的文件);I/O节点运行I/O服务器,存储文件系统的文件数据,负责数据的存储和检索;计算节点则处理应用访问,利用libpvfs这一客户端的I/O库,从底层访问PVFS服务器。一个集群的节点可以提供其中的一种功能,也可以同时提供其中的两种或者全部三种功能。

  PVFS的运行机理如下:当打开、关闭、创建或删除一个文件时,计算节点上的一个应用通过libpvfs直接与元数据服务器通信。在管理节点定位到一个文件之后,它向这个应用返回文件的位置,然后使用libpvfs直接联系相应的I/O节点进行读写操作,不必与元数据服务器通信(见图2 ),从而大大提高了访问效率。

  在对PVFS的分析和测试中,发现要成为一个真正的商用系统,PVFS还存在缺陷,比如:PVFS中应用系统socket相互通信,应用TCP/IP通信协议,每次通信需要内核嵌入,进行内存拷贝,CPU的负载比较大,影响系统的运行效率;PVFS本身具备良好的可扩展性,但是其动态配置的能力不强,如果要扩展一个I/O节点,就需要停止服务,并且不能做到空间的合理利用等。

  浪潮并行文件系统的特征

  针对以上缺陷,浪潮存储集中研发力量,在PVFS的基础上进行了大量改进工作,使得改进后的并行文件系统在性能、可用性、可扩展性、数据安全性方面有了大幅提高。

  在该并行文件系统中,元数据信息采用分布存储和管理的方式,消除了PVFS中元数据集中存储和管理而导致的访问瓶颈,提高了元数据信息的可用性,同时保证文件系统向用户提供统一的命名空间和目录体系。在改进后的并行文件系统中,采用客户端缓存技术,大大提高系统的文件访问效率,降低网络流量,减少由于磁盘访问和网络传输带来的时延。此外,还提供可订制的高可用机制,用户可以根据其可用性需求和读写模式选择相应的可用性级别和可用性策略。在改进后的并行文件系统中,加入了访问控制机制,可以避免一些非授权用户对特定数据进行非法访问,以确保数据的安全性。在并行文件系统的设计方面,提供友好的系统管理界面;考虑到Unix在高端的广泛应用,并行文件系统的接口设计和语义设计完全符合POSIX标准,同时与现在被广泛使用的软硬件标准相兼容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移植SQLite数据库代码需要以下几个步骤: 1. 下载SQLite源代码。 2. 将SQLite源代码中的sqlite3.c和sqlite3.h文件添加到你的工程中。 3. 根据你的实际情况修改sqlite3.h文件中的宏定义,比如修改sqlite3_malloc和sqlite3_free函数为你的系统内存分配和释放函数。 4. 实现sqlite3.h文件中定义的回调函数,比如sqlite3_vfs结构体中定义的xOpen、xRead、xWrite、xClose等函数。 5. 在你的应用程序中调用sqlite3_open函数打开数据库,调用sqlite3_exec函数执行SQL语句。 6. 最后,在你的工程中添加必要的头文件和库文件即可。 下面是一个基于STM32F4和HAL库的SQLite数据库移植示例代码,仅供参考: ```c #include "sqlite3.h" #include "stdlib.h" #include "string.h" #include "stm32f4xx_hal.h" /* 自定义内存分配函数 */ static void *MyMalloc(int nBytes) { return malloc(nBytes); } /* 自定义内存释放函数 */ static void MyFree(void *p) { free(p); } /* 自定义文件操作结构体 */ static const sqlite3_io_methods MyIoMethods = { 1, /* iVersion */ NULL, /* xClose */ NULL, /* xRead */ NULL, /* xWrite */ NULL, /* xTruncate */ NULL, /* xSync */ NULL, /* xFileSize */ NULL, /* xLock */ NULL, /* xUnlock */ NULL, /* xCheckReservedLock */ NULL, /* xFileControl */ NULL, /* xSectorSize */ NULL, /* xDeviceCharacteristics */ NULL, /* xShmMap */ NULL, /* xShmLock */ NULL, /* xShmBarrier */ NULL /* xShmUnmap */ }; /* 自定义文件操作函数 */ static int MyOpen(sqlite3_vfs *pVfs, const char *zName, sqlite3_file *pFile, int flags, int *pOutFlags) { HAL_SD_CardInfoTypeDef SDCardInfo; /* 打开SD卡 */ if (HAL_SD_InitCard(&hsd) == HAL_OK) { /* 获取SD卡信息 */ if (HAL_SD_GetCardInfo(&hsd, &SDCardInfo) == HAL_OK) { /* 以读写方式打开文件 */ if (HAL_SD_ReadBlocks(&hsd, pFile->pMethods, 0, 1, 1000) == HAL_OK) { pFile->pMethods = &MyIoMethods; return SQLITE_OK; } } } return SQLITE_ERROR; } /* SQLite数据库初始化函数 */ void SQLiteInit(void) { sqlite3_vfs *pVfs; /* 获取默认的VFS */ pVfs = sqlite3_vfs_find(NULL); /* 修改默认的VFS */ pVfs->szOsFile = sizeof(sqlite3_file); pVfs->mxPathname = 512; pVfs->zName = "MySDCardVFS"; pVfs->pAppData = NULL; pVfs->xOpen = MyOpen; pVfs->xDelete = NULL; pVfs->xAccess = NULL; pVfs->xFullPathname = NULL; pVfs->xDlOpen = NULL; pVfs->xDlError = NULL; pVfs->xDlSym = NULL; pVfs->xDlClose = NULL; pVfs->xRandomness = NULL; pVfs->xSleep = NULL; pVfs->xCurrentTime = NULL; /* 设置自定义的内存分配和释放函数 */ sqlite3_config(SQLITE_CONFIG_MALLOC, MyMalloc, MyFree); } ``` 在使用SQLite数据库时,只需要在程序启动时调用SQLiteInit函数进行初始化,然后就可以使用SQLite提供的API进行数据库操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值