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 
 | 











