配置tcm_loop设备参数

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设备配置参数

  1. 执行modprobe命令加载tcm_loop模块。

    sudo modprobe tcm_loop
  2. 查看当前配置参数。

    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

方法一:通过模块加载时手动配置

  1. 若您已加载过tcm_loop模块,执行以下命令卸载。

    sudo modprobe -r tcm_loop
  2. 执行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=4can_queue=2048cmd_per_lun=2048以及sg_tablesize=512

    sudo modprobe tcm_loop nr_hw_queues=4 can_queue=2048 cmd_per_lun=2048 sg_tablesize=512
  3. 确认参数配置生效。

    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

方法二:通过配置文件配置

  1. 若您已加载过tcm_loop模块,执行以下命令卸载。

    sudo modprobe -r tcm_loop
  2. 创建并配置文件。

    <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"
  3. 执行modprobe命令加载tcm_loop模块。

    sudo modprobe tcm_loop
  4. 确认参数配置生效。

    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