lustre学习
1. 特点
- lustre分布式文件系统支持ldiskfs和zfs两种文件系统,ldiskfs是基于ext4文件系统定制优化而来(需要修改内核);zfs则是采用openzfs的项目。
2. lustre核心组件
MGS(Management Server) :提供整个文件系统的配置信息与崩溃恢复
MGT(Management Target):MGT是MGS用于存储lustre文件系统配置信息的块设备,MGT的容量最大需要100MB。
MDS(Meta Server):MDS负责管理文件系统统一的命名空间,同时提供文件系统的元数据访问服务
MDT(Metadata Target):MDS存储元数据信息的后端块设备。
OSS(Object Storage Server):OSS负责管理文件对象数据,对lustre客户端提供完整文件数据的访问。
OST(Object Storage Target):OSS使用的存储文件对象数据的块设备。
LMV(Logical Metadata Voliume):访问
MDC(Metadata client)
的抽象层LOV(Logical Object Volume)
:针对OSC(Object Storage Client)
的抽象层Lustre Client:负责挂载lustre文件系统
Lustre Network:lustre的网络协议,支持RDMA
LIBCFS:提供基础的进程管理和调试 API。libcfs 被大量使用在 LNet、Lustre 的相关工具上。
3. 布局
- 正常(normal)文件布局
文件的每个stripe按照round-robin方式轮询当前集群中每个ost来放置数据分片对象。
- 复合布局
- 需要注意后面的部分会空出前面配置的空间大小
4. 访问流程
4. 代码分析
4.1 执行流
- lustre客户端stack中,一个文件处理需要
vvp_object
、lov_object
、lovsub_object
、osc_object
。每一层的对象都会包含通用的对象层cl_object
.vvp_object
是vfs-vm-posix层的对象,这个包含了操作文件的inode和cl_object
的客户端通用对象;lov_object
是为了处理来自vvp_object
的封装的数据,其中也包含了cl_object
,这一层是逻辑对象层,比如文件被stripe后,在lov_object
会包含多个sripe的对象,这些对象封装成对象lovsub_object
,每一个lovsub_object
对应一个osc_object
对象。最后osc_object
通过自己这一层的device的接口层,数据到mds或者oss. - cio_submit和cio_commit的区别在于cio_submit用于紧急请求。
- wakeup all cache waiters->spin_unlock(&cli->cl_loi_list_lock);
(flock是文件锁)Mounting a Lustre File System on Client Nodes - Lustre Wiki
- read: ll_file_operations_flock->ll_file_read->(init_sync_kiocb)ll_file_aio_read->ll_file_read_iter->(do_loop_readv_writev)do_file_read_iter->pcc_file_read_iter/ll_do_fast_read/ll_file_io_generic->(vvp_env_new_io/cl_io_rw_init/range_lock_init)cl_io_loop->(cl_io_lock)cl_io_start->vvp_io_ops/lov_io_ops/mdc_io_ops/osc_io_ops(类型在do_file_read_iter赋值为CIT_READ=1,全局由cl_io_slice_add与lov_io_init_composite赋值为lov_io_ops)->lov_io_start->lov_io_call->cl_io_start(调用子请求)—–>osc_io_read_start
- submit:lov_io_submit->cl_io_submit_rw->cio_submit->osc_io_submit->osc_page_submit/osc_queue_sync_pages->(osc_extent_lookup/osc_extent_alloc)list_add_tail/osc_update_pending
- commit: lov_io_commit_async->cl_io_commit_async->cio_commit_async->osc_io_commit_async->osc_page_cache_add->osc_queue_async_io->osc_enter_cache->cli_unlock_and_unplug->osc_io_unplug_async->osc_io_unplug0->osc_check_rpcs/ptlrpcd_queue_work(异步)->(osc_send_write_rpc->osc_build_rpc->)ptlrpcd_add_req
- seek: ll_file_seek->cl_sync_file_range->cl_io_loop
参考
深入理解Lustre分布式文件系统之Lustre架构 - 墨天轮
HPC高性能计算知识:深度解析Lustre体系结构 - 腾讯云开发者社区-腾讯云
Mounting a Lustre File System on Client Nodes - Lustre Wiki
深入理解Lustre文件系统-第3篇 lustre lite - myjava2 - 博客园
深入理解 Lustre 系列一:Lustre 架构 - 知乎
深入理解Lustre文件系统-第4篇 LOV和OSC_深入理解 lustre-CSDN博客
- Title: lustre学习
- Author: Ethereal
- Created at: 2024-12-02 00:12:48
- Updated at: 2025-03-10 23:50:24
- Link: https://ethereal-o.github.io/2024/12/02/lustre学习/
- License: This work is licensed under CC BY-NC-SA 4.0.