Идеальные CFLAGS в Gentoo
С 4й версии GCC умеет подбирать оптимальные параметры автоматически, для этого нужно всего лишь указать в CFLAGS ключ -march=native. Однако, бывают случаи, когда -march=native использовать нельзя, например, если у вас distcc (proof) Вот здесь начинается особая, уличная магия. Первое, что нужно сделать - узнать свою модель процессора. Сделать это можно при помощи команды:
Получите примерно такое:
- vendor_id : GenuineIntel
- cpu family : 6
- model : 30
- model name : Intel(R) Xeon(R) CPU X3450 @ 2.67GHz
Простое решение - позаимствовать из архивов Gentoo Wiki набор протестированных флагов (раз, два, три). Однако такие документации уже довольно стары, а то и вовсе не поддерживаются. Так что вы имеете достаточно большую вероятность просто не найти свой процессор в этих простынях. Поэтому последний и сложный вариант - составить свой собственный, точный набор флагов, используя те же инструменты, что и GCC для -march=native.
- # выполнять от root`а
- gcc -c -Q -march=native --help=target
Это команда выведет список флагов, который поддерживает ваш процессор. Используйте осторожно, ибо не всякая программа будет компилироваться с ними. Например от mstackrealign у меня намертво отваливалась сборка порта bzip2. Так же будет полезно рассказать GCC сколько памяти у процессора в L-кешах. В этом нам поможет утилита lscpu:
- sb0y@fabian / $ lscpu
- Architecture: x86_64
- CPU op-mode(s): 32-bit, 64-bit
- Byte Order: Little Endian
- CPU(s): 8
- On-line CPU(s) list: 0-7
- Thread(s) per core: 2
- Core(s) per socket: 4
- Socket(s): 1
- NUMA node(s): 1
- Vendor ID: GenuineIntel
- CPU family: 6
- Model: 30
- Stepping: 5
- CPU MHz: 2660.000
- BogoMIPS: 5320.11
- Virtualization: VT-x
- L1d cache: 32K
- L1i cache: 32K
- L2 cache: 256K
- L3 cache: 8192K
- NUMA node0 CPU(s): 0-7
Теперь можно добавить в CFLAGS: --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192. Вот и всё. После установки новых флагов, лучше выполнить emerge system, чтобы быть уверенным, что ничего не сломалось.