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

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

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

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

Versions of some software

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

Versions of some software

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

  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)

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

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}

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

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

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}

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

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