暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

聊聊Lustre客户端参数调优

1216


作者时间QQ技术交流群
perrynzhou@gmail.com2022/12/11672152841


lustre集群环境

角色节点版本磁盘
MGS/MDS10.211.55.16lustre 2.15/dev/sdb
OSS10.211.55.17lustre 2.15/dev/sdb dev/sdc
Client10.211.55.18lustre 2.15nil


核心参数说明




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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论