URL: https://linuxfr.org/users/herve_02/journaux/benchmark-pour-le-fun Title: benchmark pour le fun Authors: hervé Couvelard Date: 2014年03月19日T22:42:31+01:00 License: CC By-SA Tags: benchmark Score: 7 Pour raconter ma life, je reprends le code d'un vieux rpg en php pour faire un truc pour mes gamins, j'ajoute quelques modifs, surtout des images pour le moment. Globalement le truc se passe sur une "carte" de 500x500 cases et on se déplace, faisant des rencontres aléatoires. Mais c'est un pee brut et je veux ajouter des images, donc un "fond de carte" et lorsqu'on arrive sur une "case" il s'affiche une image, juste pour meubler l'écran. Je refuse directement l'image aléatoire et choisi un truc que j'ai vu ailleurs : une "matrice" de caractères avec chaque caractère différent étant une image, par exemple `OOOOOOOO.O` `OOOO11O.OO` `OOO111.OOO` `OOOO..OOOO` `OO..OOOOOO` avec O étant l'herbe, 1 la montagne et . de l'eau, par exemple. Ensuite j'ai juste à afficher l'image correspondante au paysage. Il faut bien entendu générer cette matrice" mais c'est un autre problème. La question que je me posais est : fichier texte ou base de donnée ? j'ai bien tenté de venir poser la question ici, dans un forum mais je connaissais déjà la réponse des chafouins : fais un benchmark.. dont acte. Pour que vous puissiez le reproduire chez vous, voila mes outils : # la création des matrices de 500 zeros. ## fichier php ```php '); ?> ``` ensuite un **php make_fichier.php> fichier.php** donne> ## pour la base de donnée **mysql> create table bench (id int not null primary key, data text(500));** ```php ``` ensuite un **php make_fichier.php> fichier.sql** donne> insert into bench values(0,'000... (500) ...000'); insert into bench values(1,'000... (500) ...000'); insert into bench values(2,'000... (500) ...000'); (......) insert into bench values(499,'000... (500) ...000'); que l'on insère par **mysql> .\ fichier.sql** # Le script de bench ## avec le fichier "texte" (php) ```php ``` on le lance avec : **strace -c -Ttt php bench.php**> benchmarck include php ==================== 512 kilobytes 00.. (500) ..00 1024 kilobytes ----------------------------- % time seconds usecs/call calls errors syscall ------ ----------- ----------- 100.00 0.000098 1 137 mmap2 0.00 0.000000 0 63 read 0.00 0.000000 0 252 write 0.00 0.000000 0 143 67 open 0.00 0.000000 0 81 close 0.00 0.000000 0 1 execve 0.00 0.000000 0 3 time 0.00 0.000000 0 40 39 access 0.00 0.000000 0 17 brk 0.00 0.000000 0 8 8 ioctl 0.00 0.000000 0 1 gettimeofday 0.00 0.000000 0 2 readlink 0.00 0.000000 0 50 munmap 0.00 0.000000 0 1 clone 0.00 0.000000 0 1 uname 0.00 0.000000 0 21 mprotect 0.00 0.000000 0 12 3 _llseek 0.00 0.000000 0 5 rt_sigaction 0.00 0.000000 0 2 rt_sigprocmask 0.00 0.000000 0 3 getcwd 0.00 0.000000 0 1 getrlimit 0.00 0.000000 0 70 55 stat64 0.00 0.000000 0 19 2 lstat64 0.00 0.000000 0 81 fstat64 0.00 0.000000 0 4 getdents64 0.00 0.000000 0 4 1 futex 0.00 0.000000 0 1 set_thread_area 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 2 socket 0.00 0.000000 0 2 2 connect ------ ----------- ----------- 100.00 0.000098 1029 177 total donc le fichier texte consomme 512 Ko de mémoire en plus que le simple executable php. et un **time php bench.php** donne> real 0m0.025s user 0m0.008s sys 0m0.016s ## php et mysql ```php ``` **trace -c -Ttt php bench.php**> benchmarck mysql_php==================== 512 kilobytes 000.. (500)... O0 512 kilobytes % time seconds usecs/call calls errors syscall ----------- ----------- ----- 56.87 0.000236 1 316 read 43.13 0.000179 0 503 write 0.00 0.000000 0 143 67 open 0.00 0.000000 0 82 close 0.00 0.000000 0 1 execve 0.00 0.000000 0 2 time 0.00 0.000000 0 40 39 access 0.00 0.000000 0 14 brk 0.00 0.000000 0 8 8 ioct 0.00 0.000000 0 1 gettimeofday 0.00 0.000000 0 2 readlink 0.00 0.000000 0 49 munmap 0.00 0.000000 0 1 clone 0.00 0.000000 0 1 uname 0.00 0.000000 0 21 mprotect 0.00 0.000000 0 12 3 _llseek 0.00 0.000000 0 251 poll 0.00 0.000000 0 7 rt_sigaction 0.00 0.000000 0 2 rt_sigprocmask 0.00 0.000000 0 2 getcwd 0.00 0.000000 0 1 getrlimit 0.00 0.000000 0 136 mmap2 0.00 0.000000 0 71 55 stat64 0.00 0.000000 0 18 2 lstat64 0.00 0.000000 0 78 fstat64 0.00 0.000000 0 4 getdents64 0.00 0.000000 0 5 fcntl64 0.00 0.000000 0 5 1 futex 0.00 0.000000 0 1 set_thread_area 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 3 socket 0.00 0.000000 0 3 2 connect 0.00 0.000000 0 1 shutdown 0.00 0.000000 0 4 1 setsockopt ------ ----------- ----------- 100.00 0.000415 1790 178 total **time php bench.php**> real 0m0.035s user 0m0.012s sys 0m0.012s ## php et mysql par mysqli ```php ``` ***strace -c -Ttt php bench.php***> benchmarck mysqli_php==================== 512 kilobytes 00... (500) ...O0 512 kilobytes % time seconds usecs/call calls errors syscall ------ ----------- ----------- 27.17 0.000097 1 143 67 open 26.05 0.000093 0 314 read 21.01 0.000075 2 40 39 access 13.73 0.000049 1 71 55 stat64 12.04 0.000043 0 501 write 0.00 0.000000 0 82 close 0.00 0.000000 0 1 execve 0.00 0.000000 0 2 time 0.00 0.000000 0 14 brk 0.00 0.000000 0 8 8 ioctl 0.00 0.000000 0 1 gettimeofday 0.00 0.000000 0 2 readlink 0.00 0.000000 0 49 munmap 0.00 0.000000 0 1 clone 0.00 0.000000 0 1 uname 0.00 0.000000 0 21 mprotect 0.00 0.000000 0 12 3 _llseek 0.00 0.000000 0 248 poll 0.00 0.000000 0 5 rt_sigaction 0.00 0.000000 0 2 rt_sigprocmask 0.00 0.000000 0 2 getcwd 0.00 0.000000 0 1 getrlimit 0.00 0.000000 0 136 mmap2 0.00 0.000000 0 18 2 lstat64 0.00 0.000000 0 78 fstat64 0.00 0.000000 0 4 getdents64 0.00 0.000000 0 2 fcntl64 0.00 0.000000 0 5 1 futex 0.00 0.000000 0 1 set_thread_area 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 3 socket 0.00 0.000000 0 3 2 connect 0.00 0.000000 0 1 shutdown 0.00 0.000000 0 4 1 setsockopt ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000357 1778 178 total ***time bench.php***> real 0m0.002s user 0m0.000s sys 0m0.004s Voila, en gros je fais ce que je veux, c'est moins consommateur de mémoire de passer par mysql, mais un peu plus long et un peu plus de processeur, mais rien de bien flagrant. Maintenant les benchmark ca vaut ce que ca vaut. Je le partage ici parce que si j'en avais trouvé un, je ne l'aurais pas fait, si cela peut servir à quelqu'un.

AltStyle によって変換されたページ (->オリジナル) /