blob: bfa0b174e9bbe307367a37a690730f9963fe0266 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
---
heat_template_version: 2014-10-16
description: >
Example extra config for post-deployment
parameters:
server:
type: string
HostCpusList:
description: >
List of logical cores for OVS DPDK
type: string
default: ""
NeutronDpdkSocketMemory:
description: Memory allocated for each socket
default: ""
type: string
NeutronDpdkCoreList:
description: >
A list or range of physical CPU cores to be pinned to PMD
The given args will be appended to the tuned cpu-partitioning profile.
Ex. HostCpusList: '4-12' will tune cores from 4-12
type: string
default: ""
resources:
OvsDpdkSetup:
type: OS::Heat::StructuredDeployment
properties:
server: {get_param: server}
config: {get_resource: OvsDpdkConfig}
OvsDpdkConfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
config:
str_replace:
template: |
#!/bin/bash
set -x
get_mask()
{
local list=$1
local mask=0
declare -a bm
max_idx=0
for core in $(echo $list | sed 's/,/ /g')
do
index=$(($core/32))
bm[$index]=0
if [ $max_idx -lt $index ]; then
max_idx=$index
fi
done
for ((i=$max_idx;i>=0;i--));
do
bm[$i]=0
done
for core in $(echo $list | sed 's/,/ /g')
do
index=$(($core/32))
temp=$((1<<$core))
bm[$index]=$((${bm[$index]} | $temp))
done
printf -v mask "%x" "${bm[$max_idx]}"
for ((i=$max_idx-1;i>=0;i--));
do
printf -v hex "%08x" "${bm[$i]}"
mask+=$hex
done
printf "%s" "$mask"
}
pmd_cpu_mask=$( get_mask $PMD_CORES )
dpdk_lcore_mask=$( get_mask $DPDK_CORES )
yum remove -y vpp-devel
yum install -y /root/dpdk_rpms/*
systemctl restart openvswitch
sleep 5
sed -i "s/#user\s*=.*/user = \"root\"/" /etc/libvirt/qemu.conf
sed -i "s/#group\s*=.*/group = \"root\"/" /etc/libvirt/qemu.conf
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
if [ -n "$SOCKET_MEMORY" ]; then
other_config="dpdk-socket-mem=$SOCKET_MEMORY"
ovs-vsctl --no-wait set Open_vSwitch . other_config:$other_config
fi
if [ -n "$pmd_cpu_mask" ]; then
other_config="pmd-cpu-mask=$pmd_cpu_mask"
ovs-vsctl --no-wait set Open_vSwitch . other_config:$other_config
fi
if [ -n "$dpdk_lcore_mask" ]; then
other_config="dpdk-lcore-mask=$dpdk_lcore_mask"
ovs-vsctl --no-wait set Open_vSwitch . other_config:$other_config
fi
systemctl restart openvswitch
params:
$DPDK_CORES: {get_param: HostCpusList}
$PMD_CORES: {get_param: NeutronDpdkCoreList}
$SOCKET_MEMORY: {get_param: NeutronDpdkSocketMemory}
outputs:
deploy_stdout:
description: Output of the extra dpdk ovs deployment
value: {get_attr: [OvsDpdkSetup, deploy_stdout]}
|