3. Results of measuring performance of Sonatype Nexus¶
- Abstract
This document includes performance test results of Sonatype Nexus service as a repository of docker images. All test have been performed regarding Measuring performance of container repositories
3.1. Environment description¶
3.1.1. Hardware configuration of each server¶
server |
name |
728998-comp-disk-228 |
728998-comp-disk-227 |
role |
test_tool |
Nexus |
|
vendor,model |
HP,DL380 Gen9 |
HP,DL380 Gen9 |
|
operating_system |
3.13.0-76-generic
Ubuntu-trusty
x86_64
|
3.13.0-76-generic
Ubuntu-trusty
x86_64
|
|
CPU |
vendor,model |
Intel,E5-2680 v3 |
Intel,E5-2680 v3 |
processor_count |
2 |
2 |
|
core_count |
12 |
12 |
|
frequency_MHz |
2500 |
2500 |
|
RAM |
vendor,model |
HP,752369-081 |
HP,752369-081 |
amount_MB |
262144 |
262144 |
|
NETWORK |
interface_name |
p1p1 |
p1p1 |
vendor,model |
Intel,X710 Dual Port |
Intel,X710 Dual Port |
|
bandwidth |
10G |
10G |
|
STORAGE |
dev_name |
/dev/sda |
/dev/sda |
vendor,model |
raid10 - HP P840
12 disks EH0600JEDHE
|
raid10 - HP P840
12 disks EH0600JEDHE
|
|
SSD/HDD |
HDD |
HDD |
|
size |
3,6TB |
3,6TB |
3.1.2. Network scheme and part of configuration of hardware network switches¶
Network scheme of the environment:
Here is the part of switch configuration for each switch port which connected to p1p1 interface of a server:
switchport mode trunk
switchport trunk native vlan 600
switchport trunk allowed vlan 600-602,630-649
spanning-tree port type edge trunk
spanning-tree bpduguard enable
no snmp trap link-status
3.1.3. Software configuration of the Nexus service¶
3.1.3.1. Installation of Nexus:¶
# Install Java
apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
apt-get update
sudo apt-get install oracle-java8-installer # Interactive java installer
# Install Nexus
wget http://download.sonatype.com/nexus/3/nexus-3.0.0-m7-unix.sh
chmod +x nexus-3.0.0-m7-unix.sh
echo "o
1
n
y
1
1
" | ./nexus-3.0.0-m7-unix.sh -c
service nexus restart
update-rc.d nexus defaults
After installation all default repositories was removed from Nexus and
“docker-local” hosted repository was created. You can find full configuration of
the Nexus installation in the support file created after configuration:
support.zip
Software |
Version |
---|---|
Ubuntu |
Ubuntu 14.04.3 LTS |
NexusOSS |
3m7 |
3.1.3.2. Operating system configuration:¶
You can find outputs of some commands and /etc folder in the following archive:
server_description_of_728998-comp-disk-227.tar.gz
3.1.4. Software configuration of the node with test tool¶
3.1.4.1. Test tool:¶
Firstly we need to install docker-engine:
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker.list
apt-get update && apt-get -y install docker-engine
echo DOCKER_OPTS=\"--insecure-registry 172.20.9.16:5000\" >> /etc/default/docker
service docker restart
We use Python2.7 and Script for collecting performance metrics with Proposed docker file to perform the tests. The image size is a sum of layers:
IMAGE CREATED CREATED BY SIZE COMMENT
93333b8ed564 About a minute ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/usr/s 0 B
35d8142196c0 About a minute ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
3a63f30ab247 About a minute ago /bin/sh -c apt-get install -y nginx 18.14 MB
97434d46f197 2 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 2 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
<missing> 2 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 194.5 kB
<missing> 2 days ago /bin/sh -c #(nop) ADD file:e01d51d39ea04c8efb 187.8 MB
It means that DATA_SIZE=206.13 MB
Software |
Version |
---|---|
Ubuntu |
Ubuntu 14.04.3 LTS |
Docker |
1.10 |
3.1.4.2. Operating system:¶
You can find outputs of some commands and /etc folder in the following archive:
server_description_of_728997-comp-disk-228.tar.gz
3.2. Testing process¶
Nexus was installed on top of 728998-comp-disk-227 server as described in Installation of Nexus: section.
The values of the variables in test-repo.py script was changed: iterations = 1000 concurrency = 1 repo_address = “172.20.9.16:5000”
The following command was executed to perform the tests:
sudo docker login -u jenkins -p jenkins -e jenkins@example.com sudo python test-repo.py
push_results.csv and pull_results.csv was saved in persistent folder.
The steps from 1 to 4 was repeated with the following values of the concurrency parameters: 1,10,30,50,100
As a result of this part we got the following CSV files:
PUSH_TIME(CONCURRENCY=1)
PUSH_TIME(CONCURRENCY=10)
PUSH_TIME(CONCURRENCY=30)
PUSH_TIME(CONCURRENCY=50)
PUSH_TIME(CONCURRENCY=100)
PULL_TIME(CONCURRENCY=1)
PULL_TIME(CONCURRENCY=10)
PULL_TIME(CONCURRENCY=30)
PULL_TIME(CONCURRENCY=50)
PULL_TIME(CONCURRENCY=100)
3.3. Results¶
3.3.1. Push action results¶
3.3.1.1. PUSH_TIME(ITERATION)¶
After simple processing results the following plots for push action in depend on iteration number created (click to expand an image):
3.3.1.2. PUSH_TIME(CONCURRENCY)¶
The following table and graph show how PUSH_TIME parameter depend on CONCURRENCY parameter.
Concurrency |
Maximum |
Minimum |
Average |
Percentile 90% |
---|---|---|---|---|
1 |
19.54624987 |
18.28802991 |
18.60292332 |
18.85230837 |
10 |
158.930537 |
21.7508142 |
45.62607854 |
48.32535088 |
30 |
260.8910789 |
21.95701599 |
140.7167748 |
156.5025718 |
50 |
295.4358571 |
21.76140809 |
220.7136473 |
235.8214025 |
100 |
507.6230781 |
42.87186408 |
425.6215228 |
458.9536175 |
3.3.2. Pull action results¶
3.3.2.1. PULL_TIME(ITERATION)¶
After simple processing results the following plots for pull action in depend on iteration number created (click to expand an image):
3.3.2.2. PULL_TIME(CONCURRENCY)¶
The following table and graph show how PUSH_TIME parameter depend on CONCURRENCY parameter.
Concurrency |
Maximum |
Minimum |
Average |
Percentile 90% |
---|---|---|---|---|
1 |
0.7448480129 |
0.04781007767 |
0.6843045886 |
0.7085263491 |
10 |
1.598811865 |
0.07142710686 |
1.180489622 |
1.346029782 |
30 |
4.289592028 |
0.1032390594 |
2.841079599 |
3.127129436 |
50 |
6.079101086 |
0.1912419796 |
4.465888512 |
4.781247687 |
100 |
10.95208812 |
0.194712162 |
9.210462797 |
10.03164272 |
3.4. Issues which have been found during the tests¶
Issue description |
Root cause, Link |
---|---|
Nexus allows re-pushing
existed docker layers instead
of answer with
“already exists” message
|
Docker 1.10 is known not to work with
Nexus 3.0m7 (1.10 was released after the
3.0m7 release)
|
only 5 images can be uploaded
to Nexus at the
same time
|
Root cause of the issue haven’t found yet
|