NFS-Ganesha框架学习

NFS Ganesha是一个基于模块的NFS服务器,采用内存管理器、RPCSEC_GSS、NFS协议模块等核心模块。其通过FSAL对接不同后端存储,如Ceph RGW。内存管理使用Buddy Malloc算法,线程管理和缓存机制确保高效运行。Ganesha具备灵活的内存分配、可移植性和便捷的访问机制。
摘要由CSDN通过智能技术生成

一、整体框架

                                          NFS Ganesha 分层架构图

 

Ganesha 是一个基于模块的程序,每个模块都负责各自的任务和目标。开发团队在写代码之前就对每个模块进行了精心的设计,保证了后期扩展的便捷性。比如缓存管理模块只负责管理缓存,任何在缓存管理模块上做出的更改不能影响其他模块。这么做大大减少了每个模块间的耦合。每个模块可以独立交给不同开发人员来进行开发、验证和测试。

NFSs-Ganesha 通过FSAL(文件系统抽象层)将一个后端存储抽象成一个统一的API,提供给Ganesha服务端,然后通过NFS协议将其挂载到客户端。在客户端上对挂出来的空间进行操作。

1、Ganesha的核心模块

1)Memory Manager(内存管理): 负责Ganesha的内存管理。

  • 内存管理

内存管理是开发Ganesha时比较大的问题,因为大多数Ganesha架构中的所有模块都必须执行动态内存分配。 例如,管理NFS请求的线程可能需要分配用于存储所请求结果的缓冲器。 如果使用常规的LibC malloc / free调用,则存在内存碎片的风险,因为某些模块将分配大的缓冲区,而其他模块将使用较小的缓冲区。 这可能导致程序使用的部分内存被交换到磁盘,性能会迅速下降的情况。

因此Ganesha有一个自己的内存管理器,来给各个线程分配需要的内存。内存管理器使用了Buddy Malloc algorithm,和内核使用的内存分配是一样的。内存分配器中调用了madvise来管束Linux内存管理器不要移动相关页。其会向Linux申请一大块内存来保持高性能表现。

  • 线程管理

Ganesha给每一个线程分配了单独的资源,这样也要求每个线程自己处理垃圾回收,并且定期重新组合它的资源。同时”dispatcher thread”提供了一些机制来防止太多线程在同一时间执行垃圾回收;在缓存层中垃圾回收被分成好几个步骤,每个步骤由单独代理处理。

(2)RPCSEC_GSS&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值