Red Hat Training

A Red Hat training course is available for RHEL 8

第 4 章 使用 tuna 接口检查系统

使用 tuna 工具调整调度程序可调项、调整线程优先级、IRQ 处理程序,以及隔离 CPU 内核和套接字。Tuna 降低了执行调优任务的复杂性。

tuna 工具执行以下操作:

  • 列出系统上的 CPU
  • 列出系统上当前运行的中断请求(IRQ)
  • 更改线程的策略和优先级信息
  • 显示系统当前的策略和优先级

4.1. 安装 tuna 工具

tuna 工具设计为用于运行的系统中。这允许应用程序特定的测量工具在更改后立即查看和分析系统性能。

这个步骤描述了如何安装 tuna 工具。

流程

  • 安装 tuna 工具:

    # yum install tuna

验证步骤

  • 查看可用的 tuna CLI 选项:

    # tuna -h

其它资源

  • tuna(8) man page

4.2. 使用 tuna 工具查看系统状态

这个步骤描述了如何使用 tuna 命令行界面(CLI)工具查看系统状态。

先决条件

流程

  • 查看当前的策略和优先级:

    # tuna --show_threads
                thread
    pid   SCHED_ rtpri affinity             cmd
    1      OTHER     0      0,1            init
    2       FIFO    99        0     migration/0
    3      OTHER     0        0     ksoftirqd/0
    4       FIFO    99        0      watchdog/0
  • 查看与 PID 对应的特定线程或与命令名称匹配:

    # tuna --threads=pid_or_cmd_list --show_threads

    Thepid_or_cmd_list 参数是一个逗号分隔的 PID 或命令行模式的列表。

  • 要使用 tuna CLI 调整 CPU,请参阅使用 tuna 工具调优 CPU
  • 要使用 tuna 工具调整 IRQ,请参阅使用 tuna 工具调优 IRQ。
  • 保存更改的配置:

    # tuna --save=filename

    这个命令只保存当前运行的内核线程。未运行的进程不会被保存。

其它资源

  • tuna(8) man page

4.3. 使用 tuna 工具调优 CPU

tuna 工具命令可以针对单个 CPU。

使用 tuna 工具,您可以:

Isolate CPUs
在指定 CPU 上运行的所有任务都将移到下一个可用的 CPU。隔离 CPU 使其无法通过从所有线程的关联掩码中删除。
Include CPUs
允许任务在指定的 CPU 上运行
Restore CPUs
将指定的 CPU 恢复到之前的配置。

这个步骤描述了如何使用 tuna CLI 调整 CPU。

先决条件

流程

  • 指定要受命令影响的 CPU 列表:

    # tuna --cpus=cpu_list [command]

    cpu_list 参数是一个逗号分隔的 CPU 编号列表。例如: --cpus=0,2。CPU 列表也可以在范围中指定,例如 --cpus=”1-3,它可选择 CPU 1、2 和 3。

    要将特定的 CPU 添加到当前的 cpu_list 中,例如,使用 --cpus=+0

    将 [command] 替换为 --isolate

  • 隔离 CPU:

    # tuna --cpus=cpu_list --isolate
  • 要包括 CPU:

    # tuna --cpus=cpu_list --include
  • 要使用有四个或者多个处理器的系统,显示所有 ssh 线程在 CPU 01 上运行,以及 CPU 2 和 3 中的所有 http 线程:

    # tuna --cpus=0,1 --threads=ssh\* \
    --move --cpus=2,3 --threads=http\* --move

    这个命令按顺序执行以下操作:

    1. 选择 CPU 0 1.
    2. 选择以 ssh 开头的所有线程。
    3. 将所选线程移到所选 CPU。Tuna 将线程的关联性掩码从 ssh 开始设置为适当的 CPU。CPU 可以数字表示为 01,十六进制掩码表示为 0x3,或者二进制形式为 11。
    4. 将 CPU 列表重置为 23
    5. 选择以 http 开头的所有线程。
    6. 将所选线程移到指定的 CPU。Tuna 设置线程的关联性掩码,从 http 开始到指定的 CPU。CPU 可以通过数字方式表示为 23,以十六进制掩码表示为 0xC,或者作为 1100 的二进制代码表示。

验证步骤

  • 显示当前配置并验证更改是否已按预期执行:

    # tuna --threads=gnome-sc\* --show_threads \
    --cpus=0 --move --show_threads --cpus=1 \
    --move --show_threads --cpus=+0 --move --show_threads
    
                           thread       ctxt_switches
         pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd
       3861   OTHER     0      0,1     33997           58 gnome-screensav
                           thread       ctxt_switches
         pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd
       3861   OTHER     0        0     33997           58 gnome-screensav
                           thread       ctxt_switches
         pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd
       3861   OTHER     0        1     33997           58 gnome-screensav
                           thread       ctxt_switches
         pid SCHED_ rtpri affinity voluntary nonvoluntary             cmd
       3861   OTHER     0      0,1     33997           58 gnome-screensav

    这个命令按顺序执行以下操作:

    1. 选择以 gnome-sc 线程开头的所有线程。
    2. 显示所选线程,使用户能够验证其关联性掩码和 RT 优先级。
    3. 选择 CPU 0
    4. gnome-sc 线程移到指定的 CPU,CPU 0
    5. 显示移动的结果。
    6. 将 CPU 列表重置为 CPU 1
    7. gnome-sc 线程移到指定的 CPU,CPU 1
    8. 显示移动结果.
    9. 将 CPU 0 添加到 CPU 列表中。
    10. gnome-sc 线程移到指定的 CPU、CPU 01
    11. 显示移动结果.

其它资源

  • /proc/cpuinfo file
  • tuna(8) man page

4.4. 使用 tuna 工具调优 IRQ

/proc/interrupts 文件记录每个 IRQ 的中断数、中断类型以及位于该 IRQ 的设备名称。

这个步骤描述了如何使用 tuna 工具调整 IRQ。

先决条件

流程

  • 查看当前的 IRQ 及其相关性:

    # tuna --show_irqs
    # users            affinity
    0 timer                   0
    1 i8042                   0
    7 parport0                0
  • 指定要受命令影响的 IRQ 列表:

    # tuna --irqs=irq_list [command]

    irq_list 参数是一个逗号分隔的 IRQ 编号或用户名模式的列表。

    将 [command] 替换为 --isolate

  • 将中断移动到指定的 CPU:

    # tuna --irqs=128 --show_irqs
       # users            affinity
     128 iwlwifi           0,1,2,3
    
    # tuna --irqs=128 --cpus=3 --move

    使用 irq_list 参数替换 128,并将 3 替换为 cpu_list 参数。

    cpu_list 参数是一个用逗号分开的 CPU 号码列表,例如 --cpus=0,2如需更多信息,请参阅使用 tuna 工具调优 CPU

验证步骤

  • 将任何中断前和之后所选 IRQ 的状态与指定 CPU 进行对比:

    # tuna --irqs=128 --show_irqs
       # users            affinity
     128 iwlwifi                 3

其它资源

  • /procs/interrupts file
  • tuna(8) man page