195 lines
6.7 KiB
Markdown
195 lines
6.7 KiB
Markdown
# Howto Benchmarks
|
|
|
|
**ATTENTION, CES TESTS NE DOIVENT PAS ÊTRE EFFECTUÉS SUR UN SERVEUR EN PRODUCTION**
|
|
|
|
## Tests sur les performances du disque
|
|
|
|
### dd
|
|
|
|
On essaye plus ou moins de désactiver le cache mémoire pour l'écriture du filesystem
|
|
(en fait, le cache mémoire se remplit quand même pour optimiser une éventuelle lecture !) :
|
|
|
|
~~~
|
|
# echo 3 > /proc/sys/vm/drop_caches
|
|
# sysctl -w vm.dirty_background_ratio=0
|
|
# sysctl -w vm.dirty_ratio=0
|
|
~~~
|
|
|
|
Note importante : ces paramètres sont à activer avec précaution : ils peuvent dégrader les performances...
|
|
même pour les tests (en provoquant une sorte de yoyo en terme de vitesse d'accès). L'idéal est de tester via
|
|
un volume beaucoup plus grand que le taille de la mémoire du serveur.
|
|
|
|
Performances en écriture :
|
|
|
|
Un test simple est d'écrire un très gros fichier via la commande _dd_.
|
|
|
|
~~~
|
|
# time dd if=/dev/zero bs=4096 count=52398080 2>/tmp/out | pv > 200G ; cat /tmp/out
|
|
200GB 0:24:40 [ 138MB/s] [ <=> ]
|
|
|
|
real 24m40.378s
|
|
user 0m35.902s
|
|
sys 11m17.146s
|
|
52398080+0 records in
|
|
52398080+0 records out
|
|
214622535680 bytes (215 GB) copied, 1480.38 s, 145 MB/s
|
|
~~~
|
|
|
|
Note : la combinaison des options bs/count n'a apparemment que peu d'influence sur les résultats.
|
|
|
|
Et en lecture :
|
|
|
|
~~~
|
|
# echo 2 > /proc/sys/vm/drop_caches
|
|
# time dd if=200G bs=4096 count=52398080 2>/tmp/out | pv > /dev/null ; cat /tmp/out
|
|
200GB 0:09:13 [ 370MB/s] [ <=> ]
|
|
|
|
real 9m13.131s
|
|
user 0m39.322s
|
|
sys 9m6.602s
|
|
52398080+0 records in
|
|
52398080+0 records out
|
|
214622535680 bytes (215 GB) copied, 553.056 s, 388 MB/s
|
|
~~~
|
|
|
|
Et en effacement :
|
|
|
|
~~~
|
|
# time rm /home/32gb
|
|
|
|
~~~
|
|
|
|
### cryptsetup
|
|
|
|
~~~
|
|
# cryptsetup benchmark
|
|
# Tests are approximate using memory only (no storage IO).
|
|
PBKDF2-sha1 1024000 iterations per second
|
|
PBKDF2-sha256 668734 iterations per second
|
|
PBKDF2-sha512 344926 iterations per second
|
|
PBKDF2-ripemd160 624152 iterations per second
|
|
PBKDF2-whirlpool 182044 iterations per second
|
|
# Algorithm | Key | Encryption | Decryption
|
|
aes-cbc 128b 506.0 MiB/s 2019.3 MiB/s
|
|
serpent-cbc 128b 78.3 MiB/s 272.1 MiB/s
|
|
twofish-cbc 128b 166.4 MiB/s 321.7 MiB/s
|
|
aes-cbc 256b 405.2 MiB/s 1497.9 MiB/s
|
|
serpent-cbc 256b 81.7 MiB/s 272.2 MiB/s
|
|
twofish-cbc 256b 169.5 MiB/s 321.5 MiB/s
|
|
aes-xts 256b 1684.1 MiB/s 1688.8 MiB/s
|
|
serpent-xts 256b 279.3 MiB/s 268.1 MiB/s
|
|
twofish-xts 256b 311.6 MiB/s 317.7 MiB/s
|
|
aes-xts 512b 1304.0 MiB/s 1304.6 MiB/s
|
|
serpent-xts 512b 280.2 MiB/s 268.3 MiB/s
|
|
twofish-xts 512b 315.6 MiB/s 317.7 MiB/s
|
|
~~~
|
|
|
|
### Bonnie++
|
|
|
|
Bonnie++ est un utilitaire qui permet de faire un bench sur les disques en écrite/lecture de façon différente, par bloc, et par en mode « random ».
|
|
|
|
Une bonne explication : <http://www.googlux.com/bonnie.html>
|
|
|
|
Un exemple qui test le disque avec un fichier de 6Go ` bonnie++ -d ./ -s 6144`:
|
|
|
|
~~~
|
|
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
|
|
client 6G 607 99 50366 13 22989 4 2738 92 57663 7 109.1 5
|
|
Latency 30503us 736ms 496ms 41723us 52395us 841ms
|
|
Version 1.96 ------Sequential Create------ --------Random Create--------
|
|
client -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
|
|
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
|
|
16 20037 41 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
|
|
Latency 21643us 2840us 4224us 1399us 481us 2791us
|
|
~~~
|
|
|
|
### iozone
|
|
|
|
~~~
|
|
$ iozone -T -t 4 -s 16g -r 256k -T -I -i0 -i1 -i2
|
|
~~~
|
|
|
|
Crée 4 threads, dont chacun écrit et lit dans un fichier de 16Go, avec un buffer de 256Ko, utilisant O_DIRECT, pour désactiver le cache.
|
|
|
|
~~~
|
|
$ iozone -a -I -b test.ods
|
|
~~~
|
|
|
|
Fais tout les tests iozone en désactivant le cache, et en créant en fichier ODS pour faire un graphique des résultats, exemple :
|
|
|
|
### pg_test_fsync
|
|
|
|
~~~
|
|
# aptitude install postgresql-contrib
|
|
~~~
|
|
|
|
~~~
|
|
$ usr/lib/postgresql/9.2/bin/pg_test_fsync
|
|
2000 operations per test
|
|
O_DIRECT supported on this platform for open_datasync and open_sync.
|
|
|
|
Compare file sync methods using one 8kB write:
|
|
(in wal_sync_method preference order, except fdatasync is Linux's default)
|
|
open_datasync n/a
|
|
fdatasync 3806.232 ops/sec
|
|
fsync 3096.090 ops/sec
|
|
fsync_writethrough n/a
|
|
open_sync 3523.832 ops/sec
|
|
|
|
Compare file sync methods using two 8kB writes:
|
|
(in wal_sync_method preference order, except fdatasync is Linux's default)
|
|
open_datasync n/a
|
|
fdatasync 2974.951 ops/sec
|
|
fsync 2238.596 ops/sec
|
|
fsync_writethrough n/a
|
|
open_sync 1777.819 ops/sec
|
|
|
|
Compare open_sync with different write sizes:
|
|
(This is designed to compare the cost of writing 16kB in different write open_sync sizes.)
|
|
16kB open_sync write 3608.877 ops/sec
|
|
8kB open_sync writes 2009.499 ops/sec
|
|
4kB open_sync writes 1238.880 ops/sec
|
|
2kB open_sync writes 135.783 ops/sec
|
|
1kB open_sync writes 67.377 ops/sec
|
|
|
|
Test if fsync on non-write file descriptor is honored:
|
|
(If the times are similar, fsync() can sync data written on a different descriptor.)
|
|
write, fsync, close 2962.546 ops/sec
|
|
write, close, fsync 3015.991 ops/sec
|
|
|
|
Non-Sync'ed 8kB writes:
|
|
write 376151.965 ops/sec
|
|
~~~
|
|
|
|
### fio
|
|
|
|
<https://github.com/axboe/fio>
|
|
/!\ Attention on fait les tests sur le disque, sans partition ou FS. /!\
|
|
|
|
~~~
|
|
Read bandwidth:
|
|
fio --direct=1 --rw=randread --bs=1m \
|
|
--size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1
|
|
|
|
Read IOPS:
|
|
fio --direct=1 --rw=randread --bs=4k \
|
|
--size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1
|
|
|
|
Write bandwidth:
|
|
fio --direct=1 --rw=randwrite --bs=1m \
|
|
--size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1
|
|
|
|
Write IOPS:
|
|
fio --direct=1 --rw=randwrite --bs=4k \
|
|
--size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1
|
|
|
|
|
|
read : io=1859.1MB, bw=190420KB/s, iops=47604 , runt= 10002msec
|
|
write: io=956556KB, bw=95627KB/s, iops=23906 , runt= 10003msec
|
|
|
|
read : io=2632.0MB, bw=268952KB/s, iops=262 , runt= 10021msec
|
|
write: io=2258.0MB, bw=230827KB/s, iops=225 , runt= 10017msec
|
|
~~~
|