使用ansible角色禁用THP(透明大页面)

mad*_*vic 1 ansible ansible-2.x

我正在尝试通过ansible禁用VHP上的THP,因为它会干扰Redis(如果启用了Redis,则会导致延迟和更多使用问题)禁用THP的命令是,"echo never > /sys/kernel/mm/transparent_hugepage/enabled" 但它似乎无法与简单的Shell角色一起使用如下所示。

- name: Disable THP support (causes latency and mem usage issues with redis)
  shell: echo never {{ ">" }} /sys/kernel/mm/transparent_hugepage/enabled
  become: yes
  become_method: sudo
  become_user: root
Run Code Online (Sandbox Code Playgroud)

这是ansible输出:

任务[Disable-THP:禁用THP支持(导致Redis的延迟和内存使用问题)] ***更改:[127.0.0.1] => {“ changed”:true,“ cmd”:“ echo never> / sys / kernel / mm / transparent_hugepage / enabled“,” delta“:” 0:00:00.003939“,” end“:” 2018-07-09 12:22:33.183451“,” rc“:0,” start“:” 2018 -07-09 12:22:33.179512“,” stderr“:”“,” stderr_lines“:[],” stdout“:”“,” stdout_lines“:[]}

在此之后,我将ssh放入虚拟机并启动redis-server,它仍然会给我警告消息。

警告您在内核中启用了透明大页面(THP)支持。这将在Redis中造成延迟和内存使用问题。要解决此问题,请以根用户身份运行命令“从不回显> / sys / kernel / mm / transparent_hugepage / enabled”,并将其添加到您的/etc/rc.local中,以便在重启后保留设置。禁用THP后,必须重新启动Redis。

我是否在使用ansible脚本时做错了事,或者有人可以帮助我解决这个简单的shell命令为何不起作用的问题?

Br,维克多

更新:我对ansible角色进行了少许修改,以检查文件的内容是否实际更改。该角色现在看起来像这样:

- name: Disable THP support (causes latency and mem usage issues with redis)
  shell: |
    echo "never" >> /sys/kernel/mm/transparent_hugepage/enabled
    cat /sys/kernel/mm/transparent_hugepage/enabled
  become: true
  become_user: root
  become_method: sudo
Run Code Online (Sandbox Code Playgroud)

根据输出,启用的文件实际上将值更改为[never]。但是,当我SSH到VM并捕获已启用的文件时,它表明该值仍然[always]

任务[Disable-THP:禁用THP支持(导致Redis的延迟和内存使用问题)] ***更改:[127.0.0.1] => {“ changed”:true,“ cmd”:“ echo \” never \“ >> / sys / kernel / mm / transparent_hugepage / enabled \ n cat / sys / kernel / mm / transparent_hugepage / enabled“,” delta“:” 0:00:00.005309“,” end“:” 2018-07-10 10 :41:27.801697“,” rc“:0,”开始“:” 2018-07-10 10:41:27.796388“,” stderr“:”“,” stderr_lines“:[],” stdout“:”总是madvise [never]“,” stdout_lines“:[”始终疯狂[never]“]}

为什么文件的内容表明它已被更改,但是当我SSH到VM时,它似乎告诉我否则?

[vagrant@test ~]$ cd ..
[vagrant@test home]$ cd ..
[vagrant@test /]$ cd sys/kernel/mm/transparent_hugepage/
[vagrant@test transparent_hugepage]$ cat enabled
[always] madvise never
Run Code Online (Sandbox Code Playgroud)

Bap*_*ias 6

基于此问题,您可以使用或模块安装软件包sysfs并设置sysfs.conf文件的配置。它具有幂等的优势。templatelineinfile

---
- hosts: target
  become: yes
  tasks:
    - package:
        name: sysfsutils
    - lineinfile:
        path: /etc/sysfs.conf
        line: kernel/mm/transparent_hugepage/enabled = never
Run Code Online (Sandbox Code Playgroud)

当然,包名称可能会因您的分布而异。

您需要重新引导目标以考虑更改。

  • 这只会更新“sysfs.conf”,但在下次重新启动之前不会激活更改,对吗? (3认同)

Ser*_*ann 5

@clopez:sysfsutils不会在centOS中创建/etc/sysfs.conf。每次运行剧本时,您的“lineinfile”conf 也会添加相同的行。

这是我的配置 - 这也应该适用于基于 debian 的系统:

    - name: install sysfsutils for disabling transparent huge pages
      package:
        name: sysfsutils
        state: latest
    - name: disable transparent huge pages for redis performance - persistent change
      lineinfile:
        path: /etc/sysfs.conf
        create: true
        regexp: '^kernel\/mm\/transparent\_hugepage\/enabled'
        line: "kernel/mm/transparent_hugepage/enabled = never"
    - name: disable transparent huge pages for redis performance - live change
      shell: echo never {{ ">" }} /sys/kernel/mm/transparent_hugepage/enabled
Run Code Online (Sandbox Code Playgroud)