前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊Lustre客户端参数调优

聊聊Lustre客户端参数调优

作者头像
用户4700054
发布2023-02-26 14:46:57
6580
发布2023-02-26 14:46:57
举报

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开启状态
代码语言:javascript
复制
//参数查看,在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_flightosc到ost通信或者mdc到mdt通信的rpc的并发数,默认设置的是8.针对IB环境可以设置到32;针对Ethernet以太网可以设置到256.
代码语言:javascript
复制
// 参数列举
[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来设置。
代码语言:javascript
复制
// 参数列举
[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这个变量
代码语言:javascript
复制
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数。
代码语言:javascript
复制
// 查看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 ~]$
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lustre集群环境
  • 核心参数说明
    • checksum_pages解说
      • max_rpcs_in_flight解说
        • max_dirty_mb参数解说
          • max_pages_per_rpc解说
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档