Dans le cadre du dossier de comparatif des offres hosting VPS, j’ai testé Ikoula. Ils proposent différentes offres. Une offre plus adaptée aux professionnels Flex’Servers NG et une offre adaptée au publique qui est facturée à l’heure.

Je tiens à les remercier d’avoir accepté de mettre à ma disposition une machine pour ce test.

Ikoula Flex’Servers NG 1 CPU

Détail de l’offre Medium :

  • Virtualisation : Hyper-V
  • Processeurs : 1 CPU intel Xeon
  • Mémoire : 1Go
  • Espace disque 50 Go
  • ligne : 100Mbps
  • SLA : 99,9% ( Réseau / Garantie de connectivité)
  • 1IPv4
  • options proposées via leur interface : consulter les statistiques, paramétrer les DNS secondaires, modifier le reverse DNS, installer un Rescue MX, lancer un scan de sécurité
  • Prix : 12,99€HT/mois

Speedtest.py

Cela permet de tester la vitesse en upload et download de votre serveur linux.

Voici les commandes pour télécharger et exécuter le script python :

$ wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
$ chmod +x speedtest-cli

$ ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Ikoula Net SAS (94.125.162.127)...
Selecting best server based on latency...
Hosted by Bouygues Telecom (Paris) [1.59 km]: 6.124 ms
Testing download speed........................................
Download: 184.44 Mbits/s
Testing upload speed..................................................
Upload: 49.87 Mbits/s

On voit déjà que la ligne présente un bon ratio download/upload. On est à 23Mo/s en download et 6,2Mo/s en upload. Ce qui est plus que satisfaisant pour une utilisation personnel, mais convient très bien pour une PME voulant disposer d’un espace d’échange de fichiers par exemple.

Le temps de réponse du test est plus que correcte.

Téléchargement de fichier important

Le test est effectué avec un wget de plusieurs fichiers fourni comme moyen de test :

  • fichier OVH France : wget http://proof.ovh.net/files/1Gio.dat
  • fichier Thinkbroadband UK : wget http://download.thinkbroadband.com/1GB.zip
  • fichier tweak.nl Pays-Bas : wget http://speedtest.tweak.nl/1000mb.bin

Voici les résultats pour Ikoula :

  • fichier OVH France 1Go : 6.2 MB/s (6,99ms)
  • fichier Thinkbroadband UK 1Go : 5.98 MB/s (11ms)
  • fichier tweak.nl Pays-Bas 1Go : 5.71 MB/s (18,5ms)

Unixbench

Il permet de tester différents paramètres de votre serveur.

Pour l’installer vous aurez besoin de make et quelques autres paquets :

apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl  perl-modules make gcc
cd /opt && wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz && tar -xzf UnixBench5.1.3.tgz
cd UnixBench
./Run

1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       16572540.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2558.4 MWIPS (9.9 s, 7 samples)
Execl Throughput                               2462.5 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        479691.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          150111.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1082050.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1127864.6 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 213930.1 lps   (10.0 s, 7 samples)
Process Creation                               7628.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4153.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    582.6 lpm   (60.0 s, 2 samples)
System Call Overhead                        2556591.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   16572540.8   1420.1
Double-Precision Whetstone                       55.0       2558.4    465.2
Execl Throughput                                 43.0       2462.5    572.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     479691.8   1211.3
File Copy 256 bufsize 500 maxblocks            1655.0     150111.8    907.0
File Copy 4096 bufsize 8000 maxblocks          5800.0    1082050.6   1865.6
Pipe Throughput                               12440.0    1127864.6    906.6
Pipe-based Context Switching                   4000.0     213930.1    534.8
Process Creation                                126.0       7628.7    605.5
Shell Scripts (1 concurrent)                     42.4       4153.6    979.6
Shell Scripts (8 concurrent)                      6.0        582.6    971.0
System Call Overhead                          15000.0    2556591.4   1704.4
                                                                   ========
System Benchmarks Index Score                                         920.3

Il présente un score acceptable, sans toutefois être impressionnant. Le score est 3x plus important qu’un Core i7 lancé sur un seul threads et représente 3/4 d’un Core i7 si les opérations sont lancés sur les 4 coeurs. Le descriptif de l’offre parle de vCore Xeon

Processeur

Le test suivant est fait via la génération aléatoire udev, qui charge un coeur du processeur pour écrire un fichier de 100Mo de données aléatoires :

$ dd if=/dev/urandom of=/dev/null bs=1M count=100
100+0 enregistrements lus
100+0 enregistrements écrits
104857600 octets (105 MB) copiés, 18,9761 s, 5,5 MB/s
$ dd if=/dev/urandom of=/dev/null bs=1M count=500
500+0 enregistrements lus
500+0 enregistrements écrits
524288000 octets (524 MB) copiés, 98,1086 s, 5,3 MB/s

On atteint 5.5 Mo/s et le même est fait juste après pour un fichier de 500Mo pour atteindre 5.3 Mo/s. C’est assez constant dans le temps, mais je m’attendais à un chiffre un peu plus élevé

Pour tester la compression via xz, gzip et pbzip2, il faut tenir en compte également la vitesse du disque. Le fichier utilisé pour le test est celui d’ovh (http://ovh.net/files/1Gio.dat) :

$ time cat 1Gio.dat | xz > 1Gio.dat.xz
real    12m59.066s
user    12m38.419s
sys     0m12.745s

$ time cat 1Gio.dat | gzip > 1Gio.dat.gz
real    1m25.238s
user    1m17.573s
sys     0m4.828s

$ time cat 1Gio.dat | pbzip2 -p2 -9 -c > 1Gio.dat.bz2

real    9m17.323s
user    9m9.242s
sys     0m6.220s

Au niveau compression Xz, il se défend très bien, tout en étant 2 fois plus lent qu’un Core i7 (xz n’utilise qu’un seul thread). Pour la compression gzip et bzip rien à redire, ces valeurs sont bonnes.

SysBench

Différents tests de benchmarkt sont possibles avec Sysbench : test CPU, test I/O, test de mémoire vive, etc.

Performance du CPU

Ce test est basé sur 1 seul thread (pour les VPS proposant 2vCores on travaillera avec 2 threads pour relativiser les résultats) :

# sysbench --test=cpu --num-threads=1 --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          43.2052s
    total number of events:              10000
    total time taken by event execution: 43.1905
    per-request statistics:
         min:                                  2.90ms
         avg:                                  4.32ms
         max:                                 32.82ms
         approx.  95 percentile:               6.33ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   43.1905/0.00

Il se défend très bien, 10 fois plus rapide qu’un babana pi, mais 4x moins d’un core i7-2760QM 2,4Ghz (test fait sur 2 threads…).

 

Performances des I/O

Dans un premier temps on prépare des fichiers de tests. Il est mieux de mettre 10x plus que la RAM, mais on fait avec l’espace qu’on a et un vps n’en a pas beaucoup, on essaye donc de partir sur 15Go. Ici Ikoula propose 2 parties dans son offre de 50Go :

  • 10Go pour le système (9Go pour la racine, 500Mo pour tmp et 500Mo pour /var/tmp)
  • 40Go pour /data

Nous allons voir la différence entre ces 2 espaces de stockage. Je pense que les data seront dans un SAS moins performant que la partie système.

$mkdir test
$cd test
$ sysbench --test=fileio --file-total-size=7G prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

128 files, 57344Kb each, 7168Mb total
Creating files for the test...

$ sysbench --test=fileio --file-total-size=7G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
Running the test with following options:
Number of threads: 1
Initializing random number generator from timer.


Extra file open flags: 0
128 files, 56Mb each
7Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  31560 Read, 21040 Write, 67253 Other = 119853 Total
Read 493.12Mb  Written 328.75Mb  Total transferred 821.88Mb  (2.7396Mb/sec)
  175.33 Requests/sec executed

Test execution summary:
    total time:                          300.0024s
    total number of events:              52600
    total time taken by event execution: 257.0355
    per-request statistics:
         min:                                  0.01ms
         avg:                                  4.89ms
         max:                                181.35ms
         approx.  95 percentile:              18.45ms

Threads fairness:
    events (avg/stddev):           52600.0000/0.00
    execution time (avg/stddev):   257.0355/0.00

$ sysbench --test=fileio --file-total-size=7G cleanup

$ cd /data
$ sysbench --test=fileio --file-total-size=15G prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

128 files, 122880Kb each, 15360Mb total
Creating files for the test...
root@80476hpv162127:/data# sysbench --test=fileio --file-total-size=15G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from timer.


Extra file open flags: 0
128 files, 120Mb each
15Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  51601 Read, 34400 Write, 110080 Other = 196081 Total
Read 806.27Mb  Written 537.5Mb  Total transferred 1.3123Gb  (4.4791Mb/sec)
  286.67 Requests/sec executed

Test execution summary:
    total time:                          300.0046s
    total number of events:              86001
    total time taken by event execution: 247.3312
    per-request statistics:
         min:                                  0.01ms
         avg:                                  2.88ms
         max:                                195.32ms
         approx.  95 percentile:              13.14ms

Threads fairness:
    events (avg/stddev):           86001.0000/0.

Sur la partie système, nous avons en lecture 493.12Mb et 328.75Mb en écriture (2,74Mb/sec). C’est 70% plus rapide qu’un disque dur USB relié au banana pi. Cela sera suffisant pour la plupart des applications, mais pas forcement pour une base de données importante.

Pour la partie data, contrairement à ce que je m’attendais, les performances sont meilleures ; 806,27Mb en lecture et 537,5Mb en écriture (4,48Mb/sec), presque 3 fois plus rapide qu’un disque dur USB relié au banana pi cette fois. Si vous comptez mettre un service utilisant beaucoup d’I/O, je vous conseille de mettre les données dans /data ; quitte à créer quelques liens symboliques afin de gagner en performance.

Performance mémoire

Niveau performance mémoire, les valeurs importantes sont les 225383 ops/sec et 220.10 MB/sec.

$ sysbench --test=memory --memory-total-size=800M run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing memory operations speed test
Memory block size: 1K

Memory transfer size: 800M

Memory operations type: write
Memory scope type: global
Threads started!
Done.

Operations performed: 819200 (225383.66 ops/sec)

800.00 MB transferred (220.10 MB/sec)


Test execution summary:
    total time:                          3.6347s
    total number of events:              819200
    total time taken by event execution: 2.8060
    per-request statistics:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                 10.72ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           819200.0000/0.00
    execution time (avg/stddev):   2.8060/0.00

Les performances d’accès mémoire sont médiocres, elles sont de moitié moins que celle d’un core i7 avec DDR3. Mais concrètement, cela n’a pas d’impact dans ce cas-ci. Avec nos 1Go de RAM, on ne va pas pouvoir faire tourner des services gourmands en mémoire de toute façon. C’est donc adapté au service proposé.

Lecture/Ecriture via dd

Voici le test effectué avec un fichier de 2Go, en écriture et lecture. Attention au cache disque pour la vitesse de lecture,

$ dd if=/dev/zero of=/root/zero bs=1M count=2000 ; sleep 60 ; dd if=/dev/zero of=/data/zero bs=1M count=2000
2000+0 enregistrements lus
2000+0 enregistrements écrits
2097152000 octets (2,1 GB) copiés, 4,04273 s, 519 MB/s
2000+0 enregistrements lus
2000+0 enregistrements écrits
2097152000 octets (2,1 GB) copiés, 6,00628 s, 349 MB/s
$ dd if=/root/zero of=/dev/null bs=1M ; sleep 60 ; dd if=/data/zero of=/dev/null bs=1M

On atteint une vitesse importante pour le système  519 Mo/s en écriture et 198 Mo/s en lecture. Pour data, on obtient 349 Mo/s en écriture et 250 Mo/s en lecture. Ce qui est très remarquable pour un VPS de ce type.

Ces résultats sont contradictoires avec les tests de sysbench. Ils montrent ici qu’à court terme (10 secondes), la partition racine est plus rapide que celle des data. Les disques systèmes sont peut-être dans un SAN équipé en SSD pour le cache. Ceci serait une explication à cette incohérence.

Mais quoi qu’il en soit, les performances sont vraiment au rendez-vous sur ce point, on est sur une infrastructure qui répond aux besoins.

Apache local

Ceci est fait par un test de 1000 requêtes avec 30 connexions actives sur un Pydio 6.0.2. Pour plus de renseignement sur les options de AB, j’y ai consacré un article.

$ ab -n 1000 -c 30 http://server/pydio
Server Software:        Apache/2.2.22
Server Hostname:        94.125.162.127
Server Port:            80

Document Path:          /pydio
Document Length:        316 bytes

Concurrency Level:      30
Time taken for tests:   0.423 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      567000 bytes
HTML transferred:       316000 bytes
Requests per second:    2364.62 [#/sec] (mean)
Time per request:       12.687 [ms] (mean)
Time per request:       0.423 [ms] (mean, across all concurrent requests)
Transfer rate:          1309.32 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   1.7      2      13
Processing:     4   10   3.4      9      33
Waiting:        1    8   3.0      7      32
Total:          6   12   3.6     11      35

Percentage of the requests served within a certain time (ms)
  50%     11
  66%     12
  75%     13
  80%     14
  90%     18
  95%     21
  98%     22
  99%     23
 100%     35 (longest request)

Les temps de réponse d’Apache sont tout à fait correcte.

Apache distant

Server Software:        Apache/2.2.22
Server Hostname:        94.125.162.127
Server Port:            80

Document Path:          /pydio
Document Length:        316 bytes

Concurrency Level:      30
Time taken for tests:   4.180 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      714000 bytes
HTML transferred:       316000 bytes
Requests per second:    239.22 [#/sec] (mean)
Time per request:       125.408 [ms] (mean)
Time per request:       4.180 [ms] (mean, across all concurrent requests)
Transfer rate:          166.80 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.1      1       2
Processing:    31   99 425.2     36    4178
Waiting:       31   98 425.2     36    4178
Total:         32   99 425.3     37    4180

Percentage of the requests served within a certain time (ms)
  50%     37
  66%     40
  75%     42
  80%     45
  90%     71
  95%     96
  98%    165
  99%   3161
 100%   4180 (longest request)

 

Conclusion

Leur serveur répond correctement, on ne ressent aucune latence au niveau de la console, ce qui est vital selon moi. Je ne me vois pas perdre 10 minutes pour installer quelques malheureux paquets. Un dépôt interne est disponible, ce qui nous accélère les mises à jour.

Point intéressant, leur image Debian Wheezy est à jour dès l’installation. Je trouve que cela représente une qualité de travail de la part d’Ikoula. Et ils ont l’air d’attacher de l’importance à la sécurité. D’ailleurs ils tiennent à valider l’identité des propriétaires de leurs serveurs afin d’éviter des utilisations illicites.

Au niveau performance CPU, cela m’a un peu déçu, je m’attendais à mieux pour ce prix. Mais il faut voir comment les ressources sont partagées via Hyper-V. Lancer un stress-test sur des ressources strictement réservées par instance ne donne pas le même résultat que sur un système permettant l’overhead tant que les ressources sont disponibles comme OpenVZ.

Au niveau réseau et I/O rien à redire c’est plus que correcte pour ce prix. La stabilité, la rapidité et le temps de réponse sont au rendez-vous.

Je conclurai par conseiller ce type de serveur pour des applicatifs légers avec traitement de données et stockage comme un serveur web (dans la limite des 40Go proposés).

Un autre point à souligner pour les utilisateurs Windows Server, ils proposent une licence incluse dans leur offre. Cela peut faire une différence.