From 59a207fbe7422ccb1d6b305722a95ae5891a22b1 Mon Sep 17 00:00:00 2001 From: Pavel Basov Date: Tue, 10 May 2016 17:40:13 -0500 Subject: [PATCH] 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 --- .../contrail/manifests/compute/hugepages.pp | 87 +++++-------------- .../puppet/modules/contrail/manifests/init.pp | 5 -- environment_config.yaml | 26 ------ 3 files changed, 24 insertions(+), 94 deletions(-) diff --git a/deployment_scripts/puppet/modules/contrail/manifests/compute/hugepages.pp b/deployment_scripts/puppet/modules/contrail/manifests/compute/hugepages.pp index d4c198d06..fd0559347 100644 --- a/deployment_scripts/puppet/modules/contrail/manifests/compute/hugepages.pp +++ b/deployment_scripts/puppet/modules/contrail/manifests/compute/hugepages.pp @@ -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 |> } } diff --git a/deployment_scripts/puppet/modules/contrail/manifests/init.pp b/deployment_scripts/puppet/modules/contrail/manifests/init.pp index 448feab89..0f4af5721 100644 --- a/deployment_scripts/puppet/modules/contrail/manifests/init.pp +++ b/deployment_scripts/puppet/modules/contrail/manifests/init.pp @@ -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'] diff --git a/environment_config.yaml b/environment_config.yaml index 015232b7e..02a516cf6 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -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"