Finding a Keystone bug while testing 20 node HA cloud performance at creating 400 VMs¶
(Contributed by Alexander Maretskiy, Mirantis)
Below we describe how we found a bug in Keystone and achieved 2x average performance increase at booting Nova servers after fixing that bug. Our initial goal was to measure performance the booting of a significant amount of servers on a cluster (running on a custom build of Mirantis OpenStack v5.1) and to ensure that this operation has reasonable performance and completes with no errors.
Goal¶
Get data on how a cluster behaves when a huge amount of servers is started
Get data on how good the neutron component is good in this case
Summary¶
Creating 400 servers with configured networking
Servers are being created simultaneously - 5 servers at the same time
Hardware¶
Having a real hardware lab with 20 nodes:
Vendor |
SUPERMICRO SUPERSERVER |
CPU |
12 cores, Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz |
RAM |
32GB (4 x Samsung DDRIII 8GB) |
HDD |
1TB |
Cluster¶
This cluster was created via Fuel Dashboard interface.
Deployment |
Custom build of Mirantis OpenStack v5.1 |
OpenStack release |
Icehouse |
Operating System |
Ubuntu 12.04.4 |
Mode |
High availability |
Hypervisor |
KVM |
Networking |
Neutron with GRE segmentation |
Controller nodes |
3 |
Compute nodes |
17 |
Rally¶
Version
For this test case, we use custom Rally with the following patch:
https://review.openstack.org/#/c/96300/
Deployment
Rally was deployed for cluster using ExistingCloud type of deployment.
Server flavor
$ nova flavor-show ram64
+----------------------------+--------------------------------------+
| Property | Value |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| disk | 0 |
| extra_specs | {} |
| id | 2e46aba0-9e7f-4572-8b0a-b12cfe7e06a1 |
| name | ram64 |
| os-flavor-access:is_public | True |
| ram | 64 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 1 |
+----------------------------+--------------------------------------+
Server image
$ glance image-show d1c116f4-3c38-4aa6-8fa1-f7a28c4e72a6
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | 053ad369d58aa98afb1d355aa16b0663 |
| container_format | bare |
| created_at | 2018-01-09T06:23:18Z |
| disk_format | qcow2 |
| id | d1c116f4-3c38-4aa6-8fa1-f7a28c4e72a6 |
| min_disk | 0 |
| min_ram | 0 |
| name | TestVM |
| owner | 01cb845eee6449cea4381865a1270736 |
| protected | False |
| size | 5254208 |
| status | active |
| tags | [] |
| updated_at | 2018-01-09T06:23:18Z |
| virtual_size | None |
| visibility | public |
+------------------+--------------------------------------+
Task configuration file (in JSON format):
{
"version": 2,
"title": "Boot server performance",
"subtasks": [
{
"title": "Boot a server",
"scenario": {
"NovaServers.boot_server": {
"flavor": {
"name": "ram64"
},
"image": {
"name": "TestVM"
}
}
},
"runner": {
"constant": {
"concurrency": 5,
"times": 400
}
},
"contexts": {
"neutron_network": {
"network_ip_version": 4
},
"users": {
"concurrent": 30,
"users_per_tenant": 5,
"tenants": 5
},
"quotas": {
"neutron": {
"subnet": -1,
"port": -1,
"network": -1,
"router": -1
}
}
}
}
]
}
The only difference between first and second run is that runner.times for first time was set to 500
Results¶
First time - a bug was found:
Starting from 142 server, we have error from novaclient: Error <class ‘novaclient.exceptions.Unauthorized’>: Unauthorized (HTTP 401).
That is how a bug in Keystone was found.
action |
min (sec) |
avg (sec) |
max (sec) |
90 percentile |
95 percentile |
success |
count |
nova.boot_server total |
6.507 6.507 |
17.402 17.402 |
100.303 100.303 |
39.222 39.222 |
50.134 50.134 |
26.8% 26.8% |
500 500 |
Second run, with bugfix:
After a patch was applied (using RPC instead of neutron client in metadata agent), we got 100% success and 2x improved average performance:
action |
min (sec) |
avg (sec) |
max (sec) |
90 percentile |
95 percentile |
success |
count |
nova.boot_server total |
5.031 5.031 |
8.008 8.008 |
14.093 14.093 |
9.616 9.616 |
9.716 9.716 |
100.0% 100.0% |
400 400 |