6.3.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

6.3.3.1. Environment description

6.3.3.1.1. Hardware configuration of each server

Description of servers hardware
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

6.3.3.1.2. Network scheme and part of configuration of hardware network switches

Network scheme of the environment:

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

6.3.3.1.3. Software configuration of the Nexus service

6.3.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

Versions of some software
Software Version
Ubuntu Ubuntu 14.04.3 LTS
NexusOSS 3m7

6.3.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

6.3.3.1.4. Software configuration of the node with test tool

6.3.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

Versions of some software
Software Version
Ubuntu Ubuntu 14.04.3 LTS
Docker 1.10

6.3.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

6.3.3.2. Testing process

  1. Nexus was installed on top of 728998-comp-disk-227 server as described in Installation of Nexus: section.

  2. The values of the variables in test-repo.py script was changed: iterations = 1000 concurrency = 1 repo_address = “172.20.9.16:5000”

  3. 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
    
  4. push_results.csv and pull_results.csv was saved in persistent folder.

  5. 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)

6.3.3.3. Results

6.3.3.3.1. Push action results

6.3.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):

Function Plot
PUSH_TIME (ITERATION, CONCURRENCY=1) PUSH_TIME(ITERATION, CONCURRENCY=1)
PUSH_TIME (ITERATION, CONCURRENCY=10) PUSH_TIME(ITERATION, CONCURRENCY=10)
PUSH_TIME (ITERATION, CONCURRENCY=30) PUSH_TIME(ITERATION, CONCURRENCY=30)
PUSH_TIME (ITERATION, CONCURRENCY=50) PUSH_TIME(ITERATION, CONCURRENCY=50)
PUSH_TIME (ITERATION, CONCURRENCY=100) PUSH_TIME(ITERATION, CONCURRENCY=100)
PUSH_TIME (ITERATION, CONCURRENCY={1, 10,30,50,100} PUSH_TIME(ITERATION, CONCURRENCY={1,10,30,50,100}

6.3.3.3.1.2. PUSH_TIME(CONCURRENCY)

The following table and graph show how PUSH_TIME parameter depend on CONCURRENCY parameter.

Maximum, Minimum, Average and Percentile 90% of PUSH_TIME values in 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
PUSH_TIME

6.3.3.3.2. Pull action results

6.3.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):

Function Plot
PULL_TIME (ITERATION, CONCURRENCY=1) PULL_TIME(ITERATION, CONCURRENCY=1)
PULL_TIME (ITERATION, CONCURRENCY=10) PULL_TIME(ITERATION, CONCURRENCY=10)
PULL_TIME (ITERATION, CONCURRENCY=30) PULL_TIME(ITERATION, CONCURRENCY=30)
PULL_TIME (ITERATION, CONCURRENCY=50) PULL_TIME(ITERATION, CONCURRENCY=50)
PULL_TIME (ITERATION, CONCURRENCY=100) PULL_TIME(ITERATION, CONCURRENCY=100)
PULL_TIME (ITERATION, CONCURRENCY={1, 10,30,50,100} PULL_TIME(ITERATION, CONCURRENCY={1,10,30,50,100}

6.3.3.3.2.2. PULL_TIME(CONCURRENCY)

The following table and graph show how PUSH_TIME parameter depend on CONCURRENCY parameter.

Maximum, Minimum, Average and Percentile 90% of PULL_TIME values in 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
PULL_TIME

6.3.3.4. Issues which have been found during the tests

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