lustre学习

Ethereal Lv4

1. 特点

  1. lustre分布式文件系统支持ldiskfs和zfs两种文件系统,ldiskfs是基于ext4文件系统定制优化而来(需要修改内核);zfs则是采用openzfs的项目。
    modb_20220725_a84a3924-0bf6-11ed-8f79-fa163eb4f6be

2. lustre核心组件

modb_20220725_a876799e-0bf6-11ed-8f79-fa163eb4f6be

  1. MGS(Management Server) :提供整个文件系统的配置信息与崩溃恢复

  2. MGT(Management Target):MGT是MGS用于存储lustre文件系统配置信息的块设备,MGT的容量最大需要100MB。

  3. MDS(Meta Server):MDS负责管理文件系统统一的命名空间,同时提供文件系统的元数据访问服务

  4. MDT(Metadata Target):MDS存储元数据信息的后端块设备。

  5. OSS(Object Storage Server):OSS负责管理文件对象数据,对lustre客户端提供完整文件数据的访问。

  6. OST(Object Storage Target):OSS使用的存储文件对象数据的块设备。

  7. LMV(Logical Metadata Voliume):访问MDC(Metadata client)的抽象层

  8. LOV(Logical Object Volume):针对OSC(Object Storage Client)的抽象层

  9. Lustre Client:负责挂载lustre文件系统

  10. Lustre Network:lustre的网络协议,支持RDMA

  11. LIBCFS:提供基础的进程管理和调试 API。libcfs 被大量使用在 LNet、Lustre 的相关工具上。

3. 布局

  1. 正常(normal)文件布局

文件的每个stripe按照round-robin方式轮询当前集群中每个ost来放置数据分片对象。

modb_20220725_aa646f72-0bf6-11ed-8f79-fa163eb4f6be

  1. 复合布局

modb_20220725_ad890140-0bf6-11ed-8f79-fa163eb4f6be

  1. 需要注意后面的部分会空出前面配置的空间大小

4. 访问流程

modb_20220725_b1b190a2-0bf6-11ed-8f79-fa163eb4f6be

4. 代码分析

modb_20211222_05f4333e-6334-11ec-8889-fa163eb4f6be

4.1 执行流

  • lustre客户端stack中,一个文件处理需要vvp_objectlov_objectlovsub_objectosc_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

  1. 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
  2. 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
  3. 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
  4. seek: ll_file_seek->cl_sync_file_range->cl_io_loop

参考

深入理解Lustre分布式文件系统之Lustre架构 - 墨天轮

深入理解 Lustre 系列六:LIBCFS - 知乎

HPC高性能计算知识:深度解析Lustre体系结构 - 腾讯云开发者社区-腾讯云

Mounting a Lustre File System on Client Nodes - Lustre Wiki

深入理解Lustre文件系统-第3篇 lustre lite - myjava2 - 博客园

初探lustre文件创建的过程-腾讯云开发者社区-腾讯云

深入浅出Lustre扩展属性-腾讯云开发者社区-腾讯云

深入理解 Lustre 系列一:Lustre 架构 - 知乎

Lustre PCC 初探 - 墨天轮

深入理解Lustre文件系统-第4篇 LOV和OSC_深入理解 lustre-CSDN博客

linux内核读写IO过程中的iovec及其相关的结构体-CSDN博客

lustre客户端实现的答疑解惑-腾讯云开发者社区-腾讯云

深入理解Lustre文件系统-第3篇 lustre lite - myjava2 - 博客园

  • 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.
 Comments