Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PerfUG-3 - les perfs système pour les nuls

PerfUG-3 - les perfs système pour les nuls

Ludovic Piot

August 29, 2013
Tweet

More Decks by Ludovic Piot

Other Decks in Technology

Transcript

  1. 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
  2. • 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)
  3. • maîtrise réduite des couches basses de l’infrastructure • organisation

    des DSI en silos 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
  4. • maîtrise réduite de l’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
  5. 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
  6. 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
  7. NUMBERS EVERYONE SHOULD KNOW The cost of I/O (by Paolo

    Fragomeni) https://medium.com/p/37a93d4e0013 L1-cache 3 cycles L2-cache 14 cycles RAM 250 cycles Disk 41 000 000 cycles Network 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 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 100 ns Main memory reference 100 ns Compress 1K bytes with Zippy 10 000 ns Send 2K bytes over 1 Gbps network 20 000 ns Read 1 MB sequentially from memory 250 000 ns Round trip within same datacenter 500 000 ns Disk seek 10 000 000 ns Read 1 MB sequentially from network 10 000 000 ns Read 1 MB sequentially from disk 30 000 000 ns Send packet CA->Netherlands->CA 150 000 000 ns
  8. 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
  9. 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
  10. CPU

  11. 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 ?
  12. CPU - Cas d’école : chiffrement applicatif • CPUs à

    comparer • vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU E7540 @ 2.00GHz stepping : 4 cpu MHz : 1994.994 cache size : 18432 KB fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : 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 ida bogomips : 3989.98 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: vendor_id : GenuineIntel cpu family : 6 model : 37 model name : Intel(R) Xeon(R) CPU E5-4610 0 @ 2.40GHz stepping : 1 cpu MHz : 2399.999 cache size : 15360 KB fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : 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 arat bogomips : 4799.99 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
  13. 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%
  14. CPU - Outil : openSSL root@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.00s Doing aes-256 cbc for 3s on 64 size blocks: 4208819 aes-256 cbc's in 3.00s Doing aes-256 cbc for 3s on 256 size blocks: 1135478 aes-256 cbc's in 3.00s Doing aes-256 cbc for 3s on 1024 size blocks: 276032 aes-256 cbc's in 3.00s Doing aes-256 cbc for 3s on 8192 size blocks: 38026 aes-256 cbc's in 3.00s (…) OpenSSL 0.9.8j-fips 07 Jan 2009 built on: Wed Jan 11 17:40:32 UTC 2012 options: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_ASM available timing options: TIMES TIMEB HZ=100 [sysconf value] timing function used: times The '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.74k hmac(md5) 26625.30k 96095.57k 193378.38k 281552.21k 404815.87k sha1 36680.54k 105444.36k 210998.62k 325011.46k 369740.46k (…) aes-128 cbc 77020.09k 117352.21k 135510.02k 141283.33k 142879.40k aes-192 cbc 69790.14k 101752.17k 115271.42k 119376.21k 120384.17k aes-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/s rsa 512 bits 0.000137s 0.000013s 7317.0 78349.9 rsa 1024 bits 0.000682s 0.000038s 1466.7 26624.4 rsa 2048 bits 0.004286s 0.000130s 233.3 7666.5 rsa 4096 bits 0.030486s 0.000488s 32.8 2047.4 sign verify sign/s verify/s dsa 512 bits 0.000134s 0.000142s 7490.3 7039.3 dsa 1024 bits 0.000375s 0.000420s 2667.3 2383.6 dsa 2048 bits 0.001294s 0.001495s 772.6 668.7
  15. 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/
  16. CPU - Outil : sysbench • Usage • compte utilisateur

    sans droit spécifique • création de nombres premiers ubuntu@xxx:~$ sysbench --test=cpu --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: 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
  17. RAM

  18. 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)
  19. 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
  20. 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: GenuineIntel CPU 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/s Sequential read (128-bit), size = 256 B, loops = 1066926080, 52088.9 MB/s Sequential read (128-bit), size = 384 B, loops = 722815632, 52933.6 MB/s Sequential read (128-bit), size = 512 B, loops = 536608768, 52391.5 MB/s
  21. 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
  22. RAM - Outil : sysbench • Usage • compte utilisateur

    sans droit spécifique ubuntu@xxx:~$ sysbench --test=memory 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: 102400M Memory operations type: write Memory scope type: global Threads 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
  23. I/O

  24. 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
  25. 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.
  26. 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...done Writing intelligently...done Rewriting...done Reading a byte at a time...done Reading intelligently...done start '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 %CP ip-10-33-137- 3500M 131 94 33126 6 27059 6 325 91 118166 13 5126 102 Latency 169ms 320ms 4234ms 95407us 241ms 4340us Version 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 78 Latency 72274us 24339us 72206us 72164us 72109us 47368us 1.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
  27. 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"
  28. 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"
  29. 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
  30. I/O - Outil : iozone • Usage • compte utilisateur

    sans droit spécifique • lecture / écriture de fichiers au contenu aléatoire de taille supérieure à la RAM ubuntu@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
  31. 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 16384 32768 65536 131072 262144 524288 1048576 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
  32. 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 ?
  33. 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 ?
  34. 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.gif 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 localhost (be patient) Completed 200 requests (…) Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: nginx/1.1.19 Server Hostname: localhost Server Port: 8082 Document Path: /asf-logo.gif Document Length: 7279 bytes Concurrency Level: 200 Time taken for tests: 1.200 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 14982000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 50 182.8 7 1022 Processing: 3 64 42.7 60 685 Waiting: 2 51 35.0 52 679 Total: 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)
  35. HTTP - Outil : apachebench • Résultats Server Software: Apache/2.2.22

    Server Port: 80 (…) Concurrency Level: 200 Time taken for tests: 3.897 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 15068000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 12 15.5 4 80 Processing: 14 219 689.3 86 3874 Waiting: 6 205 691.3 63 3868 Total: 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.19 Server Port: 8082 (…) Time taken for tests: 1.200 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 14982000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 50 182.8 7 1022 Processing: 3 64 42.7 60 685 Waiting: 2 51 35.0 52 679 Total: 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)
  36. HTTP - Outil : apachebench • Résultats Server Software: Apache/2.2.22

    Server Port: 80 (…) Concurrency Level: 200 Time taken for tests: 3.897 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 15068000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 12 15.5 4 80 Processing: 14 219 689.3 86 3874 Waiting: 6 205 691.3 63 3868 Total: 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.1 Server Port: 8080 (…) Concurrency Level: 200 Time taken for tests: 5.181 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 4626000 bytes HTML transferred: 4132000 bytes Requests 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 max Connect: 0 75 245.6 0 1040 Processing: 8 225 494.1 147 4161 Waiting: 5 212 494.4 144 4157 Total: 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)
  37. HTTP - Outil : apachebench • Résultats Server Software: Apache/2.2.22

    Server Port: 80 (…) Concurrency Level: 200 Time taken for tests: 3.897 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 15068000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 12 15.5 4 80 Processing: 14 219 689.3 86 3874 Waiting: 6 205 691.3 63 3868 Total: 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.5 Server Port: 8081 (…) Concurrency Level: 200 Time taken for tests: 11.675 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Total transferred: 14738000 bytes HTML transferred: 14558000 bytes Requests 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 max Connect: 0 16 18.7 8 78 Processing: 960 1122 265.3 1061 2070 Waiting: 2 56 39.2 50 220 Total: 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
  38. 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
  39. HTTP - Outil : wrk • Résultats ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master $ ./wrk

    -t12 -c400 -d30s http://localhost:80/asf- logo.gif # Apache Running 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 2995 Requests/sec: 2379.20 Transfer/sec: 17.05MB ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master $ ./wrk -t12 -c400 -d30s http://localhost:8081/asf- logo.gif # shortfin Running 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 56 Requests/sec: 2375.37 Transfer/sec: 16.69MB ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master $ ./wrk -t12 -c400 -d30s http://localhost:8080/asf- logo.gif # Tomcat Running 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: 17324 Requests/sec: 576.12 ubuntu@ip-10-33-173-90:~/PerfUG_20130829/wrk-master $ ./wrk -t12 -c400 -d30s http://localhost:8082/asf- logo.gif # nginx Running 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 read Requests/sec: 4197.24 Transfer/sec: 30.00MB
  40. 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=N SELECT c FROM sbtest WHERE id BETWEEN N AND M SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M SELECT c FROM sbtest WHERE id between N and M ORDER BY c SELECT 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 (...)