前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊Lustre Quota

聊聊Lustre Quota

作者头像
用户4700054
发布于 2023-02-26 06:48:27
发布于 2023-02-26 06:48:27
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

Quota设计思路

  • lustre整体分为masterslave,其中master是负责全局的quota分配和追踪运行在MDT上;slave负责后端mdtost后端文件系统hard quota的统计和上报,运行在MDT和所有的OST上。

Quota设置核心链路

  • Quota Master
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 这个qmt_hdls定义了quota的请求处理函数
struct qmt_handlers qmt_hdls = {
    /* quota request handlers */
    .qmth_quotactl      = qmt_quotactl,
    .qmth_dqacq     = qmt_dqacq,
	/******忽略******/
};
  • Quota Slave
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// quota slave端的核心数据结构
struct qsd_instance;

// slave端的核心函数
struct qsd_instance *qsd_init(const struct lu_env *, char *, struct dt_device *,struct proc_dir_entry *, bool is_md, bool excl);
int qsd_prepare(const struct lu_env *, struct qsd_instance *);
int qsd_start(const struct lu_env *, struct qsd_instance *);
void qsd_fini(const struct lu_env *, struct qsd_instance *);
int qsd_op_begin(const struct lu_env *, struct qsd_instance *,
		 struct lquota_trans *, struct lquota_id_info *,
		 enum osd_quota_local_flags *);
void qsd_op_end(const struct lu_env *, struct qsd_instance *,
		struct lquota_trans *);
void qsd_op_adjust(const struct lu_env *, struct qsd_instance *,
		   union lquota_id *, int);
int qsd_transfer(const struct lu_env *env, struct qsd_instance *qsd,
		 struct lquota_trans *trans, unsigned int qtype,
		 u64 orig_id, u64 new_id, u64 bspace,
		 struct lquota_id_info *qi);

Lustre quota设置

quota启用

  • quota取值范围
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// osd-ldiskfs.{fsname}-OST{index}.quota_slave.enabled取值范围
// 参数必须在mgs端进行设置

* u - 仅对⽤户启⽤强制配额 
* g - 仅对组启⽤强制配额 
* p - 仅对项⽬启⽤强制配额 
* ugp - 启⽤所有⽤户、组和项⽬的强制配额 
* none - 禁⽤所有⽤户、组和项⽬的强制配额。
  • MDT端启用inode限制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 查看quota参数
[root@CentOS-Lustre-MDS ~]$ lctl list_param *.*.*.* |grep quota|grep -v dt|grep -v md|grep enable
osd-ldiskfs.bigfs-MDT0000.quota_slave.enabled

// 查看默认的mdt上的quota限制
[root@CentOS-Lustre-MDS ~]$ lctl get_param osd-ldiskfs.bigfs-MDT0000.quota_slave.enabled
osd-ldiskfs.bigfs-MDT0000.quota_slave.enabled=none

// 查看启用后的参数值
[root@CentOS-Lustre-MDS ~]$ lctl conf_param bigfs.quota.mdt=ugp
[root@CentOS-Lustre-MDS ~]$ sync
[root@CentOS-Lustre-MDS ~]$ lctl get_param osd-ldiskfs.bigfs-MDT0000.quota_slave.enabled
osd-ldiskfs.bigfs-MDT0000.quota_slave.enabled=ugp
  • OST
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 查看ost端的quota
[root@CentOS-Lustre-OSS ~]$ lctl get_param osd-ldiskfs.bigfs-OST*.quota_slave.enabled
osd-ldiskfs.bigfs-OST0001.quota_slave.enabled=none
osd-ldiskfs.bigfs-OST0002.quota_slave.enabled=none


// 在mgs端启用quota
[root@CentOS-Lustre-MDS ~]$ lctl conf_param bigfs.quota.ost=ugp
[root@CentOS-Lustre-MDS ~]$ sync

// 查看启用后的参数值
[root@CentOS-Lustre-OSS ~]$ lctl get_param osd-ldiskfs.bigfs-OST*.quota_slave.enabled
osd-ldiskfs.bigfs-OST0001.quota_slave.enabled=ugp
osd-ldiskfs.bigfs-OST0002.quota_slave.enabled=ugp

Quota设置

  • 设置quota
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 设置语法
// lfs setquota {-u|--user|-g|--group|-p|--project} username|groupname [-b block-softlimit]  [-B block_hardlimit] [-i inode_softlimit]  5 [-I inode_hardlimit] /mount_point

// 设置示例
// 说明: perrynzhou在整个/bigfs空间内,用户在MDT端inode的软限制(-i 10000)是10000,硬限制(-I 11000)是11000;在OST上限制的Block软限制是307200个,硬限制是309200个
[root@centos-lustre-client ~]$ lfs setquota -u perrynzhou -b 307200 -B 309200 -i 10000 -I 11000 /bigfs

// 单个目录设置quota
lfs project -s -p 1 -r /bigfs/quota_dir2
lfs setquota -p 1 -b 42800 -B 42800 -i 409600 -I 409600 /bigfs
  • 清除quota
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 语法规则:lctl conf_param fsname.quota.ost|mdt=u|g|p|ugp|none


// mdt管理的是inode配额
// ost管理的是块配额
$ lctl conf_param bigfs.quota.ost=ugp
$ lctl conf_param bigfs.quota.mdt=ugp


// 这里会清除整个文件系统的quota信息
[root@CentOS-Lustre-MDS ~]$ lctl conf_param bigfs.quota.ost=none
[root@CentOS-Lustre-MDS ~]$ lctl conf_param bigfs.quota.mdt=none

Quota查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@CentOS-Lustre-MDS ~]$ lctl get_param osd-*.*.quota_slave.limit*
osd-ldiskfs.bigfs-MDT0000.quota_slave.limit_group=
global_index_copy:
- id:      0
  limits:  { hard:                    0, soft:                    0, granted:                    0, time:               604800 }
osd-ldiskfs.bigfs-MDT0000.quota_slave.limit_project=
global_index_copy:
- id:      0
  limits:  { hard:                    0, soft:                    0, granted:                    0, time:               604800 }
- id:      1
  limits:  { hard:               409600, soft:               409600, granted:                    0, time:                    0 }
osd-ldiskfs.bigfs-MDT0000.quota_slave.limit_user=
global_index_copy:
- id:      0
  limits:  { hard:                    0, soft:                    0, granted:                    0, time:               604800 }
- id:      1000
  limits:  { hard:                22000, soft:                20000, granted:                    0, time:                    0 }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
HDU 4348 To the moon(可持久化线段树)
To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 4287    Accepted Submission(s): 923 Problem Description Background To The Moon is a independent game released in November 2011, it is
ShenduCC
2018/04/27
6970
HDU 4605 Magic Ball Game(可持续化线段树,树状数组,离散化)
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2489    Accepted Submission(s): 759 Problem Description When the magic ball game turns up, Kimi immediately falls in it. The inter
ShenduCC
2018/04/27
6680
HDU 5634 Rikka with Phi (线段树)
Problem Description Rikka and Yuta are interested in Phi function (which is known as Euler's totient function). Yuta gives Rikka an array  of positive integers, then Yuta makes  queries.   There are three types of queries:  Change  into ,
ShenduCC
2018/04/27
5770
给球上色(线段树+离散化) - HDU 1199
假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:
ACM算法日常
2019/01/02
1.3K0
HDU 4417 Super Mario(线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5370    Accepted Submission(s): 2461 Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability
ShenduCC
2018/04/27
6320
HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1468    Accepted Submission(s): 472 Problem Description You are given a  tree of  nodes, labeled from 1 to . To the th node a non-n
ShenduCC
2018/04/27
7210
HDU 3450 Counting Sequences(线段树)
Counting Sequences Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Submission(s): 2335    Accepted Submission(s): 820 Problem Description For a set of sequences of integers{a1,a2,a3,...an}, we define a sequence
ShenduCC
2018/04/27
5210
hdu 1394
求逆序数的时候,算出以每一个数为逆序数对的第二个数的情况之和即为序列的逆序数,这样能够防止反复
全栈程序员站长
2022/07/10
1850
[OI题库]八月提高模拟题解
具体地,将该点插入单调栈时,只会改变栈顶位置和插入点的值。记录原栈顶位置、插入点更改前的值,即可在回溯时撤销。
Clouder0
2022/09/23
2850
P2023 [AHOI2009]维护序列
老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为N的数列,不妨设为a1,a2,…,aN 。有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值。 输入输出格式 输入格式: 第一行两个整数N和P( )。第二行含有N个非负整数,从左到右依次为a1,a2,…,aN, ( )。第三行有一个整数M,表示操作总数。从第四行开始每行描述一个操作,输入的操作有以下三种形式: 操作1
attack
2018/04/13
7610
BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)
Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1820  Solved: 736 [Submit][Status][Discuss] Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站。 Y901高速公路是一条由N-1段路以及N个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为1~N,从收费站i行驶到i+1(或从i+1行驶到i)需要收取V
attack
2018/07/27
2630
CodeForces 19D Points (线段树+set)
D. Points time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Pete and Bob invented a new interesting game. Bob takes a sheet of paper and locates a Cartesian coordinate system on it as
ShenduCC
2018/04/27
6640
HDU 3333 Turing Tree (线段树)
Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4768    Accepted Submission(s): 1686 Problem Description After inventing Turing Tree, 3xian always felt boring when solving problems ab
ShenduCC
2018/04/27
5410
[Atcoder][CF]简单题选做练习笔记 2
第一个式子,要求 p_i \equiv 0 \pmod 3,第二个式子要求 p_i \equiv 1 \pmod 3 且 p_j \equiv 2 \pmod 3 或者反过来。
Clouder0
2022/09/23
3890
BZOJ3083: 遥远的国度(树链剖分)
以下图片来自(https://blog.csdn.net/lcomyn/article/details/45718295)
attack
2018/07/27
3230
BZOJ3083: 遥远的国度(树链剖分)
HDU6315 Naive Operations(线段树 复杂度分析)
设\(d_i\)表示\(i\)号节点还需要加\(d_i\)次才能产生\(1\)的贡献
attack
2018/10/08
4670
HDU6315 Naive Operations(线段树 复杂度分析)
SDUT算法分析与设计机测
将分解问题看成,以某个数字开头的分解有多少种,比如12可以看成以2开头的式子有几个,以3开头的有几个,4开头的有几个,6开头的有几个… 其中以2开头的分解式为例,可以看成12 = 2 * 6,即分析6有多少种分解方式,就是有多少个2开头的式子。
Here_SDUT
2022/09/19
5070
洛谷P3722 [AH2017/HNOI2017]影魔(线段树 set spaly)
题意 题目链接 Sol 这题好毒瘤啊。。 首先要观察到几个性质: 将最小值旋转到根相当于把右子树变为祖先的左子树,然后将原来的根变为当前最小值 上述操作对深度的影响相当于右子树不变,其他的位置-1 然后就可以做了,把询问离线之后离散化一下,建一棵权值线段树表示每个值对应的深度 同时用set维护出已经加入的值 每次先找到后继,看一下有没有左孩子,如果有的话说明前驱一定没有右孩子。 注意随时更新信息 复杂度\(O(nlogn)\) #include<bits/stdc++.h> #define Pair pa
attack
2019/03/08
3530
NOI 系列真题练习笔记
NOIP 前开始做做真题,虽然每年都风格迥异,不过感受一下 OI 风格的题目还是有一定意义的。
Clouder0
2022/09/23
8860
Day1下午解题报告
预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖。 考场上的我离正解只差一个小于号之遥。。。。。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <iostream> 5 #include <set> 6 using namespace std; 7 i
attack
2018/04/11
7750
推荐阅读
相关推荐
HDU 4348 To the moon(可持久化线段树)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档