Sébastien Han

Stacker! Cepher! What's next?

Benchmark rapides sur un serveur

Avant la mise en production il est indispensable de faire des benchmarks des différents services fonctionnants sur la machine. Voici ici quelques outils pour faire des tests de charge/performance rapides de votre infrastructure. Nous nous focaliserons sur les serveurs web. Les outils présentés ici ne sont en aucun cas suffisant pour de bon test pré-prod mais utiles pour un premier jet !

I. Benchmark machine physique

Les tests présentés ci-dessous ont été effectués sur un Cloud server de chez Rackspace sous la distribution Debian Squeeze.

I.1. Performances en écriture

Pour cela nous allons simplement utiliser 2 commandes natives sous Linux:

  • time
  • dd
root@server:~# time dd if=/dev/zero of=32gb bs=1024k count=16384
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB) copied, 127.562 s, 269 MB/s
real 2m7.566s
user 0m0.020s
sys 1m25.710s

I.2. Performances en lecture

root@server:~# time dd if=16gb of=/dev/null bs=1024k count=16384
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB) copied, 152.927 s, 425 MB/s
real 1m32.975s
user 0m0.020s
sys 0m31.880s

I.3. Performances en effacement

root@server:~# time rm 16gb
real 0m1.667s
user 0m0.000s
sys 0m1.510s

I.4. Performances des I/O

Ici on utilise un script Python de Benjamin Schweizer. Merci à lui. On télécharge le script et on l’exécute:

root@server:~# wget http://benjamin-schweizer.de/files/iops/iops-2011-02-11
root@server:~# chmod +x iops-2011-02-11
root@server:~# python iostest.py /dev/sda1 10
/dev/sda1, 163.21 GB:
512 B blocks: 113.8 IOs/s, 56.9 KiB/s (466.0 kbit/s)
1 KiB blocks: 111.3 IOs/s, 111.3 KiB/s (911.7 kbit/s)
2 KiB blocks: 94.7 IOs/s, 189.4 KiB/s ( 1.6 Mbit/s)
4 KiB blocks: 91.9 IOs/s, 367.5 KiB/s ( 3.0 Mbit/s)
8 KiB blocks: 94.3 IOs/s, 754.5 KiB/s ( 6.2 Mbit/s)
16 KiB blocks: 80.5 IOs/s, 1.3 MiB/s ( 10.6 Mbit/s)
32 KiB blocks: 62.3 IOs/s, 1.9 MiB/s ( 16.3 Mbit/s)
64 KiB blocks: 55.2 IOs/s, 3.4 MiB/s ( 28.9 Mbit/s)
128 KiB blocks: 36.0 IOs/s, 4.5 MiB/s ( 37.7 Mbit/s)
256 KiB blocks: 36.8 IOs/s, 9.2 MiB/s ( 77.1 Mbit/s)
512 KiB blocks: 28.9 IOs/s, 14.4 MiB/s (121.1 Mbit/s)
1 MiB blocks: 26.8 IOs/s, 26.8 MiB/s (225.2 Mbit/s)
2 MiB blocks: 23.4 IOs/s, 46.9 MiB/s (393.2 Mbit/s)
4 MiB blocks: 18.9 IOs/s, 75.5 MiB/s (633.7 Mbit/s)
8 MiB blocks: 13.3 IOs/s, 106.0 MiB/s (889.5 Mbit/s)
16 MiB blocks: 9.3 IOs/s, 148.9 MiB/s ( 1.2 Gbit/s)
32 MiB blocks: 5.2 IOs/s, 165.7 MiB/s ( 1.4 Gbit/s)
64 MiB blocks: 2.8 IOs/s, 181.2 MiB/s ( 1.5 Gbit/s)
128 MiB blocks: 1.6 IOs/s, 199.6 MiB/s ( 1.7 Gbit/s)
256 MiB blocks: 0.7 IOs/s, 188.9 MiB/s ( 1.6 Gbit/s)

II. Benchmark serveur Web

II.1. Siège

###II.1.1. Installation

Rien de nouveau:

root@server:~# apt-get install siege

###II.1.2. Let’s bench!

root@server:~# siege -d1 -r300 -c100 http://50-57-47-119.static.cloud-ips.com./index.php
Transactions: 29864 hits
Availability: 99.55 %
Elapsed time: 332.41 secs
Data transferred: 243.96 MB
Response time: 0.45 secs
Transaction rate: 89.84 trans/sec
Throughput: 0.73 MB/sec
Concurrency: 40.01
Successful transactions: 29864
Failed transactions: 136
Longest transaction: 21.20
Shortest transaction: 0.16

Détail des options utilisées:

  • -d , interval entre chaque requêtes utilisateurs en seconde
  • -r , nombre de requêtes envoyées
  • -c , nombre d’utilisateurs simultanés

II.2. Apache Bench

###II.2.1. Installation

AB vient avec le package apache-utils, une dépendance d’Apache. Si Apache n’est pas installé:

root@server:~# apt-get install apache2-utils

###II.2.2. Let’s bench!

root@server:~# ab -n5000 -c50 http://50-57-47-119.static.cloud-ips.com.:80/
This is ApacheBench, Version 2.3 -$Revision: 655654
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 50-57-47-119.static.cloud-ips.com. (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software: Varnish
Server Hostname: 50-57-47-119.static.cloud-ips.com.
Server Port: 80

Document Path: /
Document Length: 0 bytes

Concurrency Level: 50
Time taken for tests: 272.637 seconds
Complete requests: 5000
Failed requests: 0
Write errors: 0
Non-2xx responses: 5000
Total transferred: 3160000 bytes
HTML transferred: 0 bytes
Requests per second: 18.34 [#/sec] (mean)
Time per request: 2726.371 [ms] (mean)
Time per request: 54.527 [ms] (mean, across all concurrent requests)
Transfer rate: 11.32 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 40 44 0.2 44 51
Processing: 263 2677 194.4 2673 3925
Waiting: 263 2677 194.4 2673 3925
Total: 307 2721 194.4 2717 3969

Percentage of the requests served within a certain time (ms)
50% 2717
66% 2757
75% 2786
80% 2803
90% 2863
95% 2931
98% 3127
99% 3371
100% 3969 (longest request)

Détail des options utilisées:

  • -n , nombre total de requêtes envoyées
  • -c , nombre de requêtes envoyées en parallèle

Ces petits outils peuvent bien aider pour nous offrir quelque indicateurs, ils ne sont en revanche absolument pas suffisant pour décider d’une mise en production. On se tournera dans ce cas là vers des sites spécialisés comme loadimpact.com ou blitz.io, on pourra encore utiliser J-Meter pour bien bencher sa plateforme.

Comments