首页
学习
活动
专区
工具
TVP
发布

存储内核技术交流

专栏作者
138
文章
149710
阅读量
38
订阅数
源码编译Lustre-2.15.2
AlmaLinux版本 // OS镜像:AlmaLinux-8.7-x86_64-dvd.iso [root@Lustre-OS ~/Source/zfs]$ uname -a Linux Lustre-OS 4.18.0-425.3.1.el8.x86_64 #1 SMP Tue Nov 8 14:08:25 EST 2022 x86_64 x86_64 x86_64 GNU/Linux 添加lustre.repo源 // 需要把这个园添加到节点中,后面源码编译需要这个源安装系统包 [root@Lust
用户4700054
2023-02-26
1.7K0
误删Lustre后端文件系统数据的影响
概述 此次演练Lustre文件系统中ldiskfs-osd后端存储上的对象被删除后,Lustre文件系统的表现。核心演练两个场景,一个是MDS中的ldiskfs中的ROOT中文件被删除;另外一个是OST中的文件对象被删除。 Lustre MDS通过mount -t ldiskfs /dev/sdb /mnt/mdt挂载后端存储后,此次我们关注ROOT目录,ROOT目录是所有Lustre文件系统客户端看到的统一的posix的视图,在这个目录里操作对应的Lustre内部对象 Lustre OST通过类似的方
用户4700054
2023-02-26
5130
聊聊Lustre Quota
Quota设计思路 📷 lustre整体分为master和slave,其中master是负责全局的quota分配和追踪运行在MDT上;slave负责后端mdt和ost后端文件系统的hard quota的统计和上报,运行在MDT和所有的OST上。 Quota设置核心链路 Quota Master端 📷 // 这个qmt_hdls定义了quota的请求处理函数 struct qmt_handlers qmt_hdls = { /* quota request handlers */ .qmt
用户4700054
2023-02-26
8350
深入浅出Lustre中mkdir实现
概览 📷 基于linux文件系统无论是本地还是分布式文件系统都需要实现vfs层的posix层的语义,lustre定义内核的inode_operations中的inode操作的函数,整个mkdir过程分为两个部分,第一部分是lookup过程,第二个部分是mkdir过程。本篇文章着重分析lustre文件系统中的mkdir的实现过程。 // inode(目录)操作函数函数 const struct inode_operations ll_dir_inode_operations = { .lookup =
用户4700054
2023-02-26
5810
聊聊lustre中的恢复机制之认知篇
背景 lustre中恢复机制分为客户端和服务端,客户端进行文件操作时候的异常情况制和服务端(MDS/OST)进行文件操作时候的异常情况,lustre提供整套的异常情况下的恢复机制。这一篇着重讲解涉及核心数据结构和核心API,整个服务之间同时通过RPC连接,客户端失败或者服务端失败大部分都能体现在网络上RPC上,所以接下来会着重分析关于网络方面的基本信息 核心数据结构解说 lustre客户端都会在struct obd_import数据结构(这个数据结构是客户端通过obd_import发送请求到lustre
用户4700054
2023-02-26
6820
聊聊Lustre客户端参数调优
lustre集群环境 角色 节点 版本 磁盘 MGS/MDS 10.211.55.16 lustre 2.15 /dev/sdb OSS 10.211.55.17 lustre 2.15 /dev/sdb /dev/sdc Client 10.211.55.18 lustre 2.15 nil 核心参数说明 📷 checksum_pages解说 📷 参数说明:为了保护数据在网络中的传输,客户端内置两种数据校验的策略,一种是客户端内存中;另外一种是数据在网络传输中。每一种数据校验类型客户端服务端都会进行计
用户4700054
2023-02-26
6410
探索Wiredtiger引擎基于B-Tree数据写入分析
Wiredtiger支持的存储模型 Wiredtiger目前支持btree和lsm的存储模型,也是唯一一个支持2种存储模型的kv磁盘存储引擎 📷 Wiredtiger数据插入实现概览 如下是Wiredtiger引擎的数据插入的的整体概览,从数据库连接初始化->会话初始化->游标初始化->调用游标的内置函数进行数据插入操作 📷 Wiredtiger数据插入实现分析 wiredtiger_open函数 wiredtiger_open函数是整个wt引擎的初始化函数,定义了WT_CONNECTION的虚函数操作
用户4700054
2023-02-26
4340
聊聊PG中事务隔离级别
数据库中的现象 📷 Lost Updates现象:两个事务同时并发更新一个行数据,第一个事务更新完毕后,第二个事务没有考虑第一个事务的任何变更而进行数据变更的问题。比如A、B事都做转账10元给X账户操作,A事务在账户X(已有1元)完成转账这时候X账户有11元,而B事务这是开始转账读取X账户的11元,在转账1元,这时候X账户有12元,整个过程客户丢失了1元 Dirty Reads and Read Uncommitted现象:一个事务读取另外一个事务未提交的事务的数据这个就是脏读 Non-Repeatab
用户4700054
2023-02-26
4330
聊聊ZFS中IO框架之基础篇
ZFS中的ZIO的流程中最上层是zfs操作入口,zpl是ZFS中的posix层,dmu是zfs中数据转换单元,这个设计和内核的虚拟地址类似,arc是数据缓存层,zio是SPA模块中执行数据从缓存到具体的磁盘的IO过程,这个也是zfs中比较复杂的部分 📷 ZFS中定义了多种IO类型,每一种IO操作对应zio中的一个或者多个函数。ZIO的类型具体定义在zio_type中. typedef enum zio_type { ZIO_TYPE_NULL = 0, ZIO_TYPE_READ, ZIO_TYP
用户4700054
2023-02-26
7120
探索Lustre中的OSD的初始化流程
OSD初始化流程概览 OSD格式化时候制定了MDS/MGS的地址,这个地址会写入到OSD对应的磁盘中,方便后续OSD挂载时候初始化MGC/MDC // 这里mgs/mds共享一块磁盘,mgs的总共占用的空间不会超过100M,因此没有不要单独弄一块盘来存储MGS的数据,即和MDS共享一块磁盘即可 mkfs.lustre --fsname=bigfs --reformat --mgsnode=CentOS-Lustre-MDS@tcp0 --ost --index=1 /dev/sdb OSD挂载的入口
用户4700054
2023-02-26
5270
聊聊Lustre服务端的IO线程
OSS IO服务线程参数 OSS中的IO线程初始化是通过ost_init进行初始化,这里设定了初始化的IO线程数 static const struct obd_ops ost_obd_ops = { .o_owner = THIS_MODULE, .o_setup = ost_setup, .o_cleanup = ost_cleanup, .o_health_check = ost_health_check, }; static int __init
用户4700054
2023-02-26
5600
探索Lustre文件系统文件创建实现上篇之服务端
特殊的mdt0 mdt0是lustre元数据服务的注册开启的地方,注册处理客户端请求的各种handler.mdt初始化的通过mount时候读取CONFIGS/{fsname}-MDT0000文件数据进行mds obd初始化,mds初始化的读取bigfs-MDT0000-mdtlov、bigfs-MDT0000(mdt0)、bigfs-OST0001(osc1)、bigfs-OST0002(osc2),用llog_reader解析配置文件如下: // 通过llog_reader读取mdt的配置文件 $ l
用户4700054
2023-02-26
7100
Linux内核源码目录
📷 $ tree ./ -L 1 ./ |-- COPYING |-- CREDITS |-- Documentation |-- Kbuild |-- Kconfig |-- LICENSES |-- MAINTAINERS |-- Makefile |-- README |-- arch |-- block |-- certs |-- crypto |-- drivers |-- fs |-- include |-- init |-- ipc |-- kernel |-- lib |-- mm |-
用户4700054
2023-02-26
4.1K0
探索Lustre文件系统文件创建链路之客户端
vfs层文件创建链路 📷 vfs层是在客户端执行创建创建,首先是经过内核的syscall的open调用,最后调用的是具体文件系统实现的的dir->i_op->atomic_open函数,这个函数是具体文件系统定义的。如下是vfs层的简要函数的定制和执行路径。 // 定义了系统调用open SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode) { return do_sys_open(AT_FDCW
用户4700054
2023-02-26
7870
探索Lustre文件系统的客户端mount实现
lustrefs文件系统定义 lustre/llite/super25.c定义lustre_fs_type为lustre文件关联mount和mount失败的后处理逻辑。这里的mount实现也是后端文件系统和客户端的mount实现。 static struct file_system_type lustre_fs_type = { .owner = THIS_MODULE, // lustre文件系统的名称定义 .name = "lustre", // lustre的mount过程 .mou
用户4700054
2023-02-26
1.8K0
探索PostgreSQL数据存储存储之数据页
计算机内数据访问的时间 📷 从CPU L1->CPU L2->DRAM->SSD->HDD->Network Storage->Tape Archives不同层次的访问,访问的时间差距很大。上图的左边是每个层次的硬件访问数据的时间周期,上图的右边是不同硬件访问时间的放大,越上层访问越短,越下层访问时间越长;但是从容量上看越上层的容量越小,越下层的容量越大。 PG磁盘数据到内存概览 📷 任何传统传统数据库都会借助DRAM来加速数据库磁盘数据的访问。比如PG中的share_buffer,全局为PG数据库中表
用户4700054
2023-02-26
3.6K0
从磁盘存储维度观测ext4文件系统
inode是文件系统中每个文件的唯一标识,映射IO Block到磁盘扇区的对应关系。inode一般存储了文件的acess/modify/create的时间、访问权限、以及最重要的这个文件包含了哪些Blocks.这里需要注意的是ext4系统中当删除文件的时候,这个文件的inode是可以被回收然后被新文件重用。
用户4700054
2023-02-26
1.1K0
深入浅出ext4文件系统之数据块组织和日志
ext4中inode数据块存储形式 📷 ext4目前在kernel中的实现有两种分别是基于block和基于extent。基于block的方式存储文件数据块的元数据有direct block(直接数据块)、indirect block(一级间接数据块,pointer to direct blocks)、double indirect block(二级间接数据块,pointer to indirect blocks)、triple indirect(三级间接数据块,pointer to double ind
用户4700054
2023-02-26
1.3K0
聊聊Lustre架构实现
开源存储问题解答社区:https://github.com/perrynzhou/deep-dive-storage-in-china
用户4700054
2023-02-26
3030
聊聊固态硬盘接口和协议
开源存储问题解答社区:https://github.com/perrynzhou/deep-dive-storage-in-china
用户4700054
2023-02-26
2.2K0
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档