PerfUG 3 - perfs système

52
PERFUG #3 les perfs système pour les nuls 29 août 2013 v1.0 Ludovic Piot [email protected] @lpiot

Transcript of PerfUG 3 - perfs système

Page 1: PerfUG 3 - perfs système

PERFUG #3les perfs système pour les nuls

29 août 2013v1.0

Ludovic [email protected]

@lpiot

Page 2: PerfUG 3 - perfs système

AGENDA

• Introduction

• les douleurs

• Pour quoi faire ?

• Présentation des outils• CPU : openSSL / sysbench• RAM : bandwidth / sysbench• I/O : bonnie++ / iozone / sysbench• requêtes HTTP : apachebench / wrk• base de données : sysbench

Page 3: PerfUG 3 - perfs système

INTRODUCTION

Page 4: PerfUG 3 - perfs système

• APM vs. perfs unitaires des composants techniques

• Application Performance Monitoring Management(cf. http://apmblo24g.compuware.com/2013/08/21/devops-is-changing-the-m-in-apm-performance-requires-management-not-monitoring/)

• collaboration• expertise• actions préventives

• disclaimer : ce sont des perfs unitaires !pas d’extrapolation des perfs applicatives

INTRODUCTION

applica&on)

socle)technique)

système)

hyperviseur)/)matériel)

réseau)/)stockage)

Page 5: PerfUG 3 - perfs système

•maîtrise réduite des couchesbasses de l’infrastructure

• organisation des DSI ensilos de compétence• collaboration verrouillée• incompréhension du

besoin•manque d’expert

disponible

LES DOULEURS

Source : Next Generation Datacenters in Financial Services : driving extreme efficiency and effective cost savings, by Tony Bishop

Page 6: PerfUG 3 - perfs système

•maîtrise réduite del’architecture

• composants mutualisés• cloud• virtualisation

LES DOULEURS

Source : Next Generation Datacenters in Financial Services : driving extreme efficiency and effective cost savings, by Tony Bishop

Page 7: PerfUG 3 - perfs système

POUR QUOI FAIRE ?

Page 8: PerfUG 3 - perfs système

POUR QUOI FAIRE ?

• Choisir un composant technique• CPU (taille du cache, hyperthreading,

jeu d’instructions)• CIFS vs NFS• RAID matériel vs. logiciel• AWS EBS avec I/O garantis ou pas• Apache vs. Nginx vs. shortfin

Page 9: PerfUG 3 - perfs système

POUR QUOI FAIRE ?

• Tester des hypothèses de tuning• réservation de RAM en virtualisation• choix d’un filesystem (et de ses options)

• Tester des hypothèses d’architecture• load-balancing en round-robin ou en dépassement de quota• Apache devant Tomcat pour servir les fichiers statiques

Page 10: PerfUG 3 - perfs système

NUMBERS EVERYONE SHOULD KNOW

The cost of I/O(by Paolo Fragomeni)

https://medium.com/p/37a93d4e0013

L1-cache 3 cyclesL2-cache 14 cyclesRAM 250 cyclesDisk 41 000 000 cyclesNetwork 240 000 000 cycles

Numbers everyone should know(by Jeff Dean, Google)

http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/people/jeff/stanford-295-talk.pdf, page 13

L1 cache reference 0.5 nsBranch mispredict 5 nsL2 cache reference 7 nsMutex lock/unlock 100 nsMain memory reference 100 nsCompress 1K bytes with Zippy 10 000 nsSend 2K bytes over 1 Gbps network 20 000 nsRead 1 MB sequentially from memory 250 000 nsRound trip within same datacenter 500 000 nsDisk seek 10 000 000 nsRead 1 MB sequentially from network 10 000 000 nsRead 1 MB sequentially from disk 30 000 000 nsSend packet CA->Netherlands->CA 150 000 000 ns

Page 11: PerfUG 3 - perfs système

POUR QUOI FAIRE ?

•Optimiser le capacity planning(et le TCO)• CPU vs. GDU• DB physique / virtuelle, mutualisée vs. dédiée• NUMA, CPU overcommit

Page 12: PerfUG 3 - perfs système

COMMENT FAIRE ?

Page 13: PerfUG 3 - perfs système

COMMENT FAIRE ?

• Tester par comparaison…

•Outillage simple• peu intrusif• tests faciles à implémenter• tests faciles à répliquer• collecte des données facilitée• analyse des données facilitée

Page 14: PerfUG 3 - perfs système

CPU

Page 15: PerfUG 3 - perfs système

CPU - Cas d’école : chiffrement applicatif

•Question :• entre 2 processeurs donnés…• l’un disposant du jeu d’instructions AES-NI (serveur R820)• l’autre ne disposant pas de ce jeu d’instruction (serveur

R810)• dans une machine virtuelle VMware…• quelle différence de performance peut-on attendre…• sur un traitement applicatif en Java de chiffrement symétrique ?

Page 16: PerfUG 3 - perfs système

CPU - Cas d’école : chiffrement applicatif

• Traitement applicatif

Page 17: PerfUG 3 - perfs système

CPU - Cas d’école : chiffrement applicatif

• CPUs à comparer

•vendor_id : GenuineIntelcpu family : 6model : 26model name : Intel(R) Xeon(R) CPU E7540 @ 2.00GHzstepping : 4cpu MHz : 1994.994cache size : 18432 KBfpu : yesfpu_exception : yescpuid level : 11wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni ssse3 cx16 sse4_1 sse4_2 popcnt hypervisor lahf_lm idabogomips : 3989.98clflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management:

vendor_id : GenuineIntelcpu family : 6model : 37model name : Intel(R) Xeon(R) CPU E5-4610 0 @ 2.40GHzstepping : 1cpu MHz : 2399.999cache size : 15360 KBfpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm ida aratbogomips : 4799.99clflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management:

Page 18: PerfUG 3 - perfs système

CPU - Cas d’école : chiffrement applicatif

• Résultats de tirs de perf applicatifs

220,00$ms$

270,00$ms$

320,00$ms$

370,00$ms$

420,00$ms$

470,00$ms$

520,00$ms$

R810$

R820$

en moy. = +7%perc. 50 = +10%perc. 30 = +20%

Page 19: PerfUG 3 - perfs système

CPU - Cas d’école : chiffrement applicatif

• Une tendance se dégage… timidement

Page 20: PerfUG 3 - perfs système

CPU - Outil : openSSLroot@xxx:/home/lpiot/poc_crypto-1.0 # openssl speed(…)Doing aes-256 cbc for 3s on 16 size blocks: 11985663 aes-256 cbc's in 3.00sDoing aes-256 cbc for 3s on 64 size blocks: 4208819 aes-256 cbc's in 3.00sDoing aes-256 cbc for 3s on 256 size blocks: 1135478 aes-256 cbc's in 3.00sDoing aes-256 cbc for 3s on 1024 size blocks: 276032 aes-256 cbc's in 3.00sDoing aes-256 cbc for 3s on 8192 size blocks: 38026 aes-256 cbc's in 3.00s(…)OpenSSL 0.9.8j-fips 07 Jan 2009built on: Wed Jan 11 17:40:32 UTC 2012options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,4,long) aes(partial) blowfish(ptr2) compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DMD32_REG_T=int -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fomit-frame-pointer -fno-strict-aliasing -DTERMIO -Wall -fstack-protector -fprofile-use -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASMavailable timing options: TIMES TIMEB HZ=100 [sysconf value]timing function used: timesThe 'numbers' are in 1000s of bytes per second processed.type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes(…)md5 34109.60k 103963.82k 237333.50k 349442.05k 405222.74khmac(md5) 26625.30k 96095.57k 193378.38k 281552.21k 404815.87ksha1 36680.54k 105444.36k 210998.62k 325011.46k 369740.46k(…)aes-128 cbc 77020.09k 117352.21k 135510.02k 141283.33k 142879.40kaes-192 cbc 69790.14k 101752.17k 115271.42k 119376.21k 120384.17kaes-256 cbc 63923.54k 89788.14k 96894.12k 94218.92k 103836.33k(…)aes-256 ige 90340.65k 93965.35k 96967.68k 97552.38k 97957.21k sign verify sign/s verify/srsa 512 bits 0.000137s 0.000013s 7317.0 78349.9rsa 1024 bits 0.000682s 0.000038s 1466.7 26624.4rsa 2048 bits 0.004286s 0.000130s 233.3 7666.5rsa 4096 bits 0.030486s 0.000488s 32.8 2047.4 sign verify sign/s verify/sdsa 512 bits 0.000134s 0.000142s 7490.3 7039.3dsa 1024 bits 0.000375s 0.000420s 2667.3 2383.6dsa 2048 bits 0.001294s 0.001495s 772.6 668.7

Page 21: PerfUG 3 - perfs système

CPU - Outil : openSSL

• Résultats des tirs openSSL

Page 22: PerfUG 3 - perfs système

CPU - Outil : sysbench

•Déploiement• disponible dans les repositories standards• 170 ko• dépendances : libc + libmysqlclient

• Info• véritable boîte à outil : permet aussi de faire des tests sur• le scheduler (option --test=threads)• le mutex (option --test=mutex)• les accès séquentiels / aléatoires à la mémoire (option --test=memory*)• les accès séquentiels / aléatoires en I/O (option --test=fileio)• le moteur de SGBD-R mySQL (option --test=oltp)• manuel : http://sysbench.sourceforge.net/docs/

Page 23: PerfUG 3 - perfs système

CPU - Outil : sysbench

• Usage• compte utilisateur sans droit spécifique• création de nombres premiers

ubuntu@xxx:~$ sysbench --test=cpu --cpu-max-prime=20000 runsysbench 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: 125.4803s total number of events: 10000 total time taken by event execution: 125.4679 per-request statistics: min: 4.71ms avg: 12.55ms max: 149.16ms approx. 95 percentile: 112.83ms

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

Page 24: PerfUG 3 - perfs système

RAM

Page 25: PerfUG 3 - perfs système

RAM - Cas d’école : ressources virtuelles réservées

•Question :• dans une machine virtuelle VMware…• quelle différence de performance peut-on attendre…• si l’on réserve la RAM• ou si l’on reste en RAM dynamiquement allouée (ballooning)

Page 26: PerfUG 3 - perfs système

RAM - Outil : bandwidth

•Déploiement• sources disponibles sur Internet : http://home.comcast.net/~veritas/bandwidth.html• 332 ko• dépendances (pour la compilation) : make + nasm + gcc

• Info• tout automatique• permet aussi de faire des tests sur la bande passante réseau

Page 27: PerfUG 3 - perfs système

RAM - Outil : bandwidth

• Usage• compte utilisateur sans droit spécifique• usage de nice pour forcer le scheduler (droits de sudo sur nice)• produit un graphique BMP dans ./

ubuntu@xxx:~/bandwidth-0.32p$ sudo nice -n -2 ./bandwidth64 This is bandwidth version 0.32p.Copyright (C) 2005-2012 by Zack T Smith.

This software is covered by the GNU Public License.It is provided AS-IS, use at your own risk.See the file COPYING for more information.

CPU family: GenuineIntelCPU features: MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AES AVX XD Intel64

Cache 0: L1 data cache, line size 64, 8-ways, 64 sets, size 32k Cache 1: L1 instruction cache, line size 64, 8-ways, 64 sets, size 32k Cache 2: L2 unified cache, line size 64, 8-ways, 512 sets, size 256k Cache 3: L3 unified cache, line size 64, 20-ways, 16384 sets, size 20480k

Notation: B = byte, kB = 1024 B, MB = 1048576 B.

CPU speed is 1795.67 MHz.

Sequential read (128-bit), size = 128 B, loops = 2169503744, 52957.3 MB/sSequential read (128-bit), size = 256 B, loops = 1066926080, 52088.9 MB/sSequential read (128-bit), size = 384 B, loops = 722815632, 52933.6 MB/sSequential read (128-bit), size = 512 B, loops = 536608768, 52391.5 MB/s

Page 28: PerfUG 3 - perfs système

RAM - Outil : bandwidth

• Résultats sans réservation de mémoire

Page 29: PerfUG 3 - perfs système

RAM - Outil : bandwidth

• Résultats avec réservation de mémoire

Page 30: PerfUG 3 - perfs système

RAM - Outil : sysbench

•Déploiement• déjà vu

• Info• paramétrage plus fin que bandwidth• accès séquentiels / aléatoires (option --memory-access-mode={seq,rnd})• restriction aux opérations de lecture / écriture (option --memory-oper={read, write, none})

• restriction à la mémoire globale / locale au thread (option --memory-scope={global,local})

• 3 défauts• pas de test complet (il faut enchaîner les tests seq/rnd, read/write, global/local)• pas de représentation graphique fine• gros défaut : résultats donnés sous forme très synthétique

Page 31: PerfUG 3 - perfs système

RAM - Outil : sysbench

• Usage• compte utilisateur sans droit spécifique

ubuntu@xxx:~$ sysbench --test=memory runsysbench 0.4.12: multi-threaded system evaluation benchmark

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

Doing memory operations speed testMemory block size: 1K

Memory transfer size: 102400M

Memory operations type: writeMemory scope type: globalThreads started!Done.

Operations performed: 104857600 (250271.37 ops/sec)

102400.00 MB transferred (244.41 MB/sec)

Test execution summary: total time: 418.9756s total number of events: 104857600 total time taken by event execution: 317.1497 per-request statistics: min: 0.00ms avg: 0.00ms max: 24.08ms approx. 95 percentile: 0.00ms

Threads fairness: events (avg/stddev): 104857600.0000/0.00 execution time (avg/stddev): 317.1497/0.00

Page 32: PerfUG 3 - perfs système

I/O

Page 33: PerfUG 3 - perfs système

I/O - Cas d’école : choix du type de stockage EC2

•Question :• dans une machine virtuelle Amazon WS EC2…• quelle différence de performance peut-on attendre…• si l’on utilise un disque EBS standard• si l’on utilise un disque EBS avec 100 I/O réservées• si l’on utilise le disque local (RAW)

• même type de filesystem• mêmes options de filesystem

Page 34: PerfUG 3 - perfs système

I/O - Outil : bonnie++

•Déploiement• disponible dans les repositories standards• 254 ko• dépendances : libc + libgcc + libstdc++

• Info• bonnie++ permet de s’affranchir des mécanismes de buffering propres à l’OS : on obtient des

données d’I/O «pures»• -b no write buffering. fsync() after every write.• -D use direct IO (O_DIRECT) for the bulk IO tests.

Page 35: PerfUG 3 - perfs système

I/O - Outil : bonnie++

• Usage• compte utilisateur sans droit spécifique• lecture / écriture de fichiers au contenu aléatoire de taille supérieure à la RAM

ubuntu@xxx:~$ bonnie++ -d ~/bonnie/ -s 3500 -n 10:5000:2000:10 Writing a byte at a time...doneWriting intelligently...doneRewriting...doneReading a byte at a time...doneReading intelligently...donestart 'em...done...done...done...done...done...Create files in sequential order...done.Stat files in sequential order...done.Delete files in sequential order...done.Create files in random order...done.Stat files in random order...done.Delete files in random order...done.Version 1.96 ------Sequential Output------ --Sequential Input- --Random-Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CPip-10-33-137- 3500M 131 94 33126 6 27059 6 325 91 118166 13 5126 102Latency 169ms 320ms 4234ms 95407us 241ms 4340usVersion 1.96 ------Sequential Create------ --------Random Create--------ip-10-33-137-25 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 10:5000:2000/10 3894 28 +++++ +++ 13717 69 4423 29 +++++ +++ 13381 78Latency 72274us 24339us 72206us 72164us 72109us 47368us1.96,1.96,ip-10-33-137-25,1,1377459694,3500M,,131,94,33126,6,27059,6,325,91,118166,13,5126,102,10,5000,2000,,10,3894,28,+++++,+++,13717,69,4423,29,+++++,+++,13381,78,169ms,320ms,4234ms,95407us,241ms,4340us,72274us,24339us,72206us,72164us,72109us,47368us

Page 36: PerfUG 3 - perfs système

I/O - Outil : bonnie++

0"

10000"

20000"

30000"

40000"

50000"

60000"

70000"

80000"

90000"

100000"

110000"

120000"

130000"

140000"

Seq."Output"Per"Chr"K/s"

Block"K/s" Rewrite"K/s" Seq."Input"Per"Chr"K/s"

Block"K/s" Random"seeks/s" Seq."Create/s" Delete/s" Random"Create/s"

Delete/s"

bonnie_ebs_1.results"

bonnie_ebs_2.results"

bonnie_ebs_3.results"

bonnie_dedicated_io_1.results"

bonnie_dedicated_io_2.results"

bonnie_dedicated_io_3.results"

bonnie_no_ebs_1.results"

bonnie_no_ebs_2.results"

bonnie_no_ebs_3.results"

Page 37: PerfUG 3 - perfs système

I/O - Outil : bonnie++

0"

10"

20"

30"

40"

50"

60"

70"

80"

90"

100"

Seq."Output"Per"Chr"%CPU"

Block"%CPU" Rewrite"%CPU" Seq."Input"Per"Chr"%CPU"

Block"%CPU" Random"seeks"%CPU"

Seq."Create"%CPU"

Delete"%CPU" Random"Create"%CPU"

Delete"%CPU"

bonnie_ebs_1.results"

bonnie_ebs_2.results"

bonnie_ebs_3.results"

bonnie_dedicated_io_1.results"

bonnie_dedicated_io_2.results"

bonnie_dedicated_io_3.results"

bonnie_no_ebs_1.results"

bonnie_no_ebs_2.results"

bonnie_no_ebs_3.results"

Page 38: PerfUG 3 - perfs système

I/O - Outil : iozone

•Déploiement• sources disponibles sur Internet : http://www.iozone.org/• 254 ko• dépendances (pour la compilation) : make + gcc

• Info• outil ultra-complet• sait travailler en file / mmap• sait tester le direct IO• sait purger le cache processeur, le cache système• teste avec une large taille de buffers

• outil de diagnostic également• sait vérifier chaque octet pour débusquer un système I/O défectueux

Page 39: PerfUG 3 - perfs système

I/O - Outil : iozone

• Usage• compte utilisateur sans droit spécifique• lecture / écriture de fichiers au contenu aléatoire de taille supérieure à la RAMubuntu@xxx:~/PerfUG_20130829/iozone3_420/src/current$ ./iozone -Ra

Iozone: Performance Test of File I/O Version $Revision: 3.420 $ Compiled for 64 bit mode. Build: linux-AMD64

Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins (…)

Run began: Sun Aug 25 15:32:23 2013

Excel chart generation enabled Auto Mode Command line used: ./iozone -Ra Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 64 4 492717 942521 1562436 2203800 1518251 842003 1066042 1013707 1421755 913649 998622 1452528 2133730 64 8 520419 1143223 2561267 3363612 1933893 1421755 1484662 1255511 2067979 955947 1124074 1492919 3203069 64 16 608965 1492919 2892445 3165299 2379626 1070292 1421755 1734015 1526887 1083249 969761 1562436 3791156(…) 128 4 465708 990891 1778862 2202044 1579934 1015251 1243315 1085013 1455701 1123617 753179 1487977 1827299 128 8 592699 1040839 1424795 3468030 2286447 1102844 1508887 1603529 1561553 1102844 1015251 1598754 2608629

Page 40: PerfUG 3 - perfs système

I/O - Outil : iozone

4

32

256

2048

16384

0 10000 20000 30000 40000 50000 60000 70000 80000 90000

100000 110000 120000 130000 140000 150000 160000 170000 180000

64

128

256

512

1024

2048

4096

8192

1638

4

3276

8

6553

6

1310

72

2621

44

5242

88

1048

576

Record size in Kbytes

Kbytes/sec

File size in Kbytes

Write performance

170000-180000

160000-170000

150000-160000

140000-150000

130000-140000

120000-130000

110000-120000

100000-110000

90000-100000

80000-90000

70000-80000

60000-70000

50000-60000

40000-50000

30000-40000

20000-30000

10000-20000

0-10000

CPU Cache effect Memory / buffer cache

Not measured

Physical disk I/O

Kbytes/sec

http://www.iozone.org

Don Capps

Page 41: PerfUG 3 - perfs système

REQUÊTES HTTP

Page 42: PerfUG 3 - perfs système

HTTP - Cas d’école : comparaison de serveurs

•Question :• dans une même machine virtuelle VMware…• quelle différence de performance peut-on attendre…• entre différents serveurs Web• apache2• nginx• shortfin

• pour la publication de fichiers statiques ?

Page 43: PerfUG 3 - perfs système

HTTP - Outil : apachebench

•Déploiement• disponible dans les apache-utils• 55 ko• dépendances : libapr1, libaprutil1, libc6, libssl1.0.0

• Info• peut-on faire un outil plus simple et plus parlant ?

Page 44: PerfUG 3 - perfs système

HTTP - Outil : apachebench

• Usage• compte utilisateur sans droit spécifique• -c : nombre de threads simultané (i.e. utilisateurs concurrents)• -n : nombre de requêtes totales

ubuntu@xxx:~$ ab -c 200 -n 2000 http://localhost:8082/asf-logo.gifThis 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 localhost (be patient)Completed 200 requests(…)Completed 1800 requestsCompleted 2000 requestsFinished 2000 requests

Server Software: nginx/1.1.19Server Hostname: localhostServer Port: 8082

Document Path: /asf-logo.gifDocument Length: 7279 bytes

Concurrency Level: 200Time taken for tests: 1.200 secondsComplete requests: 2000Failed requests: 0

Write errors: 0Total transferred: 14982000 bytesHTML transferred: 14558000 bytesRequests per second: 1666.60 [#/sec] (mean)Time per request: 120.004 [ms] (mean)Time per request: 0.600 [ms] (mean, across all concurrent requests)Transfer rate: 12191.93 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 50 182.8 7 1022Processing: 3 64 42.7 60 685Waiting: 2 51 35.0 52 679Total: 22 114 192.3 78 1126

Percentage of the requests served within a certain time (ms) 50% 78 66% 89 75% 93 80% 96 90% 111 95% 199 98% 1117 99% 1122 100% 1126 (longest request)

Page 45: PerfUG 3 - perfs système

HTTP - Outil : apachebench

• RésultatsServer Software: Apache/2.2.22Server Port: 80(…)Concurrency Level: 200Time taken for tests: 3.897 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 15068000 bytesHTML transferred: 14558000 bytesRequests per second: 513.25 [#/sec] (mean)Time per request: 389.671 [ms] (mean)Time per request: 1.948 [ms] (mean, across all concurrent requests)Transfer rate: 3776.23 [Kbytes/sec] receiv.

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 12 15.5 4 80Processing: 14 219 689.3 86 3874Waiting: 6 205 691.3 63 3868Total: 24 232 688.4 93 3889

Percentage of the requests served within a certain time (ms) 50% 93 66% 99 75% 108 80% 125 90% 150 95% 185 98% 3882 99% 3885 100% 3889 (longest request)

Server Software: nginx/1.1.19Server Port: 8082(…)Time taken for tests: 1.200 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 14982000 bytesHTML transferred: 14558000 bytesRequests per second: 1666.60 [#/sec] (mean)Time per request: 120.004 [ms] (mean)Time per request: 0.600 [ms] (mean, across all concurrent requests)Transfer rate: 12191.93 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 50 182.8 7 1022Processing: 3 64 42.7 60 685Waiting: 2 51 35.0 52 679Total: 22 114 192.3 78 1126

Percentage of the requests served within a certain time (ms) 50% 78 66% 89 75% 93 80% 96 90% 111 95% 199 98% 1117 99% 1122 100% 1126 (longest request)

Page 46: PerfUG 3 - perfs système

HTTP - Outil : apachebench

• RésultatsServer Software: Apache/2.2.22Server Port: 80(…)Concurrency Level: 200Time taken for tests: 3.897 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 15068000 bytesHTML transferred: 14558000 bytesRequests per second: 513.25 [#/sec] (mean)Time per request: 389.671 [ms] (mean)Time per request: 1.948 [ms] (mean, across all concurrent requests)Transfer rate: 3776.23 [Kbytes/sec] receiv.

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 12 15.5 4 80Processing: 14 219 689.3 86 3874Waiting: 6 205 691.3 63 3868Total: 24 232 688.4 93 3889

Percentage of the requests served within a certain time (ms) 50% 93 66% 99 75% 108 80% 125 90% 150 95% 185 98% 3882 99% 3885 100% 3889 (longest request)

Server Software: Apache-Coyote/1.1Server Port: 8080(…)Concurrency Level: 200Time taken for tests: 5.181 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 4626000 bytesHTML transferred: 4132000 bytesRequests per second: 386.06 [#/sec] (mean)Time per request: 518.055 [ms] (mean)Time per request: 2.590 [ms] (mean, across all concurrent requests)Transfer rate: 872.03 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 75 245.6 0 1040Processing: 8 225 494.1 147 4161Waiting: 5 212 494.4 144 4157Total: 8 300 659.0 154 5161

Percentage of the requests served within a certain time (ms) 50% 154 66% 183 75% 193 80% 205 90% 240 95% 1152 98% 2429 99% 5156 100% 5161 (longest request)

Page 47: PerfUG 3 - perfs système

HTTP - Outil : apachebench

• RésultatsServer Software: Apache/2.2.22Server Port: 80(…)Concurrency Level: 200Time taken for tests: 3.897 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 15068000 bytesHTML transferred: 14558000 bytesRequests per second: 513.25 [#/sec] (mean)Time per request: 389.671 [ms] (mean)Time per request: 1.948 [ms] (mean, across all concurrent requests)Transfer rate: 3776.23 [Kbytes/sec] receiv.

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 12 15.5 4 80Processing: 14 219 689.3 86 3874Waiting: 6 205 691.3 63 3868Total: 24 232 688.4 93 3889

Percentage of the requests served within a certain time (ms) 50% 93 66% 99 75% 108 80% 125 90% 150 95% 185 98% 3882 99% 3885 100% 3889 (longest request)

Server Software: shortfin/0.9.5Server Port: 8081(…)Concurrency Level: 200Time taken for tests: 11.675 secondsComplete requests: 2000Failed requests: 0Write errors: 0Total transferred: 14738000 bytesHTML transferred: 14558000 bytesRequests per second: 171.31 [#/sec] (mean)Time per request: 1167.470 [ms] (mean)Time per request: 5.837 [ms] (mean, across all concurrent requests)Transfer rate: 1232.80 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 16 18.7 8 78Processing: 960 1122 265.3 1061 2070Waiting: 2 56 39.2 50 220Total: 975 1138 269.7 1066 2117

Percentage of the requests served within a certain time (ms) 50% 1066 66% 1078 75% 1103 80% 1116 90% 1150 95% 2073 98% 2117 99% 2117

Page 48: PerfUG 3 - perfs système

HTTP - Outil : wrk

•Déploiement• disponible sur GitHub : https://github.com/wg/wrk• 55 ko• dépendances (à la compilation) : libssl-dev

• Info• similaire à apachebench

• Usage• compte utilisateur sans droit spécifique• -t : nombre de threads simultané (i.e. utilisateurs concurrents)• -c : nombre de connexions ouvertes simultanées• -d : durée du test

Page 49: PerfUG 3 - perfs système

HTTP - Outil : wrk

• Résultatsubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master$ ./wrk -t12 -c400 -d30s http://localhost:80/asf-logo.gif # ApacheRunning 30s test @ http://localhost:80/asf-logo.gif 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 17.02s 7.64s 28.51s 61.51% Req/Sec 229.50 571.66 7.11k 93.15% 71474 requests in 30.04s, 512.26MB read Socket errors: connect 0, read 99, write 0, timeout 2995Requests/sec: 2379.20Transfer/sec: 17.05MB

ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master$ ./wrk -t12 -c400 -d30s http://localhost:8081/asf-logo.gif # shortfinRunning 30s test @ http://localhost:8081/asf-logo.gif 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 166.15ms 107.50ms 5.74s 99.77% Req/Sec 198.99 35.27 301.00 72.18% 71568 requests in 30.13s, 502.95MB read Socket errors: connect 0, read 52, write 0, timeout 56Requests/sec: 2375.37Transfer/sec: 16.69MB

ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master$ ./wrk -t12 -c400 -d30s http://localhost:8080/asf-logo.gif # TomcatRunning 30s test @ http://localhost:8080/asf-logo.gif 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 454.81ms 1.06s 24.04s 94.18% Req/Sec 50.56 15.17 103.00 73.15% 17324 requests in 30.07s, 18.90MB read Socket errors: connect 0, read 37, write 0, timeout 1803 Non-2xx or 3xx responses: 17324Requests/sec: 576.12

ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master$ ./wrk -t12 -c400 -d30s http://localhost:8082/asf-logo.gif # nginxRunning 30s test @ http://localhost:8082/asf-logo.gif 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 758.08ms 182.88ms 849.17ms 93.11% Req/Sec 437.60 0.86k 8.33k 93.22% 126041 requests in 30.03s, 0.88GB readRequests/sec: 4197.24Transfer/sec: 30.00MB

Page 50: PerfUG 3 - perfs système

REQUÊTES MYSQL

Page 51: PerfUG 3 - perfs système

DB - Outil : sysbench

•Déploiement• déjà vu

• Info• permet de bencher une instance de base de données• crée une table et un jeu de données• passe des requêtes de différentes natures et produit des restitutions

SELECT c FROM sbtest WHERE id=NSELECT c FROM sbtest WHERE id BETWEEN N AND M SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and MSELECT c FROM sbtest WHERE id between N and M ORDER BY cSELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c

UPDATEs on index / non-index column:UPDATE sbtest SET k=k+1 WHERE id=N UPDATE sbtest SET c=N WHERE id=M

DELETE FROM sbtest WHERE id=N INSERT INTO sbtest VALUES (...)

Page 52: PerfUG 3 - perfs système

QUESTIONS ?