TCM是Linux IO Target即LIO的别称,是内核态的iSCSI target。TCMU(TCM in Userspace)是LIO的用户态实现,允许用户程序方便地对接各种用户态后端实现。基于TCMU框架和LIO loopback即tcm_loop模块,可以很方便地实现用户态iSCSI target。本文介绍Alibaba Cloud Linux 3中如何配置tcm_loop设备参数,以配合用户态后端优化IO性能。
使用限制
操作系统:Alibaba Cloud Linux 3
内核版本:
5.10.134-17
及以上版本
tcm_loop设备参数配置说明
通过加载tcm_loop模块时配置相关参数,即可将相应参数配置应用到新创建的tcm_loop设备。当前tcm_loop模块一共支持4个可配置的参数,分别为:
nr_hw_queues,表示设备的硬件队列数量,默认值为1。
can_queue,表示每个硬件队列的队列深度,默认值1024。
cmd_per_lun,表示SCSI设备每个逻辑单元号(LUN)可执行的最大命令数量,默认值1024。
sg_tablesize,表示设备最大分散聚集(scatter-gather)表大小,默认值256。
方法一:通过模块加载时手动配置
若您已加载过
tcm_loop
模块,执行以下命令卸载。sudo modprobe -r tcm_loop
执行
modprobe
命令加载tcm_loop
模块。<nr_hw_queues>、<can_queue>、<cmd_per_lun>、<sg_tablesize>需替换为要设置的值。
sudo modprobe tcm_loop nr_hw_queues=<nr_hw_queues> can_queue=<can_queue> cmd_per_lun=<cmd_per_lun> sg_tablesize=<sg_tablesize>
例如,配置
nr_hw_queues=4
、can_queue=2048
、cmd_per_lun=2048
以及sg_tablesize=512
。sudo modprobe tcm_loop nr_hw_queues=4 can_queue=2048 cmd_per_lun=2048 sg_tablesize=512
确认参数配置生效。
cat /sys/module/tcm_loop/parameters/nr_hw_queues cat /sys/module/tcm_loop/parameters/can_queue cat /sys/module/tcm_loop/parameters/cmd_per_lun cat /sys/module/tcm_loop/parameters/sg_tablesize
方法二:通过配置文件配置
若您已加载过
tcm_loop
模块,执行以下命令卸载。sudo modprobe -r tcm_loop
创建并配置文件。
<tcm_loop.conf>、<nr_hw_queues>、<can_queue>、<cmd_per_lun>、<sg_tablesize>需替换为要设置的值。
sudo bash -c "cat > /etc/modprobe.d/<tcm_loop.conf> << EOF options tcm_loop nr_hw_queues=<nr_hw_queues> can_queue=<can_queue> cmd_per_lun=<cmd_per_lun> sg_tablesize=<sg_tablesize> EOF"
例如,下面命令通过在
/etc/modprobe.d
目录创建配置文件tcm_loop.conf
,实现模块加载默认参数的修改。sudo bash -c "cat > /etc/modprobe.d/tcm_loop.conf << EOF options tcm_loop nr_hw_queues=4 can_queue=2048 cmd_per_lun=2048 sg_tablesize=512 EOF"
执行
modprobe
命令加载tcm_loop
模块。sudo modprobe tcm_loop
确认参数配置生效。
cat /sys/module/tcm_loop/parameters/nr_hw_queues cat /sys/module/tcm_loop/parameters/can_queue cat /sys/module/tcm_loop/parameters/cmd_per_lun cat /sys/module/tcm_loop/parameters/sg_tablesize