Age | Commit message (Collapse) | Author | Files | Lines |
|
Problem:
Neither OVS nor SRIOV multi-queue is not supported. Guest VM lacks tuning to reach high throughput.
Solution:
(1) Build SRIOV multi-queue capable guest image by recompiling the igxbevf driver (make CFLAGS_EXTRA=-DIXGBE_ENABLE_VF_MQ install).
(2) Change pktgen to send on multiple queues.
(3) Add tuning in guest VM (Disable irqbalance and setup vNIC interrupt affinity to vCPUs)
Update 1: Takes care comments plus adds unit test cases
Update 2: Jenkins reports code coverage 81%, local reports 96%, add more unit test cases
Update 3: Manually rebased to adapt to SSH.from_node()
Update 4: Takes care comments for vnic_type, vnic_name
Change-Id: Ieb15381c653b13697487d095efa4be6c3c49fa42
JIRA: YARDSTICK-619
Signed-off-by: Jing Zhang <jing.c.zhang@nokia.com>
|
|
|
|
|
|
|
|
|
|
|
|
Change-Id: I3f961e26fb045ea7501dc3a5b630b3ef94fec3ee
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
weird error
E AddressValueError: '10.20.0.0/15' does not appear to be an IPv4 or IPv6 network. Did you pass in a bytes (str in Python 2) instead of a unicode object?
I guess we need to convert the stack.outputs mock to unicode
FAILED
tests/unit/benchmark/contexts/test_heat.py:137 (HeatContextTestCase.test_add_server_port)
self = <tests.unit.benchmark.contexts.test_heat.HeatContextTestCase testMethod=test_add_server_port>
def test_add_server_port(self):
network1 = mock.MagicMock()
network1.vld_id = 'vld111'
network2 = mock.MagicMock()
network2.vld_id = 'vld777'
self.test_context.name = 'foo'
self.test_context.stack = mock.MagicMock()
self.test_context.networks = {
'a': network1,
'c': network2,
}
self.test_context.stack.outputs = {
'b': '10.20.30.45',
'b-subnet_id': 1,
'foo-a-subnet-cidr': '10.20.0.0/15',
'foo-a-subnet-gateway_ip': '10.20.30.1',
'b-mac_address': '00:01',
'b-device_id': 'dev21',
'b-network_id': 'net789',
'd': '40.30.20.15',
'd-subnet_id': 2,
'foo-c-subnet-cidr': '40.30.0.0/18',
'foo-c-subnet-gateway_ip': '40.30.20.254',
'd-mac_address': '00:10',
'd-device_id': 'dev43',
'd-network_id': 'net987',
}
server = mock.MagicMock()
server.ports = OrderedDict([
('a', {'stack_name': 'b'}),
('c', {'stack_name': 'd'}),
])
expected = {
"private_ip": '10.20.30.45',
"subnet_id": 1,
"subnet_cidr": '10.20.0.0/15',
"network": '10.20.0.0',
"netmask": '255.254.0.0',
"gateway_ip": '10.20.30.1',
"mac_address": '00:01',
"device_id": 'dev21',
"network_id": 'net789',
"network_name": 'a',
"local_mac": '00:01',
"local_ip": '10.20.30.45',
"vld_id": 'vld111',
}
> self.test_context.add_server_port(server)
tests/unit/benchmark/contexts/test_heat.py:186:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
yardstick/benchmark/contexts/heat.py:307: in add_server_port
network_name, port['stack_name'], self.stack.outputs)
yardstick/benchmark/contexts/heat.py:315: in make_interface_dict
subnet_ip = ipaddress.ip_network(subnet_cidr)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
address = '10.20.0.0/15', strict = True
def ip_network(address, strict=True):
"""Take an IP string/int and return an object of the correct type.
Args:
address: A string or integer, the IP network. Either IPv4 or
IPv6 networks may be supplied; integers less than 2**32 will
be considered to be IPv4 by default.
Returns:
An IPv4Network or IPv6Network object.
Raises:
ValueError: if the string passed isn't either a v4 or a v6
address. Or if the network has host bits set.
"""
try:
return IPv4Network(address, strict)
except (AddressValueError, NetmaskValueError):
pass
try:
return IPv6Network(address, strict)
except (AddressValueError, NetmaskValueError):
pass
if isinstance(address, bytes):
raise AddressValueError(
'%r does not appear to be an IPv4 or IPv6 network. '
'Did you pass in a bytes (str in Python 2) instead of'
> ' a unicode object?' % address)
E AddressValueError: '10.20.0.0/15' does not appear to be an IPv4 or IPv6 network. Did you pass in a bytes (str in Python 2) instead of a unicode object?
../../yardstick/yardstick_venv/lib/python2.7/site-packages/ipaddress.py:199: AddressValueError
Change-Id: Ie3b087a26a054203573eaa9b13c3e90152bba6a9
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
|
|
Change-Id: I6fdae629bdbd45cba715a838c41613b914a3abcb
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
we need to mock HeatStack.delete() before
we instantiate otherwise we can't
reach the instantiated objects delete() method
we need to patch the class so we patch all instances
Change-Id: I36f9476dcfb83e2d583c5a9f72dc27fce57258eb
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
remove duration checks and test with sleep 0
Change-Id: I22516cde56ac3a02358ca9c3e652cead10580d76
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
|
|
|
|
|
|
JIRA: YARDSTICK-682
We decide to support k8s in E release.
We need to discuss with openretriver team and then rewrite the ping
test case under k8s as the first step.
Change-Id: I3f81ebca8de5c1f3a8b7d42581cd7342dc320239
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
these tests were failing to mock subprocess.check_output
and thus were trying to run sudo commands on the local
system.
This is dangerous. Add the subprocess mock.
Also mock the LOG object so we don't print
bogus Runtime error tracebacks in the unittest logs
when we test assertRaises()
Change-Id: I01535f9952fbd95ce2f5972b641c51ff836e7e8c
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Don't print fake tracebacks to the unittest logs
Change-Id: I8a468b8c6566f02be88a9dd222567c14c66b0956
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
|
|
|
|
|
|
we need to know which network each port is connected to
so we can find VLAN or VXLAN ID.
To do this we implement a new method for Contexts,
Context.get_network(). This method is similar to
Context.get_server(), it searches for a given
network name in all the contexts.
From this we generate a context_cfg["networks"]
dict that stores all the network info for the nodes
in the scenario.
Then when we generate the topology for VNFD, we can
lookup a given network by the vld_id and get the
network_type, segmentation_id, etc.
Then if we need to for example generated
traffic on a given VLAN or VXLAN, we have this
info available.
Define default nd_route_tbl for ACL VNF
we need default empty nd_route_tbl for IPv6 route.
Change-Id: I9f9cfbd6acabeb4ae4675ca7354390efa57b29e7
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
|
|
Change-Id: I306e8e5525c3722179a5321988cad76190b93951
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: I3923d75c1ae7974c7803b0ad6997a5ad0fece11d
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: I74bbdee1a503ef9bad32db7d4444921f6730f465
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: I046fae81c23555573df7d9e2e80995499062cf38
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: Ia6207c898653c3ba21b22e9c309e7abb25d5cd32
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: I0c6f6b68b30ae72887666a3b9e994dabf7c6a71d
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
Change-Id: I41a72b1fd7099e404a1cf832de39f15bbc7b46e0
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
JIRA: YARDSTICK-716
API: /api/v2/yardstick/environments
METHOD: GET
Change-Id: I46b7fb2b143fe76b6a0edbf1ecc8281187b85918
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
|
|
This is why we don't do things at module
import time.
when we import this module it makes a bad
sigint handler. Only load signal handlers
at runtime.
Also fix handler to take *args, **kwargs.
Unittest failures:
> time.sleep(0.01)
E TypeError: handler() takes 0 positional arguments but 2 were given
Change-Id: I4296a4bdef0e5f4d58b0503dcbc834f3bef0feeb
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
there is no reason to sleep for a whole
minute during unittest
Change-Id: I206229bcaa7a50af1859f7b04e521955bb6217d4
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
JIRA: YARDSTICK-710
Since we have the plan to upload api v2 and gui.
We need to add put and delete method.
So the architecture need to be improved.
Change-Id: Ie20a79c26ef6c581897ce4e63980fa2895b162d2
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
So it can easily be used by other testcase to unify result
JIRA: YARDSTICK-702
Change-Id: Id4fde38a9a0c2a87a6c870bdb7b0c8f3a3b371ac
Signed-off-by: rexlee8776 <limingjiang@huawei.com>
|
|
JIRA: YARDSTICK-697
Currently the action in env like prepareYardstickEnv,
createGrafanaContainer, createInfluxDBContainer, this is not python style.
So I do some change:
prepareYardstickEnv->prepare_env
createGrafanaContainer->create_grafana
createInfluxDBContainer->create_influxdb
And also add some log info in env_action.
Change-Id: Ia91576b975f3de76b96e312779fda4911e7cac24
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
|
|
|
|
This patch improve HA test case in the following aspects:
1. the "GeneralHA" type now will check if the target service process in the controller node.
2. support ignore server certificate
3. add debug log for recovering service failed
4. improve method to kill keystone process
Change-Id: I9ae7ab54391fe41d5d7f3e4951a7ac2e3ba75968
Signed-off-by: JingLu5 <lvjing5@huawei.com>
|
|
JIRA: YARDSTICK-658
Currently the yardstick have three dispatcher: file, influxdb, mongodb.
(influxdb using API to get result and mongodb using testAPI to get result)
But their output format is different. It is hard to use.
In this patch, make all dispatchers using the same data source.
And make the output format of file and influxdb unified.
As for mongodb, since it is related to testAPI, so I make it push data
every test case.
The unified output format is:
http://paste.openstack.org/show/610125/
Change-Id: I854ac4f03e6f904469b07b0c924c7d850545ae5b
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
First we add mac_address, subnet_cidr to Heat template outputs
Then we convert those into a form for NSB and add vld_id.
NSB also requires PCI Bus ID, kernel driver
and dpdk_port_num. We get this by ssh-ing
into instance and dumping sysfs
We also need to fix allow for ssh key auth,
and implement relative path file loading
so NSB can find all its YAML files
JIRA: YARDSTICK-580
Change history:
don't hide heat create tracebacks we need tracebacks for debug
vnf_generic: add task_path to scenario so we can load relative paths
for vnf_generic we want to be able to load yaml relative to the
task path
For example:
traffic_profile: ../../traffic_profiles/fixed.yaml
topology: ping_tg_topology.yaml # TODO: look in relative path where the tc.yaml is found
These need to be relative to samples/vnf_samples/nsut/ping/tc_ping_heat_context.yaml
Add a scenario["task_path"] entry
heat: log actual exception
vnf_generic: replace list with set and iterate over values()
some general refactors to remove redundact lookups and
type conversions
heat: provide mac_address, device_id and network_id from outputs
We may need more information to dynamically
determine test topology.
Towards this end return more info in the heat template.
We can return mac_address, device_id and network_id.
Once we have this info we can add it to the context_cfg
as an interfaces dict.
add sample vnf ping multi-network test
this test requires 3 network, one for mgmt
and the other two for NSB traffic tests
We have to make sure we don't use DPDK
on mgmt interface because DPDK unbinds
the driver
heat: convert networks to OrderedDict
so we can lookups networks as well as
iterate over them in consisitent order
heat: and vld_id to networks for vnf_generic
vnf_generic uses vld_id Virtual Link Descriptor ID
to identify interfaces
Add the key to the networks dict
and store in Networks object
implement relative path file loading in vnf_generic
in multiple places we need to load a file
relative to the task path, so add
open_relative_file_path
and modify load_vnf_model to include the scenario_cfg
parameter so we have access to task_path
DRAFT: heat timeout support
Heat stack in CI job failed due to some Nova issue.
But then apparently yardstick kept running and took 180mins to timeout
https://build.opnfv.org/ci/view/bottlenecks/job/bottlenecks-compass-posca_stress_ping-baremetal-daily-master/16/console
We can add a Heat create timeout and fail faster if there is an error.
The question is how long should we wait for a Heat stack to deploy. We
can set a default and allow override in the heat context config, if
users make complicated stacks
heat: get netmask and gateway from heat outputs
we have do some tricky business with finding
the subnet cidr and converting it into netmask
vnf_generic: get vpci, driver and dpdk_port_num
use a big old find command to dump all the sysfs
netdev info nicely. This was re-used from autotest FCoE tests.
r"""find /sys/devices/pci* -type d -name net -exec sh -c '{ grep -sH ^ \
+$1/ifindex $1/address $1/operstate $1/device/vendor $1/device/device \
+$1/device/subsystem_vendor $1/device/subsystem_device ; \
+printf "%s/driver:" $1 ; basename $(readlink -s $1/device/driver); } \
+' sh \{\}/* \;
This finds all PCI devices that are network devices, then
dumps all the relevant info using /bin/sh.
Then we parse this into a 'netdevs' dict inside the node_dict
and also convert into VNF fields we need.
vnf_generic: set node name for kpis
node is a dict, so we have to use node_name
vnfdgen: we CANNOT use TaskTemplate.render
because it does not allow for missing variables, we need to allow
password for key_filename to be undefined
remove default ssh password hack, once rendering is fixed
add new example tc_external_ping_heat_context
Change-Id: If1fe0c1a2ab0a5be17e40790a66f28f706fa44d6
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
|
|
No handlers could be found for logger
It looks like we need to call _init_logging
to properly setup the logging during unittests.
This should fix the influxdb unittest warning.
JIRA: YARDSTICK-506
Change-Id: I57f6e4088005a691d6587fc68b85455ff257a66c
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
|
|
JIRA: YARDSTICK-660
The monitor func()'s criteria in the monitor_process.py now is whether at least
one process of the specific controller node service is recovered. But in reality
is more resonable to use whether processes have been recoverd to it's original
amount. This patch is aiming at improving the isssue
Change-Id: I950ce2a89555801b96092735b0d670e892049927
Signed-off-by: JingLu5 <lvjing5@huawei.com>
|
|
JIRA: YARDSTICK-641
Allowing parameters to pass between scenarios so that the one test case
can be combination of several scenarios.
Change-Id: I55a00855e77d5b719a27a069a3ea195d6bbd0ef8
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
|
|
need to mock SSH.from_node().execute.return_value
because we switch most SSH calls to use from_node()
factory function
Change-Id: Ibea525c2fcc243d41de8ccbcd40bc98532d69006
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
|
|
monitors at the same time."
|
|
JIRA: YARDSTICK-582
Create a customizable flavor via heat context. All heat parameters
are configurable including Core Affinity. The default flavor name
is XXXX-flavor where XXXX is stackname. Flavor attributes are taken
from the heat context file. If a flavor attribute is not used it
takes default attribute value. If flavor name is not specified it
uses the server name + "-flavor" or stack-name + "-flavor".
Compute node specific attributes are configurable via "extra_specs"
attribute. See
https://docs.openstack.org/admin-guide/compute-flavors.html for
details.
Change-Id: If4015970b889b0b95bfa8eba9491ebf31e92f2c7
Signed-off-by: DanielMartinBuckley <daniel.m.buckley@intel.com>
|
|
to verify full throughput of SRIOV and OVS-dpdk."
|
|
|