====== 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