使用puppet file_line禁用透明大页面(THP)

时间:2016-10-12 20:58:27

标签: puppet centos7 huge-pages

我正在使用以下代码禁用使用puppet

启用THP
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时,类似的木偶代码可以正常工作。

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

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

3 个答案:

答案 0 :(得分:0)

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

也许这会奏效:

file {' / sys / kernel / mm / transparent_hugepage / enabled':   content => '从未&#39 ;, }

或使用puppet-sysfs模块..

答案 1 :(得分:0)

enter image description here

尝试一下。我希望这应该起作用。

答案 2 :(得分:0)

除非在资源文件中使用,否则使用的想法确实失败了。但!可以使用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,                                                                                                                                                         
}