【问题标题】:using puppet file_line to disable Transparent Huge Pages (THP)使用 puppet file_line 禁用透明大页面 (THP)
【发布时间】:2020-10-21 23:31:37
【问题描述】:

我正在使用下面的代码来禁用 THP Enabled using puppet

file_line { 'disable-THP-enabled':
  ensure => present,
  path   => '/sys/kernel/mm/transparent_hugepage/enabled',
  line   => 'never',
}

但我收到以下错误消息:

Error: Could not set 'present' on ensure: Invalid argument - /sys/kernel/mm/transparent_hugepage/enabled at 43:/home/Sandeep_Kanabar/devops/puppet/modules/profile/manifests/setup_os_params.pp 
Error: Could not set 'present' on ensure: Invalid argument - /sys/kernel/mm/transparent_hugepage/enabled at 43:/home/Sandeep_Kanabar/devops/puppet/modules/profile/manifests/setup_os_params.pp 
Wrapped exception: 
Invalid argument - /sys/kernel/mm/transparent_hugepage/enabled 
Error: /Stage[main]/Profile::Setup_os_params/File_line[disable-THP-enabled]/ensure: change from absent to present failed: Could not set 'present' on ensure: Invalid argument - /sys/kernel/mm/transparent_hugepage/enabled at 43:/home/Sandeep_Kanabar/devops/puppet/modules/profile/manifests/setup_os_params.pp

这仅在实际启用 THP 时发生。例如

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never.

如果禁用 THP,则不会发生此错误。例如

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

在将 swappiness 设置为 0 时,类似的 puppet 代码会起作用。

file_line { 'set-swappiness':
  ensure => present,
  path   => '/proc/sys/vm/swappiness',
  line   => '0',
}

有人可以指出我可能遗漏了什么或做错了什么吗?我正在使用独立的木偶版本 3.8.6。这是 CentOS 7.2 上的无主设置

【问题讨论】:

  • 免去悲伤,使用forge.puppet.com/thias/sysctl
  • 没有。它不能处理透明的大页面。还是我弄错了?我终于通过使用简单的 exec 解决了这个问题

标签: puppet centos7 huge-pages


【解决方案1】:

我认为问题在于 file_line 的工作方式与 sysfs 文件系统的工作方式不兼容。例如,您不能真正使用文本编辑器打开上述文件并尝试将修改写入其中,但您可以编写一个全新的文件来完全替换旧内容。

也许这会起作用:

file { '/sys/kernel/mm/transparent_hugepage/enabled': 内容 => '从不', }

或使用 puppet-sysfs 模块 ..

【讨论】:

  • 谢谢。这是一个很好且简单的解决方案。我尝试了文件一并得到以下错误:Error: Could not back up /sys/kernel/mm/transparent_hugepage/enabled: Got passed new contents for sum {md5}6ee29af1cbd80d64e33233f14d545fa2 Error: /Stage[main]/Profile::Setup_os_params/File[/sys/kernel/mm/transparent_hugepage/enabled]/content: change from {md5}6ee29af1cbd80d64e33233f14d545fa2 to {md5}c7561db7a418dd39b2201dfe110ab4a4 failed: Could not back up /sys/kernel/mm/transparent_hugepage/enabled: Got passed new contents for sum {md5}6ee29af1cbd80d64e33233f14d545fa2
  • sysfs 模块可能没有帮助,因为该文件不存在于 CentOS 盒子中。我已经成功地使用 file_line 将禁用的 THP 永久应用于/etc/rc.local。只是尝试应用到当前内核。
【解决方案2】:

除非在资源 file 中使用的想法确实失败了。但!可以用 exec 中的 onlyif 来实现。

exec { 'thp-status':                                                                                                                                                           
  command  => "echo ${thp_status} > /sys/kernel/mm/transparent_hugepage/enabled",                                                                                            
  provider => shell,                                                                                                                                                         
  onlyif   => "egrep -q  '\\[${thp_status}\\]' /sys/kernel/mm/transparent_hugepage/enabled || echo THP-enabled should be corrected",                                         
}                                                                                                                                                                              

其实不用onlyif也是可以的

exec { 'thp-status':                                                                                                                                                           
   command  => "egrep -q  '\\[${thp_status}\\]' /sys/kernel/mm/transparent_hugepage/enabled || echo ${thp_status} > /sys/kernel/mm/transparent_hugepage/enabled",             
   provider => shell,                                                                                                                                                         
}                                                                                                                                                                              

【讨论】:

    【解决方案3】:

    试试这个。我希望这应该有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多