{"id":4289,"date":"2015-02-09T08:04:40","date_gmt":"2015-02-09T07:04:40","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=4289"},"modified":"2015-02-09T10:14:58","modified_gmt":"2015-02-09T09:14:58","slug":"6-fois-plus-rapide-vraiment","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2015\/02\/09\/6-fois-plus-rapide-vraiment\/","title":{"rendered":"6 fois plus rapide&nbsp;? vraiment&nbsp;?"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/mini-2015-02-09-08.17.181.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-4296\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/mini-2015-02-09-08.17.181.png\" alt=\"Raspberry Pi 2\" width=\"124\" height=\"200\" \/><\/a>Le nouveau <strong>Raspberry Pi 2 mod\u00e8le B<\/strong> est disponible depuis le d\u00e9but de la semaine derni\u00e8re. Et les distributeurs ont \u00e9t\u00e9 suffisamment approvisionn\u00e9s pour pouvoir r\u00e9pondre aux demandes. J&rsquo;en ai command\u00e9 deux exemplaires lundi dernier \u00e0 l&rsquo;annonce de sa mise sur le march\u00e9, et j&rsquo;ai \u00e9t\u00e9 livr\u00e9 d\u00e8s mardi matin&nbsp;! L&rsquo;un des arguments de vente est \u00ab\u00a04 \u00e0 6 fois plus rapide que le pr\u00e9c\u00e9dent\u00a0\u00bb. C&rsquo;est le genre de chose qui titille ma curiosit\u00e9, j&rsquo;ai voulu v\u00e9rifier ce qu&rsquo;il en est&#8230;<br \/>\n<!--more-->\n<\/p>\n<h1>Comparaison avec le mod\u00e8le pr\u00e9c\u00e9dent<\/h1>\n<p style=\"text-align: justify;\">Tr\u00e8s peu de diff\u00e9rences externes entre le mod\u00e8le 2 et <a title=\"B+\" href=\"http:\/\/www.blaess.fr\/christophe\/2014\/08\/06\/b\/\">le mod\u00e8le 1 B+<\/a>. Les connecteurs et les composants actifs se trouvent aux m\u00eames emplacements, et m\u00eame le routage des pistes \u00e9lectroniques a peu chang\u00e9 dans l&rsquo;essentiel.<\/p>\n<p style=\"text-align: justify;\">On remarque n\u00e9anmoins un nouveau <em>system-on-chip<\/em>, le <strong>Broadcom 2836<\/strong> au lieu du 2835. Celui-ci int\u00e8gre un processeur Arm quadri-c\u0153ur.<br \/>\n<a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-03-11.22.24.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-4298\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-03-11.22.24-300x237.png\" alt=\"2015-02-03 11.22.24\" width=\"300\" height=\"237\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-03-11.22.24-300x237.png 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-03-11.22.24-1024x807.png 1024w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-03-11.22.24.png 1532w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">On peut observer \u00e9galement un bloc de m\u00e9moire Ram DDR2 situ\u00e9 sur le dessous du Raspberry Pi, alors que dans les pr\u00e9c\u00e9dents mod\u00e8les la m\u00e9moire se trouvait coll\u00e9e directement sous le <em>system-on-chip<\/em>.<br \/>\n<a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-07.43.54.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-4300\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-07.43.54-300x279.png\" alt=\"B8132B4PB-8D-F\" width=\"300\" height=\"279\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-07.43.54-300x279.png 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-07.43.54-1024x952.png 1024w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-07.43.54.png 1304w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Enfin, la s\u00e9rigraphie indique le num\u00e9ro de ce nouveau Raspberry Pi.<br \/>\n<a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-08.16.36.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-4301\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-08.16.36-300x136.png\" alt=\"Raspberry Pi 2 Model B V1.1\" width=\"300\" height=\"136\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-08.16.36-300x136.png 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2015\/02\/2015-02-09-08.16.36.png 945w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h1>Support sous Linux<\/h1>\n<p style=\"text-align: justify;\">Je n&rsquo;ai essay\u00e9 sur ce nouveau Raspberry Pi 2 que la distribution Raspbian 2015-01-31. Il est n\u00e9cessaire de prendre la version la plus r\u00e9cente pour que le support du multic\u0153ur soit activ\u00e9 dans le noyau.<\/p>\n<p style=\"text-align: justify;\">Voici quelques commandes syst\u00e8mes permettant d&rsquo;avoir un aper\u00e7u du support par le noyau Linux.<\/p>\n<pre>pi@raspberrypi ~ $ <strong>uname -a<\/strong>\nLinux raspberrypi 3.18.5-v7+ #225 SMP PREEMPT Fri Jan 30 18:53:55 GMT 2015 armv7l GNU\/Linux<\/pre>\n<p style=\"text-align: justify;\">Le noyau est tr\u00e8s r\u00e9cent. C&rsquo;est la derni\u00e8re version stable (<em>ah tiens, non, le noyau 3.19 vient de sortir ce matin&nbsp;!<\/em>).<\/p>\n<pre>pi@raspberrypi ~ $ <strong>free<\/strong>\n             total       used       free     shared    buffers     cached\nMem:        762384      60252     702132          0       8772      22420\n-\/+ buffers\/cache:      29060     733324\nSwap:       102396          0     102396<\/pre>\n<p style=\"text-align: justify;\">Le syst\u00e8me est dot\u00e9 d&rsquo;un Go de Ram (une partie est r\u00e9serv\u00e9e par le noyau). Sur le mod\u00e8le pr\u00e9c\u00e9dent, la m\u00eame commande donne&nbsp;:<\/p>\n<pre>pi@raspberrypi ~ $ <strong>free<\/strong>\n             total       used       free     shared    buffers     cached\nMem:        445772      50056     395716          0       7192      21108\n-\/+ buffers\/cache:      21756     424016\nSwap:       102396          0     102396<\/pre>\n<p style=\"text-align: justify;\">Voyons le processeur\u00a0:<\/p>\n<pre>pi@raspberrypi ~ $ <strong>lscpu <\/strong>\nArchitecture:          armv7l\nByte Order:            Little Endian\nCPU(s):                4\nOn-line CPU(s) list:   0-3\nThread(s) per core:    1\nCore(s) per socket:    4\nSocket(s):             1\npi@raspberrypi ~ $<\/pre>\n<p style=\"text-align: justify;\">Un processeur, avec 4 c\u0153urs physiques ind\u00e9pendants. Voyons, ses possibilit\u00e9s de r\u00e9glage de la fr\u00e9quence de fonctionnement.<\/p>\n<pre>pi@raspberrypi ~ $ <strong>cd \/sys\/devices\/system\/cpu\/<\/strong>\npi@raspberrypi \/sys\/devices\/system\/cpu $ <strong>ls<\/strong>\ncpu0  cpu1  cpu2  cpu3  cpufreq  cpuidle  kernel_max  offline  online  possible  power  present  uevent<\/pre>\n<p style=\"text-align: justify;\">Les quatre c\u0153urs sont bien r\u00e9glables s\u00e9par\u00e9ment.<\/p>\n<pre>pi@raspberrypi \/sys\/devices\/system\/cpu $ <strong>cd cpu0\/<\/strong>\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0 $ <strong>ls<\/strong>\ncpufreq  crash_notes  crash_notes_size  online  power  subsystem  topology  uevent\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0 $ <strong>cd cpufreq\/<\/strong>\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $ <strong>ls<\/strong>\naffected_cpus     cpuinfo_max_freq  cpuinfo_transition_latency  scaling_available_frequencies  scaling_cur_freq  scaling_governor  scaling_min_freq\ncpuinfo_cur_freq  cpuinfo_min_freq  related_cpus                scaling_available_governors    scaling_driver    scaling_max_freq  scaling_setspeed\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $ <strong>cat scaling_min_freq<\/strong> \n600000\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $ <strong>cat scaling_max_freq<\/strong>\n900000\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $ <strong>cat scaling_cur_freq<\/strong> \n600000\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $ <strong>cat scaling_governor<\/strong>\nondemand\npi@raspberrypi \/sys\/devices\/system\/cpu\/cpu0\/cpufreq $<\/pre>\n<p style=\"text-align: justify;\">Le r\u00e9glage \u00e9tant sur <code>ondemand<\/code>, la fr\u00e9quence (actuellement \u00e0 600 MHz) \u00e9voluera automatiquement pour monter si besoin \u00e0 900 MHz.Il est possible de la faire varier manuellement, pour en savoir plus, <a title=\"Temps-r\u00e9el et \u00e9conomie d\u2019\u00e9nergie (1)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/03\/04\/temps-reel-et-economie-d-energie-1\/\">voir cet article<\/a>. Avec le pr\u00e9c\u00e9dent mod\u00e8le, la fr\u00e9quence \u00e9tait fig\u00e9e \u00e0 700MHz.<\/p>\n<p style=\"text-align: justify;\">Il est toujours possible de faire un <em>overclocking<\/em> du processeur, comme avec le mod\u00e8le pr\u00e9c\u00e9dent, en utilisant la commande <code>sudo raspi-config<\/code>. La fr\u00e9quence CPU pourra alors monter jusqu&rsquo;\u00e0 1GHz. Attention toutefois, il est bien pr\u00e9cis\u00e9 que cela peut r\u00e9duire la dur\u00e9e de vie du processeur (dans la pratique je n&rsquo;en suis pas persuad\u00e9).<\/p>\n<h1>Comparaison de puissance processeur<\/h1>\n<p style=\"text-align: justify;\">Il existe de nombreux <em>benchmarks<\/em> pour \u00e9valuer la puissance d&rsquo;un processeur, mais j&rsquo;aime bien mener mes propres tests avec des situations repr\u00e9sentatives de ce que je fais au quotidien sur les syst\u00e8mes que j&rsquo;utilise.<\/p>\n<h2>Puissance monoc\u0153ur<\/h2>\n<p style=\"text-align: justify;\">Pour avoir une id\u00e9e de la puissance de calcul brute d&rsquo;un CPU, il y a une possibilit\u00e9 tr\u00e8s simple&nbsp;: lui demander de calculer des d\u00e9cimales de Pi (le nombre Pi, pas le Raspberry&nbsp;!). C&rsquo;est extr\u00eamement simple \u00e0 faire depuis le shell en invoquant la commande <code>bc<\/code> et en lui demandant d&rsquo;afficher <code>4 * a(1)<\/code>. La fonction <code>a()<\/code> de <code>bc<\/code> calcule l&rsquo;arc-tangente. Or <code>arctan(1) = PI\/4<\/code>.<br \/>\nL&rsquo;int\u00e9r\u00eat de <code>bc<\/code>, c&rsquo;est que l&rsquo;on peut lui pr\u00e9ciser le nombre de d\u00e9cimales d\u00e9sir\u00e9es dans sa variable <code>scale<\/code>. Ici je lui en demande 10.000, et j&rsquo;encadre l&rsquo;invocation avec la commande <code>date<\/code> pour conna\u00eetre sa dur\u00e9e.<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ <strong>date; echo \"scale=10000; 4*a(1)\" | bc -l; date<\/strong>\nSat Feb  7 00:26:00 UTC 2015\n3.141592653589793238462643383279502884197169399375105820974944592307\\\n81640628620899862803482534211706798214808651328230664709384460955058\\\n22317253594081284811174502841027019385211055596446229489549303819644\\\n[...]\n83440869735020141020672358502007245225632651341055924019027421624843\\\n91403599895353945909440704691209140938700126456001623742880210927645\\\n79310657922955249887275846101264836999892256959688159205600101655256\\\n375676\nSat Feb  7 00:41:30 UTC 2015<\/pre>\n<p style=\"text-align: justify;\">Le calcul a dur\u00e9 14 minutes et 30 secondes.<\/p>\n<p style=\"text-align: justify;\">Effectuons la m\u00eame op\u00e9ration sur un Raspberry Pi 1 mod\u00e8le B+<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ date; echo \"scale=10000; 4*a(1)\" | bc -l; date\nSun Feb  8 18:14:43 UTC 2015\n3.141592653589793238462643383279502884197169399375105820974944592307\\\n81640628620899862803482534211706798214808651328230664709384460955058\\\n22317253594081284811174502841027019385211055596446229489549303819644\\\n[...]\n83440869735020141020672358502007245225632651341055924019027421624843\\\n91403599895353945909440704691209140938700126456001623742880210927645\\\n79310657922955249887275846101264836999892256959688159205600101655256\\\n375676\nSun Feb  8 18:39:03 UTC 2015<\/pre>\n<p style=\"text-align: justify;\">Cette fois le calcul a dur\u00e9 24 minutes et 20 secondes.<\/p>\n<p style=\"text-align: justify;\">Pour un calcul brut monoc\u0153ur, le Raspberry Pi 2 est 1,66 fois (5 \/ 3) plus rapide que son pr\u00e9d\u00e9cesseur. C&rsquo;est un peu meilleur que le simple rapport des fr\u00e9quences CPU (900\/700).<\/p>\n<h2>Puissance multic\u0153ur<\/h2>\n<p style=\"text-align: justify;\">La grande nouveaut\u00e9 du Raspberry Pi 2 est son aspect multic\u0153ur. Ceci peut grandement am\u00e9liorer les performances lorsque plusieurs op\u00e9rations doivent s&rsquo;ex\u00e9cuter simultan\u00e9ment et peuvent \u00eatre parall\u00e9lis\u00e9es. Ma r\u00e9f\u00e9rence en ce domaine est la compilation de gros projets avec un <code>make<\/code> parall\u00e9le (option <code>-j<\/code> suivie du nombre de jobs simultan\u00e9s).<\/p>\n<p style=\"text-align: justify;\">Fid\u00e8le \u00e0 mes habitudes, j&rsquo;ai test\u00e9 ceci sur une compilation du noyau Linux. Il faut commencer par ajouter deux packages sur la distribution Raspbian.<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ <strong>sudo apt-get install bc libncurses5-dev<\/strong><\/pre>\n<p style=\"text-align: justify;\">Je t\u00e9l\u00e9charge les sources du noyau modifi\u00e9 pour Raspberry Pi.<\/p>\n<pre>pi@raspberrypi ~ $ <strong>date ; git clone http:\/\/github.com\/raspberrypi\/linux rpi-kernel ; date<\/strong>\nFri Feb  6 07:34:24 UTC 2015\nCloning into 'rpi-kernel'...\n[...]\nFri Feb  6 08:21:15 UTC 2015<\/pre>\n<p style=\"text-align: justify;\">Le t\u00e9l\u00e9chargement dure un peu moins d&rsquo;une heure, le facteur limitant est naturellement le d\u00e9bit r\u00e9seau global mais \u00e9galement celui du contr\u00f4leur Ethernet du Raspberry Pi 2 (LAN 9514 qui n&rsquo;a pas chang\u00e9 par rapport au mod\u00e8le pr\u00e9c\u00e9dent). Avec une carte r\u00e9seau et une liaison ADSL correctes, le transfert est plut\u00f4t de 10 \u00e0 15 minutes. Je configure la compilation pour un noyau standard pour Raspberry Pi.<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ <strong>make bcmrpi_defconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">Je lance la compilation en demandant un total permanent de huit jobs en parall\u00e8le (c&rsquo;est une bonne habitude de compter un \u00e0 deux jobs par c\u0153ur).<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ <strong>date ; make -j 8 ; date<\/strong>\nFri Feb  6 22:16:01 UTC 2015\n[...]\nSat Feb  7 00:00:56 UTC 2015\npi@raspberrypi ~\/rpi-kernel $<\/pre>\n<p style=\"text-align: justify;\">La compilation prend 1h45. C&rsquo;est long, mais il s&rsquo;agit d&rsquo;une configuration pour un noyau complet, avec beaucoup d&rsquo;options activ\u00e9es.<\/p>\n<p style=\"text-align: justify;\">Pour comparaison, je lance la m\u00eame op\u00e9ration sur le Raspberry Pi 1 mod\u00e8le B+.<\/p>\n<pre>pi@raspberrypi ~\/rpi-kernel $ <strong>date; make -j2 ; date<\/strong>\nSat Feb  7 21:54:33 UTC 2015\n[...]\nSun Feb  8 10:27:53 UTC 2015\npi@raspberrypi ~\/rpi-kernel $<\/pre>\n<p style=\"text-align: justify;\">12h33 de compilation&nbsp;!<\/p>\n<p style=\"text-align: justify;\">Dans ce cas, en effet le Raspberry Pi 2 a \u00e9t\u00e9 7 fois plus rapide que le mod\u00e8le 1. La diff\u00e9rence est due au nombre de c\u0153urs (probablement dans un rapport 4 environ), mais aussi \u00e0 la diff\u00e9rence de m\u00e9moire RAM, ce qui influe sensiblement sur les compilations (taille des caches, etc.).<\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Mon utilisation courante du Raspberry Pi (tests de drivers, bidouilles sur les GPIO, serveurs HTTP, outils de d\u00e9mo pour des applications r\u00e9seau, etc.) se d\u00e9roule essentiellement en console texte, avec une connexion sur l&rsquo;interface s\u00e9rie ou par SSH.<\/p>\n<p style=\"text-align: justify;\">Je verrai une diff\u00e9rence de rapidit\u00e9 surtout lors de compilations longues qu&rsquo;il m&rsquo;arrive de r\u00e9aliser pour des sessions de <a title=\"Formation Drivers Linux\" href=\"http:\/\/www.logilin.fr\/formations\/formation-ecriture-de-drivers-et-programmation-noyau-linux\/\" target=\"_blank\">formations sur la programmation de drivers Linux<\/a>.<\/p>\n<p style=\"text-align: justify;\">Pour l&rsquo;utilisateur qui emploie l&rsquo;interface graphique du syst\u00e8me, on peut esp\u00e9rer \u00e9galement un gain notable car cet environnement pourra alors tirer parti de la parall\u00e9lisation&nbsp;: le navigateur, le lecteur vid\u00e9o, l&rsquo;environnement graphique proprement dit, les serveurs r\u00e9seau, etc. pourront s&rsquo;ex\u00e9cuter sur des c\u0153urs distincts et rendre le syst\u00e8me plus fluide.<\/p>\n<p style=\"text-align: center;\">Commentaires, remarques et retours d&rsquo;exp\u00e9riences sont les bienvenus.<\/p>","protected":false},"excerpt":{"rendered":"<p>Le nouveau Raspberry Pi 2 mod&egrave;le B est disponible depuis le d&eacute;but de la semaine derni&egrave;re. Et les distributeurs ont &eacute;t&eacute; suffisamment approvisionn&eacute;s pour pouvoir r&eacute;pondre aux demandes. J&rsquo;en ai command&eacute; deux exemplaires lundi dernier &agrave; l&rsquo;annonce de sa mise sur le march&eacute;, et j&rsquo;ai &eacute;t&eacute; livr&eacute; d&egrave;s mardi matin&nbsp;! L&rsquo;un des arguments de vente [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,8,10,11],"tags":[],"class_list":["post-4289","post","type-post","status-publish","format-standard","hentry","category-actualite","category-embarque","category-linux-2","category-microprocesseur","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=4289"}],"version-history":[{"count":14,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4289\/revisions"}],"predecessor-version":[{"id":4312,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4289\/revisions\/4312"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=4289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=4289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=4289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}