Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
configurer:processeur [2022/12/22 13:07] – david | configurer:processeur [2024/03/15 21:12] (Version actuelle) – david |
---|
| |
Ceci s'adresse à ceux qui installent leur FreeBSD à partir des sources et peuvent ainsi donner à [[https://clang.llvm.org/|Clang/llvm]] des billes pour compiler au plus près de l'architecture processeur. | Ceci s'adresse à ceux qui installent leur FreeBSD à partir des sources et peuvent ainsi donner à [[https://clang.llvm.org/|Clang/llvm]] des billes pour compiler au plus près de l'architecture processeur. |
C'est surtout important lorsque vous utilisez des [[ports:poudriere]]s, donc lorsque vous compiler pour une cible différente de l'hôte. | C'est surtout important lorsque vous utilisez des [[ports:poudriere|poudrieres]], donc lorsque vous compiler pour une cible différente de l'hôte. |
| |
</jumbotron> | </jumbotron> |
| |
===== quel processeur ===== | ===== quel processeur ? ===== |
| |
Le premier échelon est de regarder ce que donnent les première lignes au //boot//: | Le premier échelon est de regarder ce que donnent les première lignes au //boot//: |
</code> | </code> |
| |
Installez [[https://github.com/rilysh/cpuc|cpuc]] pour plus de précisions, ou ''llvm-tblgen''. | Installez [[https://codeberg.org/mystical/cpuc|cpuc]] pour plus de précisions, ou ''llvm-tblgen''. |
| |
| Ici, c'est un modèle dit ''haswell'' d'après la [[https://www.intel.fr/content/www/fr/fr/products/sku/77490/intel-core-i34170-processor-3m-cache-3-70-ghz/specifications.html?wapkw=i3-4170|documentation]]. |
| |
| Obtenez la topologie de votre système: |
| |
| <code bash> |
| sysctl kern.sched.topology_spec |
| |
| kern.sched.topology_spec: <groups> |
| <group level="1" cache-level="3"> |
| <cpu count="12" mask="fff,0,0,0">0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11</cpu> |
| <children> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="3,0,0,0">0, 1</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="c,0,0,0">2, 3</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="30,0,0,0">4, 5</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="c0,0,0,0">6, 7</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="300,0,0,0">8, 9</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| <group level="2" cache-level="2"> |
| <cpu count="2" mask="c00,0,0,0">10, 11</cpu> |
| <flags><flag name="THREAD">THREAD group</flag><flag name="SMT">SMT group</flag></flags> |
| </group> |
| </children> |
| </group> |
| </groups> |
| </code> |
| |
==== Makefile ==== | ==== Makefile ==== |
| |
Consultez ''/usr/share/mk/bsd.cpu.mk'' pour déterminer le code de votre architecture processeur et précisez le ''CPUTYPE'' dans ''make.conf'' de vos poudrières par exemples. | Consultez ''/usr/share/mk/bsd.cpu.mk'' pour déterminer le code de votre architecture processeur et précisez le ''CPUTYPE'' dans ''make.conf'' de vos poudrières par exemples. |
| |
| <callout type="warning" icon="true"> |
| Pensez à conserver la syntaxe ''?='', sinon un ''make buildworld'' peut échouer. |
| </callout> |
| |
<code bash> | <code bash> |
grep 'CPUTYPE.*==' /usr/share/mk/bsd.cpu.mk | less -X | grep 'CPUTYPE.*==' /usr/share/mk/bsd.cpu.mk | less -X |
| david:~>grep 'CPUTYPE.*==.*haswell.*' /usr/share/mk/bsd.cpu.mk |
| ${CPUTYPE} == "haswell" |
| ${CPUTYPE} == "haswell" |
</code> | </code> |
| |
Dans l'exemple précédent, c'est un //K8// avec l'option //sse3//, définit par ''k8-sse3''. | Dans l'exemple précédent, c'est un //haswell//, ce qui donne les options suivantes: |
| <file bash /usr/share/mk/bsd.cpu.mk> |
| MACHINE_CPU = avx2 avx sse42 sse41 ssse3 sse3 |
| </file> |
| |
| Puisque l'on est sur de l'architecture (''MACHINE_CPUARCH'') ''amd64''. |
| |
| ==== Résultat ==== |
| |
| <code bash> |
| root@machine:~ # find /usr/local/etc/poudriere.d/*make.conf -exec grep CPUTYPE {} + |
| /usr/local/etc/poudriere.d/ampache-default-make.conf:CPUTYPE?=haswell |
| /usr/local/etc/poudriere.d/flarum-default-make.conf:CPUTYPE?=sandybridge |
| /usr/local/etc/poudriere.d/llanura-default-make.conf:CPUTYPE?=haswell |
| /usr/local/etc/poudriere.d/machine-default-make.conf:CPUTYPE?=haswell |
| /usr/local/etc/poudriere.d/owncloud-default-make.conf:CPUTYPE?=haswell |
| /usr/local/etc/poudriere.d/popeye13-default-make.conf:CPUTYPE?=sandybridge |
| </code> |
| |
| ''Machine'' est donné comme ''CPU E3-1246'', soit un //Xeon//. Il suffit de consulter la [[https://www.intel.fr/content/www/fr/fr/products/sku/80916/intel-xeon-processor-e31246-v3-8m-cache-3-50-ghz/specifications.html|datasheet]] pour y voir le modèle ''haswell''. |
| |
| ''Popeye'' est donné comme ''i7-3930K'', soit un //Intel Core// (à ne pas confondre avec ''core2''). Il suffit de consulter la [[https://www.intel.fr/content/www/fr/fr/products/sku/63697/intel-core-i73930k-processor-12m-cache-up-to-3-80-ghz/specifications.html|datasheet]] pour y voir le modèle ''sandybridge''. |
| |
| ===== Micro-codes ===== |
| |
| Les architectures de type //x86// (Intel ou AMD) sont composés de couches successive dont un //micro-code// qui émule les fonctions les plus complexes. |
| Ce micro-code est souvent mis à jour dans le cadre de correctifs, notamment lors de la découverte de failles de sécurités. |
| |
| Installez le port [[https://www.freshports.org/sysutils/cpu-microcode|sysutils/cpu-microcode]] ou [[https://www.freshports.org/sysutils/cpu-microcode-rc|sysutils/cpu-microcode-rc]] pour mettre à jour automatiquement au démarrage ce code, au besoin. Notez qu'il existe des ports séparés selon le constructeur: |
| * [[https://www.freshports.org/sysutils/cpu-microcode-intel|sysutils/cpu-microcode-intel]] |
| * [[https://www.freshports.org/sysutils/cpu-microcode-amd|sysutils/cpu-microcode-amd]] |
| |
| Le port ''-rc'' ne permet une mise à jour qu'à la fin du processus de démarrage. C'est un service qui se règle dans ''/etc/rc.conf'': |
| <file ini /etc/rc.conf> |
| microcode_update_enable="YES" |
| </file> |
| |
| Lancez le: |
| <code bash> |
| service microcode_update onestart |
| </code> |
| |
| Le premier port permet aussi une mise à jour dès le début du processus de démarrage et se règle dans le ''/boot/loader.conf'': |
| |
| <file ini /boot/loader.conf> |
| cpu_microcode_load="YES" |
| cpu_microcode_name="/boot/firmware/intel-ucode.bin" |
| # cpu_microcode_name="/boot/firmware/amd-ucode.bin" |
| </file> |
| |
| Lancez une mise jour sans redémarrer: |
| <code bash> |
| service microcode_update onestart |
| </code> |
| |
| |
| |
| |
| |
| |