| 作者 | 时间 | QQ技术交流群 |
|---|---|---|
| perrynzhou@gmail.com | 2022/12/11 | 672152841 |

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
解说

参数说明:为了保护数据在网络中的传输,客户端内置两种数据校验的策略,一种是客户端内存中;另外一种是数据在网络传输中。每一种数据校验类型客户端服务端都会进行计算和校验防止数据在网络传输中的损坏。关闭参数可以有效提高性能,但是数据在网络传输的一致性无法得到保证,这个根据自己的业务场景来设置合适值
参数设置:这个参数是在客户端
llite
内核模块中的llit.*.checksum_pages
参数.设置完这个参数可以通过lctl get_param osc.*.checksums
查看基于网络传输checksum
开启状态
//参数查看,在llite端checksum_pages是客户端super_block的一个标记
[root@CentOS-Lustre-Client ~]$ lctl list_param llite.*.* |grep checksum_pages
llite.bigfs-ffff8aac839ed800.checksum_pages
// 查看参数默认值
[root@CentOS-Lustre-Client ~]$ lctl get_param llite.*.checksum_pages
llite.bigfs-ffff8aac839ed800.checksum_pages=1
[root@CentOS-Lustre-Client ~]$ lctl get_param osc.*.checksums
osc.bigfs-OST0001-osc-ffff8aac839ed800.checksums=1
osc.bigfs-OST0002-osc-ffff8aac839ed800.checksums=1
/***********************执行更改*********************/
// mgs端执行关闭checksum_pages
[root@CentOS-Lustre-MDS ~]$ lctl set_param -P llite.bigfs-ffff8aac839ed800.checksum_pages=0
// 客户端查看2个osc的都关闭checksum
[root@CentOS-Lustre-Client ~]$ lctl get_param osc.*.checksums
osc.bigfs-OST0001-osc-ffff8aac839ed800.checksums=0
osc.bigfs-OST0002-osc-ffff8aac839ed800.checksums=0
//在客户端查看checksum_pages已经关闭
[root@CentOS-Lustre-Client ~]$ lctl get_param llite.*.checksum_pages
llite.bigfs-ffff8aac839ed800.checksum_pages=0
max_rpcs_in_flight
解说
max_rpcs_in_flight
是osc到ost
通信或者mdc到mdt
通信的rpc的并发数,默认设置的是8
.针对IB环境可以设置到32
;针对Ethernet以太网
可以设置到256
.
// 参数列举
[root@CentOS-Lustre-Client ~]$ lctl list_param *.*.* |grep max_rpcs_in_flight
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_rpcs_in_flight
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_rpcs_in_flight
osc.bigfs-OST0002-osc-ffff9a8f9c67c000.max_rpcs_in_flight
// 查看参数默认值
[root@CentOS-Lustre-Client ~]$ lctl get_param mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_rpcs_in_flight
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_rpcs_in_flight=8
[root@CentOS-Lustre-Client ~]$ lctl get_param osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_rpcs_in_flight
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_rpcs_in_flight=8
// 测试环境是以太网,可以设置为256
[root@CentOS-Lustre-MDS ~]$ lctl set_param -P mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_rpcs_in_flight=256
[root@CentOS-Lustre-MDS ~]$ lctl set_param -P osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_rpcs_in_flight=256
max_dirty_mb
参数解说
max_dirty_mb
这个参数是osc
可以所在客户端写入到page cache
的脏数据大小(单位是MB).如果触及到上限,这些写操作会被阻塞直到脏数据flush
到后端服务器,r如果内存足够这个参数设置原则按照4倍的max_rpcs_in_flight
来设置。
// 参数列举
[root@CentOS-Lustre-Client ~]$ lctl list_param *.*.* |grep max_dirty_mb
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_dirty_mb
osc.bigfs-OST0002-osc-ffff9a8f9c67c000.max_dirty_mb
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_dirty_mb
// 查看默认值
[root@CentOS-Lustre-Client ~]$ lctl get_param osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_dirty_mb
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_dirty_mb=101
[root@CentOS-Lustre-Client ~]$ lctl get_param mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_dirty_mb
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_dirty_mb=101
// 设置参数
[root@CentOS-Lustre-MDS ~]$ lctl set_param -P mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_dirty_mb=1024
[root@CentOS-Lustre-MDS ~]$ lctl set_param -P osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_dirty_mb=1024
client_adjust_max_dirty
实现max_dirty_mb
自适应.max_dirty_mb
对应的的是cl_dirty_max_pages
这个变量

static inline void client_adjust_max_dirty(struct client_obd *cli)
{
/* */
if (cli->cl_dirty_max_pages <= 0) {
// PAGE_SHIFT定义为12,OSC_MAX_DIRTY_DEFAULT定义为2000
// cl_dirty_max_pages初始化值为 2000*1024*1024/4096
cli->cl_dirty_max_pages =
(OSC_MAX_DIRTY_DEFAULT * 1024 * 1024) >> PAGE_SHIFT;
} else {
// 动态计算单个客户端并发的rpc和,每个rpc能最大发送的pages来计算dirty_max
unsigned long dirty_max = cli->cl_max_rpcs_in_flight *
cli->cl_max_pages_per_rpc;
// dirty_max和当前的cl_dirty_max_pages比较,如果超了取dirty_max
if (dirty_max > cli->cl_dirty_max_pages)
cli->cl_dirty_max_pages = dirty_max;
}
// 如果当前的客户端的脏pages占用内存空间超过了节点的总的pages的八分之一,则设置最大的脏pages
if (cli->cl_dirty_max_pages > cfs_totalram_pages() / 8)
cli->cl_dirty_max_pages = cfs_totalram_pages() / 8;
// 向上取整设置cl_dirty_max_pages
cli->cl_dirty_max_pages = round_up(cli->cl_dirty_max_pages,
1 << (20 - PAGE_SHIFT));
}
max_pages_per_rpc
解说
max_pages_per_rpc
定义单个rpc能发送的最大的pages数。
// 查看mdc/osc能发送的最大pages数
[root@CentOS-Lustre-Client ~]$ lctl list_param *.*.* |grep max_pages_per_rpc
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_pages_per_rpc
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_pages_per_rpc
osc.bigfs-OST0002-osc-ffff9a8f9c67c000.max_pages_per_rpc
// mdc默认是1M数据
[root@CentOS-Lustre-Client ~]$ lctl get_param mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_pages_per_rpc
mdc.bigfs-MDT0000-mdc-ffff9a8f9c67c000.max_pages_per_rpc=256
[root@CentOS-Lustre-Client ~]$ lctl get_param osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_pages_per_rpc
// osc默认是4M
osc.bigfs-OST0001-osc-ffff9a8f9c67c000.max_pages_per_rpc=1024
[root@CentOS-Lustre-Client ~]$
文章转载自存储内核技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




