Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> make.conf

Оптимизация make.conf

Автор: Raven2000.


Так как мы сидим под фряхой и ставим все исключительно из портов компилим ядра обновляем World и тд то неплохо было бы оптимизировать процесс компиляции. Многие часто не придают этому значение, но ведь при этом это ускорило бы процесс компилирования исходников а, следовательно, сэкономило наше время :) да и потом мы оптимизируем под наше железо.

1) Итакс начнемс..
ee /etc/make.conf 

Я привожу тут под свой комп так что читаем коммменты.


# Тип проца у меня p3 (ниже у меня он также фигурирует как pentium3) 
#   Intel x86 architecture:
#       (AMD CPUs)      opteron athlon64 athlon-mp athlon-xp athlon-4
#                       athlon-tbird athlon k8 k6-3 k6-2 k6 k5
#       (Intel CPUs)    nocona pentium4[m] prescott pentium3[m] pentium-m
#                       pentium2 pentiumpro pentium-mmx pentium i486 i386
#       (Via CPUs)      c3 c3-2
#   Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
#   AMD64 architecture: opteron, athlon64, nocona
#   Intel ia64 architecture: itanium2, itanium

CPUTYPE?=pentium3

# Здесь указываем дополнительные флаги
CFLAGS=-O1 -pipe
NO_PROFILE=true    # Обход построения библиотек для профилирования

# Говорим что флаги включать обязательно
NO_CPU_CFLAGS=false
NO_CPU_COPTFLAGS=false

# Это совместимость с BSD 4.x
COMPAT4X=true

# Отрубаем сборку ненужных библиотек и софта
# посмотреть что еще можно накрутить тут
# /usr/share/examples/etc/make.conf или чуть ниже я опишу.
MAKE_KERBEROS4=false
MAKE_KERBEROS5=false
NO_BIND=true
NO_SENDMAIL=true
NO_GAMES=true

# Настройки Perl
PERL_VER=5.8.8
PERL_VERSION=5.8.8
PERL_ARCH=mach
NOPERL=no
WITH_PERL=yes
WITHOUT_PERL=no

# Теперь FORCE портов..
[code]FORCE_PKG_REGISTER=yes

Ну вот и все теперь сохраняем и пользуемся.

Но если у вас возникли какие либо проблемы с портами типа одинаковых установленных
(различия только в версиях будут) портов как:
/var/db/pkg:
postfix-2.3.1_1
postfix-2.3.2_4
То вырубаем его.
FORCE_PKG_REGISTER=no

Как обещал некоторые настройки я немного опишу.
Но еще раз оговорюсь за полным собранием в библиотеку ;)
/usr/share/examples/etc/make.conf

#NO_ACPI=		# не собирать acpiconf(8) и соответствующие программы
#NO_ATM=		# не собирать ATM соответствующие программы и библиотеки
#NO_AUTHPF=		# не собирать и неустанавливать authpf (setuid/gid)
#NO_BLUETOOTH=		# не собирать Bluetooth и все связанное с ним
#NO_BOOT=		# не собирать boot blocks и loader
#NO_CRYPT=		# не собирать для crypto code
#NO_CVS=		# не собирать CVS
#NO_CXX=		# не собирать C++ и его друзей :)
#NO_DICT=		# не собирать для Webster словари
#NO_DYNAMICROOT=	# нелинковать /bin и /sbin динамически
#NO_FORTRAN=		# не собирать g77 и соответствующие библиотеки
#NO_GAMES=		# не собирать игрушки (games/ subdir)
#NO_GDB=		# не собирать GDB
#NO_GPIB=		# не собирать GPIB support
#NO_I4B=		# не собирать пакет isdn4bsd
#NO_INET6=		# не собирать IPv6 соответствующие программы и библиотеки
#NO_INFO=		# не собирать и неустанавливать информационные файлы
#NO_IPFILTER=		# не собирать IP Filter package
#NO_KERBEROS=		# не собирать и неустанавливать Kerberos 5 (KTH Heimdal)
#NO_LIBC_R=		# не собирать libc_r (re-entrant version of libc)
#NO_LIBPTHREAD=		# не собирать libpthread (M:N threading library)
#NO_LIBTHR=		# не собирать libthr (1:1 threading library)
#NO_LPR=		# не собирать lpr и соответствующие программы
#NO_MAILWRAPPER=	# не собирать для mailwrapper(8) MTA сектора
#NO_MAN=		# не собирать man хелпы
#NO_MODULES=		# не собирать модули устанавливаемые в kernel
#NO_NETCAT=		# не собирать netcat
#NO_NLS_CATALOGS=	# не собирать NLS каталоги устанавливаемые для csh(1)
#NO_OBJC=		# не собирать Objective C support
#NO_OPENSSH=		# не собирать OpenSSH
#NO_OPENSSL=		# не собирать OpenSSL (implies NO_KERBEROS/NO_OPENSSH)
#NO_PF=			# не собирать PF firewall пакеты
#NO_PROFILE=		# Не компилировать библиотеки для профайлера
#NO_RCMDS=		# не собирать и неустанавливать BSD r* команды (rsh, etc).
#NO_SENDMAIL=		# не собирать sendmail и соответствующие программы
#NO_SHARE=		# do not go into the share subdir
#NO_SHARED= 		# собирать в /bin и /sbin статические линки (хреновая мысль)
#NO_SHAREDOCS=		# не собирать для 4.4BSD официальные документы
#NO_TCSH=		# не собирать и не устанавливать /bin/csh (which is tcsh)
#NO_TOOLCHAIN=		# не собирать программы для программ разработчиков
#NO_USB=		# не собирать usbd(8) и соответствующие программы
#MAKE_SHELL?=sh		# тут ясно кому надо включат

#NO_BIND=		# не собирать BIND
#NO_BIND_ETC=		# не копировать установленные файлы в /etc/namedb
#NO_BIND_LIBS_LWRES=	# тоже но по библиотекам
#NO_BIND_MTREE=		# не запускать mtree чтобы создать chroot дириктории
#NO_BIND_NAMED=		# не собирать named, rndc, lwresd, etc.
#NO_BIND_UTILS=		# не собирать dig, host, nslookup, nsupdate
#WITH_BIND_LIBS=	# ставить для BIND библиотеки и файлы

# OpenSSL поддерживает алгоритм IDEA, по умолчанию он
# отключен из-за патентных ограничений Соединенных Штатов. 
# Для его использования необходимо ознакомиться с лицензией,
# и, если ограничения приемлемы то врубаем ;)
#MAKE_IDEA=		# IDEA (128 bit symmetric encryption)

# Документация токо для ENG и RUS
#DOC_LANG=	en_US.ISO8859-1 ru_RU.KOI8-R

В конфиге make.conf можно настроить чтобы по команде "make update" в /usr/src
обновлялись порты ;) в конфиг нужно внести нижеследующее

SUP_UPDATE=
SUP=            /usr/bin/csup
SUPFLAGS=       -g -L 2 -z
SUPHOST=        cvsup.FreeBSD.org
SUPFILE=        /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=     /usr/share/examples/cvsup/doc-supfile

Опция - позволяющая указать на свой конфиг кернела и будет собирать при ${MAKE} buildkernel и устанавливатся ${MAKE} installkernel
KERNCONF=MYKERNEL

Дополнительно по csup можно посмотреть
http://www.freebsd.org/doc/handbook/cvsup.html
/usr/share/examples/cvsup/README

По опциям make
http://www.freebsd.org/cgi/man.cgi?query=make.conf&sektion=5
/usr/share/examples/etc/make.conf

Продолжение следует... :)



размещено: 2007-03-11,
последнее обновление: 2007-04-14,
автор: Raven2000


Fmod, 2007-03-15 в 14:31:39

Нашел еще некоторую инфу по данному вопросу:
Для фри6.1

# Currently the following CPU types are recognized:
#   Intel x86 architecture:
#       (AMD CPUs)      opteron athlon64 athlon-mp athlon-xp athlon-4
#                       athlon-tbird athlon k8 k6-3 k6-2 k6 k5
#       (Intel CPUs)    nocona pentium4[m] prescott pentium3[m] pentium-m
#                       pentium2 pentiumpro pentium-mmx pentium i486 i386
#   Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
#   AMD64 architecture: opteron, athlon64, nocona
#   Intel ia64 architecture: itanium2, itanium

т.е. вместо CPUTYPE=p3 нужно CPUTYPE=pentium3

Насчет опции CFLAGS:
1. "-О" Компилятор пытается сократить как размер кода, так и время его выполнения. И при этом не выполняет модификаций, которые могут затруднить отладку программы. Включает опции -fno-optimize-size, -fdefer-pop, -fthread-jumps, -fguess-branch-probability, -cprop-registers и-fdelayed-branch. Флаг -fomit-frame-pointer устанавливается только если применяемый отладчик способен работать без использования регистра указателя кадра стека.

2. "-О0" Действует по умолчанию. Отключает любые оптимизации размера кода и устанавливает флаг -fno-merge-constants.

3. "-О1" То же, что -О

4. "-О2" На этом уровне применяются все виды оптимизации, которые не требуют вычисления оптимального выбора между размером и скоростью кода. Кроме флагов, устанавливаемых при -О, дополнительно задействует следующие опции -foptimize-sibling-calls, -fcse-follow-jumps, -fcse-skip-blocks, -fgcae, -expensive-optimizations, -fstrength-reduce, -frerun-cse-after-loop, -frerun-loop-opt, -fcaller-aaves, -fforce-mem, -fpeephole2, -fshedule-insns, -fshedule-insns-after-reload, -fregmove, -fstrict-aliasing, -fdelete-null-pointer-checks и -freorder-blocka. Этот уровень оптимизации не разворачивает циклы, не выполняет оптимизацию подстановок (inlining) и переназначение регистров.

5. "-О3" В дополнение к опциям, включаемым при -О2, устанавливает также -finline-functions и -frename-registers.

6. "-Os" Оптимизирует размер программы. Устанавливает все опции, действующие при -О3. Устанавливает опции -falign-loops, -falign-jumps, -falign-labels и -falign-functions с параметром =1, что не допускает вставку пустого пространства для применения выравнивания.

Из моего опыта скажу что опцию CFLAGS лучше вообще не трогать, достаточно указать только тип проца,
CFLAGS установится автоматом.
P.S. насколько я понял все эти опции не учитываются при компиляции ядра. Можно конечно принудительно включить ммх и sse но фря скорее всего станет работать нестабильно и даже медленнее.

Ravem2000, 2007-03-15 в 17:29:29

Fmod>
Пасиб за корректировку у меня это конфиг был от 5.4 а теперь подправил до 6.2 :) Но след раз кидай на мыло иль в аську, а то форум какой-то :)
>понял все эти опции не учитываются при компиляции ядра
Учитывает.
>принудительно включить ммх и sse но фря скорее всего
SSE вопреки слухам ни на че невлияют поскоку ядро неиспользует мультимидийные инструкции, а активация оного лишь указывает на необходимость сохранения SSE регистров при переключении контекстов, а это уже тормоза :) но если вырубить то 2 или более мультимедийные приложения низя гробятся :) так что каждому свое. И мое слово лучше SMP он точно РУЛИТ! ;)
Мдя форум точно...

Fmod, 2007-03-17 в 17:37:29

Учту...

Кот, 2007-03-24 в 12:49:26

настройки флагов компиляции ядра делаются через переменную COPTFLAGS
так же дефолтовые ключи компиляции ядра тянутся из файлов /usr/src/sys/conf/kern.* (тама их 3 штуки, один пре, другой само ядро, третий пост)
попробывал насильно скомпилировать ядро с ключами
-mmmx -msse -msse2 -m3dnow
при этом в /usr/src/sys/conf/kern.mk отрубил ключи явно отрубающие данные оптимизации, в итоге ядро стартовало, но сразу же откинуло лапки и запаниковало.

XoMa, 2007-04-05 в 8:17:19

Забавно, но вот этот кусок из man make.conf (FreeBSD 6.2):
The following lists provide a name and short description for each variable you can use during the indicated builds.  The values of variables flagged as bool are ignored; the variable being set at all (even to``FALSE'' or ``NO'') causes it to be treated as if it were set.
Говорит о том, что bool значения в make.conf игнорируются и воспринимаются как установленные (читай true) при любом значении.
Или я не так понял ;)

XoMa, 2007-04-05 в 8:21:47

А ведь я понял правильно :)
Следующие строки из статьи:
NO_CPU_CFLAGS=false
NO_CPU_COPTFLAGS=false
на самом деле производят обратный эфект :(, т.е. отключают добавление -march=<cpu> при компиляции. Если их закоментировать, то -march=<cpu> добавляется.

f0b0s, 2007-04-12 в 18:54:16

В статье
# Здесь указываем дополнительные флаги
CFLAGS=-01 -pipe


В комментах
3. "-О1" То же, что -О



(разница — в одном случае 0 (ноль) в другом O (буква О).
вот на ноль ругаеццо (когда сделал копипаст конфига). говорит unrecognized option. На O вроде нет (ну как раз щас смотрю — компилиццо)

погуглил, везде тоже O (буква)

так что наверное в статье опечатка?

Raven2000, 2007-04-12 в 23:37:50

>f0b0s
Спасиб за обн-ю ошибочку опечатался :)

pinc, 2007-05-21 в 4:53:41

XoMa скорей всего прав , т.к в exampels NO_CPU_.... не имеют значения , в коментах написано только про недопущение , про принятие ниче не сказано , из этого делаем вывод что в представленном конфиге везде где значение no или false директива имеет обратное , запланнированому значение - ее нужно закоментировать.

ps по логике вещей все что можно разрешить в мэйке - по дефолту запрещено - и кербосы  и но-спу флаги

fvl, 2007-07-02 в 11:07:06

.if ${.CURDIR:M*/ports/*}
CFLAGS= -O2 -pipe -funroll-loops -s -frename-registers -ffast-math -fomit-frame-pointer
CXXFLAGS= -O2 -pipe -funroll-loops -s -frename-registers -felide-constructors -fno-rtti
.endif
.if ${.CURDIR:M*/usr/src/*} || ${.CURDIR:M*/usr/obj/*}
CFLAGS+= -O2 -fno-strict-aliasing -pipe -s
CXXFLAGS+= -O2 -fno-strict-aliasing -pipe -s
COPTFLAGS= -O2 -fno-strict-aliasing -pipe -s
.endif
CC=/usr/local/libexec/ccache/world-cc
CXX=/usr/local/libexec/ccache/world-c++

nd3, 2007-09-01 в 20:04:28

CPUTYPE?=nocona
CFLAGS= -O2 -pipe

Собирал мир, все работает стабильно.

pxel, 2007-11-09 в 2:35:25

COMPATXX=yes
CFLAGS =-O99 -pipe
CXXFLAGS += -fconserve-space
COPTFLAGS += -O99 -pipe
CPUTYPE=pentium4
WITH_LINUX=yes
BATCH=yes
UPGRADE_TOOL=yes
XORG_UPDATE=yes
X11BASE=/usr/local
USE_NONDEFAULT_X11BASE=yes

#### ####  #### #### ####   ####  ####  
#    #   # #    #    #   # #      #   #
###  ####  ###  ###  ####   ####  #    #
#    #   # #    #    #   #      # #   #
#    #   # #### #### ####  #####  ####

pxel, 2007-11-09 в 3:09:38

a luche vsego prochitat:
http://gcc.gnu.org/onlinedocs

naprimer:
ochen' xorosho opisani x86, nikogda nikakix problem ne voznikalo (ne govora uge o glukax). A optimizacija - bolshoj "+" dla sistemi v celom, dage zagruzku sistemi mogno sekundomerom sravnivat :)

edinstvennoe:
NO_PROFILE=true
etot parametr luche vcego ispolzovat pri globalnom perehode po jadram, no nikak ne dla sborki portov!

Sultan, 2007-11-11 в 16:56:18

Некоторые рекомендуют поступать следующим образом:

вместо
CPUTYPE?=Ваш_процессор

делать так:

NO_CPU_CFLAGS=true
NO_CPU_COPTFLAGS=true

CFLAGS=-pipe -march=i686 -mtune=Ваш_процессор
COPTFLAGS=-pipe -march=i686 -mtune=Ваш_процессор

В первом случае добавится "-march=Ваш_процессор", что  может лишить возможности перенести рабочую систему на другую платформу семейства x86.

Во втором же случае можно будет безболезненно перенести систему, просто переткнув жесткие диски с погибшей железки на pentium4, скажем, на athlon 64.

По поводу ключей оптимизации - лучше следить за тем, что в данный момент для используемой releng считается стабильным, иначе потом можно изрядно попортить себе нервы, отделяя глюки софта от влияния компилятора.

paix, 2008-04-09 в 11:55:58

+1 Sultan

оптимизации лучше не использовать

krilya, 2008-04-22 в 3:18:13

У меня процессор Duron 800, посмотрел aida пишет семейство K7, но в конфигурационном фале такого нет, как указать CPUTYPE ?

Raven2000, 2008-04-22 в 11:31:38

to krilya
посмотрите как определяет проц ваша система
# dmesg -a
то и пишите.

snark, 2008-04-30 в 18:38:22

Всем кому интересна тема CPUTYPE?= - заносите в закладки хорошее описалово. Да, там пингвин, но для make это сути дела не меняет ;)

Borojar, 2008-05-06 в 11:30:56

При CFLAGS=-O1 -pipe собранный из портов nettop выпадает в кору. При CPUFLAGS=-O2 -pipe работает нормально.
FreeBSD 7.0 Release

Borojar, 2008-05-06 в 11:32:03

опечатка, конечно-же CFLAGS=-O2 -pipe  :)

iZEN, 2009-05-14 в 12:07:34

Для 7.x это руководство устарело.
Многие опции вредны.
Многие опции перенесены в src.conf.

PhantomD, 2009-06-17 в 1:44:58

Duron
From 600 to 900 MHz. These models have a tbird-alike core model.

product: AMD Duron(tm) Processor version: 6.3.1
CFLAGS="-march=athlon-tbird -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

Ivan_83, 2009-07-06 в 21:50:59

Универсальное переносимое буде так:
native - означает что компилятор сам определит что за проц и соптимизирует под него. Архитектура оставлена универсальная, если тоже натив поставить то переносимость пострадает, по крайней мере на процы других фирм или более старые/менее фичастые.

NO_CPU_CFLAGS=
NO_CPU_COPTFLAGS=

CFLAGS= -march=i686 -mtune=native -O2 -fno-strict-aliasing -pipe
CXXFLAGS= -march=i686 -mtune=native -O2 -fno-strict-aliasing -pipe
COPTFLAGS= -march=i686 -mtune=native -O2 -fno-strict-aliasing -pipe

Ivan_83, 2009-07-17 в 8:43:20

CXXFLAGS=
лучше не трогать, иначе /usr/src/gnu/lib/libstdc++ не соберётся при сборке мира.

Vasya, 2015-06-27 в 0:57:38

АФТАР ЕБЛАН СОСИ ХУЙС



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1744 секунд
Из них PHP: 47%; SQL: 53%; Число SQL-запросов: 77 шт.
Исходный размер: 37733; Сжатая: 11393