====== Adapter finement son installation ======
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|poudrieres]], donc lorsque vous compiler pour une cible différente de l'hôte.
===== quel processeur ? =====
Le premier échelon est de regarder ce que donnent les première lignes au //boot//:
david:~>dmesg | grep 'CPU:' -A 10
CPU: Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz (3700.23-MHz K8-class CPU)
Origin="GenuineIntel" Id=0x306c3 Family=0x6 Model=0x3c Stepping=3
Features=0xbfebfbff
Features2=0x7fdafbbf
AMD Features=0x2c100800
AMD Features2=0x21
Structured Extended Features=0x27ab
XSAVE Features=0x1
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
TSC: P-state invariant, performance statistics
real memory = 17179869184 (16384 MB)
--
CPU: Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz (3700.00-MHz K8-class CPU)
Origin="GenuineIntel" Id=0x306c3 Family=0x6 Model=0x3c Stepping=3
Features=0xbfebfbff
Features2=0x7fdafbbf
AMD Features=0x2c100800
AMD Features2=0x21
Structured Extended Features=0x27ab
Structured Extended Features3=0x9c000600
XSAVE Features=0x1
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
TSC: P-state invariant, performance statistics
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:
sysctl kern.sched.topology_spec
kern.sched.topology_spec:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
0, 1
THREAD groupSMT group
2, 3
THREAD groupSMT group
4, 5
THREAD groupSMT group
6, 7
THREAD groupSMT group
8, 9
THREAD groupSMT group
10, 11
THREAD groupSMT group
==== 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.
Pensez à conserver la syntaxe ''?='', sinon un ''make buildworld'' peut échouer.
grep 'CPUTYPE.*==' /usr/share/mk/bsd.cpu.mk | less -X
david:~>grep 'CPUTYPE.*==.*haswell.*' /usr/share/mk/bsd.cpu.mk
${CPUTYPE} == "haswell"
${CPUTYPE} == "haswell"
Dans l'exemple précédent, c'est un //haswell//, ce qui donne les options suivantes:
MACHINE_CPU = avx2 avx sse42 sse41 ssse3 sse3
Puisque l'on est sur de l'architecture (''MACHINE_CPUARCH'') ''amd64''.
==== Résultat ====
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
''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'':
microcode_update_enable="YES"
Lancez le:
service microcode_update onestart
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'':
cpu_microcode_load="YES"
cpu_microcode_name="/boot/firmware/intel-ucode.bin"
# cpu_microcode_name="/boot/firmware/amd-ucode.bin"
Lancez une mise jour sans redémarrer:
service microcode_update onestart