Use Fuel 9 hugepages and cpu_pinning implemenation instead of a custom one

Check if nova hugepages are used, to avoid conflicts in implementation
  * /etc/libvirt/qemu.conf - hugetlbfs_mount value is a list if both
1G and 2M pages are used, this breakes augeas, since it expects a string
Disable transparent hugepages for DPDK nodes

Change-Id: I0cae1836474870a4e0a99c08e4eaf67647ebb01d
Signed-off-by: Oleksandr Martsyniuk <omartsyniuk@mirantis.com>
This commit is contained in:
Pavel Basov 2016-05-10 17:40:13 -05:00 committed by Oleksandr Martsyniuk
parent 9d7a5cfb61
commit 59a207fbe7
3 changed files with 24 additions and 94 deletions

View File

@ -13,78 +13,39 @@
# under the License.
class contrail::compute::hugepages {
# This class is kept here to ensure hugetlbfs mount existence,
# even if user has missed nova hugepages configuration in UI/API.
$node_hash = hiera_hash('node', {})
$nova_huge_pages = pick($node_hash['nova_hugepages_enabled'], false)
if $contrail::compute_dpdk_enabled {
# NOTE: To use hugepages we have to upgrade qemu packages to version 2.4
# The kernel configuration for hugepages
Kernel_parameter {
provider => 'grub2',
if $contrail::compute_dpdk_enabled and !$nova_huge_pages and ($::osfamily == 'Debian') {
$qemu_hugepages_value = 'set KVM_HUGEPAGES 1'
$libvirt_hugetlbfs_mount = 'set hugetlbfs_mount /run/hugepages/kvm'
augeas { 'qemu_hugepages':
context => '/files/etc/default/qemu-kvm',
changes => $qemu_hugepages_value,
notify => Service[$contrail::libvirt_name],
}
if $contrail::hugepages_size == 2 {
$max_map_count=$contrail::hugepages_number * 2
sysctl::value { 'vm.max_map_count':
value => "${max_map_count} ",
} ->
sysctl::value { 'vm.nr_hugepages':
value => "${contrail::hugepages_number} ",
}
kernel_parameter { 'hugepagesz':
ensure => absent,
}
kernel_parameter { 'hugepages':
ensure => absent,
}
augeas { 'libvirt_hugetlbfs_mount':
context => '/files/etc/libvirt/qemu.conf',
changes => $libvirt_hugetlbfs_mount,
notify => Service[$contrail::libvirt_name],
}
elsif $contrail::hugepages_size == 1024 {
kernel_parameter { 'hugepagesz':
ensure => present,
value => "${contrail::hugepages_size}M",
} ->
kernel_parameter { 'hugepages':
ensure => present,
value => $contrail::hugepages_size,
}
#This need for vrouter start when 1Gb hugepages not enabled yet
exec { 'temporary_add_hugepages':
path => ['/sbin', '/usr/bin'],
command => 'sysctl -w vm.nr_hugepages=256',
onlyif => 'test ! -d /sys/kernel/mm/hugepages/hugepages-1048576kB',
}
exec { 'reboot_require':
path => ['/bin', '/usr/bin'],
command => 'touch /tmp/contrail-reboot-require',
onlyif => 'test ! -d /sys/kernel/mm/hugepages/hugepages-1048576kB',
}
}
file { '/hugepages':
ensure => 'directory',
group => 'kvm',
} ->
mount { '/hugepages':
ensure => 'mounted',
fstype => 'hugetlbfs',
device => 'hugetlbfs',
options => 'mode=775,gid=kvm',
atboot => true,
} ->
file_line { 'hugepages_mountpoint':
path => '/etc/libvirt/qemu.conf',
match => '#hugetlbfs_mount',
line => 'hugetlbfs_mount = "/hugepages"',
} ~>
service { 'qemu-kvm':
ensure => running,
enable => true,
} ~>
}
service { $contrail::libvirt_name:
ensure => running,
enable => true,
}
kernel_parameter { 'transparent_hugepage':
ensure => present,
value => 'never',
}
Augeas['qemu_hugepages'] ~> Service<| title == 'qemu-kvm'|>
Service<| title == 'qemu-kvm'|> -> Service<| title == $contrail::libvirt_name |>
}
}

View File

@ -29,7 +29,6 @@ class contrail {
$node_name = hiera('user_node_name')
$nodes = hiera('nodes')
$region = hiera('region', 'RegionOne')
$dpdk_hash = hiera_hash('dpdk', {})
$cluster = hiera('cluster')
$cluster_id = $cluster['id']
@ -108,10 +107,6 @@ class contrail {
$external = $settings['contrail_external']
$route_target = $settings['contrail_route_target']
$gateways = split($settings['contrail_gateways'], ',')
# Hugepages configuration for DPDK vrouter
$hugepages_size = pick($settings['hugepages_size'],2)
$hugepages_amount = pick($settings['hugepages_amount'],10)
$hugepages_number = floor($::memorysize_mb * $hugepages_amount / '100' / $hugepages_size)
# DPDK settings
$global_dpdk_enabled = $settings['contrail_global_dpdk']

View File

@ -61,32 +61,6 @@ attributes:
description: "Enable this option to unlock the DPDK feature.\nNOTE: You still have to assign DPDK-role to compute nodes to enable DPDK on them."
weight: 70
type: "checkbox"
hugepages_size:
type: 'select'
weight: 120
value: '2'
label: 'Hugepage size'
description: 'Choose the size of hugepages that will be used for dpdk feature. Check if 1GB pages are supported on target compute node. # grep pdpe1gb /proc/cpuinfo | uniq'
values:
- data: '2'
label: '2M'
- data: '1024'
label: "1G"
restrictions:
- action: hide
condition: not (settings:contrail.metadata.enabled == true and settings:contrail.contrail_global_dpdk.value == true)
hugepages_amount:
value: '60'
label: 'Hugepages amount (%)'
description: 'The amount of memory allocated on each compute-node for hugepages in percent'
weight: 130
type: 'text'
regex:
source: '^[1-9][0-9]?$|^100$'
error: "Invalid amount of percent"
restrictions:
- condition: "not (settings:contrail.metadata.enabled == true and settings:contrail.contrail_global_dpdk.value == true)"
action: "hide"
vrouter_core_mask:
value: "0x3"
label: "CPU pinning"