The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Компиляция Linux-ядра под заданный процессор в Debian/Ubuntu
Пример компиляции ядра в таких  дистрибутивах как Debian и Ubuntu с целью
задействования всех возможных оптимизаций для текущего процессора (core-duo).
Все произведённые действия подойдут для ubuntu 9.10 - 10.10

Для начала загрузим исходные тексты ядра и заголовочные файлы:

   sudo aptitude install linux-source-2.6 linux-headers

Установим утилиты для компиляции ядра

   sudo aptitude install build-essential kernel-package libncurses-dev

Полученное ядро нужно распаковать:

   cd /usr/src/
   sudo tar -xjf linux-source-*

Все операции с ядром производятся в корне директории с исходными текстами ядра,
поэтому недолго думая переходим туда:

   cd /usr/src/linux-source-*

Создадим файл конфигурации текущего ядра командой

   sudo make oldconfig

Эта команда создаст файл .config, где будут указаны опции ядра, используемого в
данной системе. Эти настройки будут основой для наших настроек. Приступим к
конфигурации ядра:

   sudo make menuconfig


С помощью этой утилиты указываем необходимые нам опции. 
Обращаю ваше внимание на следующую опцию:

   Processor type and features  ---> Processor family

Здесь выбираем свой процессор. Остальные опции, которые мы взяли из ядра
идущего с дистрибутивом вполне работоспособны для большинства применений,
поэтому изменяйте их по своему усмотрению, или оставляйте как есть.

Далее, выполним команду, которая удалит файлы (если они имеются), оставшиеся от
предыдущей компиляции:

   sudo make-kpkg clean

Далее компилируем ядро командой:

   sudo nice -n 19 make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

"nice -n 19" понизит приоритет компиляции на 19 пунктов
Ключ "-append-to-version" используется, чтобы добавить к имени файла образа
ядра, который мы получим после компиляции, строку "-mykernel", чтобы было проще
идентифицировать свое ядро.

И, через несколько минут/часов или может у кого то и дней, мы получим
оптимизированное для нашей архитектуры ядро. На Celeron 3.06GHz это заняло два
с половиной часа.

Если всё пройдёт удачно, в итоге в /usr/src/  получим два deb-пакета
linux-headers-*.deb и linux-image-*.deb, которые следует установить в систему:

   sudo dpkg -i linux-headers-*.deb linux-image-*.deb

Установщик также обновит конфигурацию grub и поставит новое ядро во главе
списка. Теперь можно перезагрузить в систему с новым ядром!



Дополнение от pavlinux:

При необходимости можно внести изменения в используемые опции компиляции для
gcc c оптимизацией под нужный процессор. Опции задаются через переменные
окружения HOSTCFLAGS и KBUILD_CFLAGS, например:


   export HOSTCFLAGS="-O99 -mtune=native -funroll-all-loops"
   export KBUILD_CFLAGS="-O99 -mtune=native -funroll-all-loops"

или могут быть заданы в основном Makefile через переменные "HOSTCFLAGS" и
"HOSTCXXFLAGS". В этих настройках нельзя указывать флаги оптимизации под
конкретный процессор, можно использовать отлько общие параметры оптимизации,
такие как  -06/-O99, -frecord-gcc-switches, -g0 -funroll-all-loops,
-ftree-vectorize, -fno-inline-functions-called-once, -fmerge-all-constants и
так далее.

Для тонкой оптимизации под конкретный процессор нужно менять параметры в
arch/x86/Makefile (под 32 бита в arch/x86/Makefile_32.cpu)
там следует найти свой процессор, после строки "export BITS" есть тройка ifeq-else-endif

Дописывать можно к последнему KBUILD_CFLAGS. Тут можно всё, кроме
FPU/SSE/MMX/3DNOW, "-mcmodel=kernel" менять нельзя.
 
20.03.2011 , Автор: andrewlap , Источник: http://www.comeinadmin.ru/article/c...
Ключи: linux, kernel, compile, build, debian, ubuntu / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Linux специфика / Установка и работа с пакетами программ в Linux

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.2, Аноним (-), 12:17, 20/03/2011 [ответить] [показать ветку] [···]    [к модератору]
  • –1 +/
    Почему-то решил, что в статье описан процесс кросс-компиляции ядра для всяких армов и мипселей.
    Был разочарован :)
     
     
  • 2.11, pavlinux (ok), 22:52, 20/03/2011 [^] [ответить]    [к модератору]
  • +/
    А накой вам?
     
     
  • 3.43, User294 (ok), 15:35, 25/03/2011 [^] [ответить]     [к модератору]
  • +/
    Дык это, натой чтобы закомпилить свой кернель под такую железяку Благо их как г... весь текст скрыт [показать]
     
     
  • 4.46, pavlinux (ok), 15:51, 25/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Я собственна о том, что покупая МИПС АРМ уже надо знать шо таке кросс-компиляция... весь текст скрыт [показать]
     
  • 1.3, 123qwe (?), 13:45, 20/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А какие-нибудь performance тесты не проводили? Есть ли какой-нибудь реальный смысл во всем этом?
     
     
  • 2.5, andrewlap (?), 15:30, 20/03/2011 [^] [ответить]     [к модератору]  
  • +2 +/
    Тесты не проводились, в интернете о подобных тестах ничего нет Я раньше на Gent... весь текст скрыт [показать]
     
     
  • 3.7, Anonimous (?), 19:44, 20/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Думаю перекомпиляция ядра в производительности заметно не добавит. Вот пересборка glibc, GTK, QT думаю даст процентов 10-15. Не факт что при этом не добавится трудновоспроизводимых глюков.
     
     
  • 4.32, Карбофос (ok), 12:00, 22/03/2011 [^] [ответить]    [к модератору]  
  • +/
    перекомпильни, да замеряй утилитой bootchart. посмотри графики, подумай.
     
  • 4.44, User294 (ok), 15:44, 25/03/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    Регулярно вижу криворуких уродов с понятно какой системой , которые сперва как ... весь текст скрыт [показать]
     
  • 4.49, Иван Иванович Иванов (?), 21:05, 25/03/2011 [^] [ответить]    [к модератору]  
  • +1 +/
    10-15% ???

    я вас жутко разочарую - в общем случае это будет 0-3%.

     
  • 4.54, bircoph (ok), 21:22, 04/04/2011 [^] [ответить]     [к модератору]  
  • +/
    Гентушники тихо хохочут в сторонке Грамотная пересборка всей системы даёт от 10... весь текст скрыт [показать]
     
  • 2.30, non anon (?), 10:29, 22/03/2011 [^] [ответить]     [к модератору]  
  • +3 +/
    Проводили, и не раз Естественно, толку никакого Задрачивание флагов компиляции... весь текст скрыт [показать]
     
     
  • 3.36, Вова (?), 11:02, 23/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Я вполне себе юн и свеж, а под гентой уже более 5 лет, и так и думал, как и вы, ... весь текст скрыт [показать]
     
     
  • 4.37, pavel_simple (ok), 20:21, 23/03/2011 [^] [ответить]     [к модератору]  
  • +/
    gt оверквотинг удален а ведь мог почеловечески перекодировать фильм в mpeg2 ... весь текст скрыт [показать]
     
     
  • 5.42, Вова (?), 18:43, 24/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Но нам простых дел не поручают.
     
  • 5.45, User294 (ok), 15:46, 25/03/2011 [^] [ответить]    [к модератору]  
  • +/
    > а ведь мог почеловечески перекодировать фильм в mpeg2

    Что, серебряных пуль и осиновых кольев на всех не хватило?! Некроманы за человеков не считаются!

     
  • 4.47, Аноним (-), 18:26, 25/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Кстати да Правда на 720p, но и на более слабом проце vdpau, как оказалось, н... весь текст скрыт [показать]
     
  • 2.31, crypt (??), 11:34, 22/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Когда я н лет назад развлекался пересборкой ядра, то не стряпал в дцатый раз пос... весь текст скрыт [показать]
     
     
  • 3.34, andrewlap (?), 14:59, 22/03/2011 [^] [ответить]    [к модератору]  
  • +/
    кто то тестит, кто то пишет статьи, у каждого свой путь

     
  • 1.4, anoni (?), 13:49, 20/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Так лабораторка - компиляция ядра, вариант №4 - Core Duo, а вот Саньку не повезло, вариант №7 - armv5tejl. Он теперь себе ищет коробочку с таким :(
     
  • 1.8, Аноним (-), 20:49, 20/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    если при компиляции ядра посмотреть на те опции которые используютя при компиляции(ps af | grep cc1), то там почему-то нету тех опций которые заданы через export CFLAGS="..."
     
     
  • 2.9, pavel_simple (ok), 21:40, 20/03/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    хоть до одного дошло, что кто-то жОстко троллит ... весь текст скрыт [показать]
     
  • 2.10, andrewlap (?), 21:43, 20/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Вот сейчас проверял у меня ps af 124 grep cc1 выдаёт следующее _ usr lib ... весь текст скрыт [показать]
     
     
  • 3.12, pavlinux (ok), 23:02, 20/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Сам придумал code native This selects the CPU to tune for at... весь текст скрыт [показать]
     
     
  • 4.13, andrewlap (?), 23:11, 20/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Не понял чо не так?
    Поправьте если лучше знаете.
    Насчёт -fno-omit-frame-pointer не в курсе, не специалист
     
     
  • 5.17, pavlinux (ok), 23:34, 20/03/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    Долго рассказывать Хотите поменять флаги компиляции ядра Тогда меняйте их Гл... весь текст скрыт [показать]
     
     
  • 6.19, andrewlap (?), 00:01, 21/03/2011 [^] [ответить]     [к модератору]  
  • +/
    вот жесть то можот ну его нафик ... весь текст скрыт [показать]
     
     
  • 7.21, pavlinux (ok), 00:47, 21/03/2011 [^] [ответить]    [к модератору]  
  • +/
    > вот жесть то! можот ну его нафик?

    Конечно нафиг, там и так всё нормально, тем более, что
    -pipe и -fomit-frame-pointer и так по умолчанию есть.

     
  • 3.14, Аноним (-), 23:12, 20/03/2011 [^] [ответить]    [к модератору]  
  • +/
    -mtune=core2 у вас проставлены потому что вы при конфигурировании ядра задали "Processor family" core2
     
     
  • 4.15, andrewlap (?), 23:13, 20/03/2011 [^] [ответить]    [к модератору]  
  • +/
    > -mtune=core2 у вас проставлены потому что вы при конфигурировании ядра задали "Processor
    > family" core2

    вы уверены?

     
     
  • 5.16, Аноним (-), 23:29, 20/03/2011 [^] [ответить]     [к модератору]  
  • +/
    у меня -march выставляет только в зависимости от опции в конфиге Processor fami... весь текст скрыт [показать]
     
     
  • 6.18, pavlinux (ok), 23:42, 20/03/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    Да не использует ядро переменную CFLAGS из окружения Проверить легко - надо за... весь текст скрыт [показать]
     
     
  • 7.20, andrewlap (?), 00:28, 21/03/2011 [^] [ответить]    [к модератору]  
  • +/
    В общем вывод делаем такой:
    1. переменные окружения на параметры компиляции не влияют
    2. Оптимизация под процессор выставляется в опциях ядра make menuconfig "Processor family"
     
     
  • 8.22, pavlinux (ok), 00:56, 21/03/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    для 32-х битов есть ещё REGPARM на Core2Duo Athlon64 и выше можно врубить CONFIG... весь текст скрыт [показать]
     
     
  • 9.23, andrewlap (?), 13:03, 21/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Что то не нашёл я у себя в ядре опций REGPARM и CONFIG_JUMP_LABEL
    CONFIG_OPTIMIZE_INLINING есть
    может у меня ядро не то? 2.6.35
    Не 500 страниц я ниасилю, тем более наверняка на инглише,
    к оптимизации ядра я уже давно перегорел, сижу на стандартном и не дёргаюс.

    Но эти опции в переменных окружения всё равно полезно выставлять, так как те программы которые ты будешь компилировать из исходников будут компиляться с этими параметрами

     
  • 9.39, JL2001 (ok), 13:37, 24/03/2011 [^] [ответить]    [к модератору]  
  • +/
    >> В общем вывод делаем такой:
    >> 1. переменные окружения на параметры компиляции не влияют
    >> 2. Оптимизация под процессор выставляется в опциях ядра make menuconfig "Processor family"
    > для 32-х битов есть ещё REGPARM
    > на Core2Duo/Athlon64 и выше можно врубить CONFIG_JUMP_LABEL
    > на gcc 4.х и выше CONFIG_OPTIMIZE_INLINING
    > на AMD64: SMT (Hyperthreading) scheduler  вырубить, врубить только  Multi-core scheduler
    > Вам ещё страниц 500, про оптимизацию ядра? :)

    мне бы скриптик который проанализировав моё железо выставил нужные настройки под мою машину.. но это же линукс, тут так походу не принято, автоматизация для слабых виндузятников

     
     
  • 10.40, andrewlap (?), 17:44, 24/03/2011 [^] [ответить]    [к модератору]  
  • +/

    > мне бы скриптик который проанализировав моё железо выставил нужные настройки под мою
    > машину.. но это же линукс, тут так походу не принято, автоматизация
    > для слабых виндузятников

    весь виндавозный мир сидит на дефолтовом ядре и не гундит

     
  • 10.41, pavlinux (ok), 18:02, 24/03/2011 [^] [ответить]    [к модератору]  
  • +/
    >[оверквотинг удален]
    >>> 1. переменные окружения на параметры компиляции не влияют
    >>> 2. Оптимизация под процессор выставляется в опциях ядра make menuconfig "Processor family"
    >> для 32-х битов есть ещё REGPARM
    >> на Core2Duo/Athlon64 и выше можно врубить CONFIG_JUMP_LABEL
    >> на gcc 4.х и выше CONFIG_OPTIMIZE_INLINING
    >> на AMD64: SMT (Hyperthreading) scheduler  вырубить, врубить только  Multi-core scheduler
    >> Вам ещё страниц 500, про оптимизацию ядра? :)
    > мне бы скриптик который проанализировав моё железо выставил нужные настройки под мою
    > машину.. но это же линукс, тут так походу не принято, автоматизация
    > для слабых виндузятников

    Ну в Венде тоже есть ключи реестра, которые, кроме особо посвящённых,
    не знают как использовать.

     
  • 3.48, Аноним (-), 18:38, 25/03/2011 [^] [ответить]     [к модератору]  
  • +/
    Кстати, gcc 4 5 может и в более ранних версиях выдаёт чуть больше оптимизаций,... весь текст скрыт [показать]
     
  • 1.24, suseuser (?), 17:36, 21/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Компиляция ядра дает выигрыш в том случае, когда вы выбираете нужные драйверы, службы и т.д., а удаляете не нужные. В этом случае ядро становится компактным без лишнего, не нужного ВАМ кода. В остальных случаях ядро компилят с включением каких-то специализированных патчей, например, для протокола SPICE. И в том и в другом случае напортачить можно на раз, поэтому если нужна производительность - отказывайтесь от универсальных дистрибутивов в пользу заточенных под определенную задачу
     
     
  • 2.25, andrewlap (?), 17:49, 21/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Я в это не верю.
    Сейчас в дистрибутивах ядро весит не более 10 Мб, при этом обычно разработчики дистрибутивов включают в ядро самое необходимое, а доп опции компилируют модулями, которые подключаются автоматически, если обнаруживается соответствующее оборудование или ПО либо при указании вручную в соотвествующих конфигах.
    Я потрачу несколько дней чтобы убрать всё ненужное из ядра, и что бы оно при этом компилялось, что бы оно полегчало пусть на 1 МБ? Оно мне надо? У меня памяти несколько Гигов, своп вообще не юзается, я таких ядер десятками в памяти держать могу.
     
     
  • 3.26, slavon (??), 18:37, 21/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Вопросы веры тут не обсуждаются, здесь в основном люди факты любят.
    Монолит собранный из нужных частей всегда будет работать быстрее. Доказывать ничего не собираюсь, велком ту мир ASM.
     
  • 3.28, suseuser (?), 08:30, 22/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Возьмите в качестве примера звуковую карту на сервере (файловом, почтовом, СУБД и т.д.): на фига будет выполнятся эти инструкции (по прерыванию) на этом сервере. Остальное, я думаю, додумаете сами
     
     
  • 4.29, wessenhizer (ok), 10:14, 22/03/2011 [^] [ответить]    [к модератору]  
  • +/
    Ну да, разве что в этом случае, позволит сэкономить несколько тактов процессорного времени
     
  • 1.27, vit (??), 20:27, 21/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    под убунтой на ноутах можен не скомпилится. нашел багрепорт
    https://bugs.launchpad.net/ubuntu/+source/linux/+bug/505420
    там костыль есть для быстрого решения проблеммы
    ln -s /usr/src/linux-2.6.35/ubuntu /ubuntu
     
  • 1.33, Евгений (??), 14:21, 22/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А с какими опциями лучше собирать ядро под процессор core i5 2300(Sandy Bridge) ?
     
     
  • 2.35, Аноним (-), 09:26, 23/03/2011 [^] [ответить]    [к модератору]  
  • –1 +/
    > А с какими опциями лучше собирать ядро под процессор core i5 2300(Sandy
    > Bridge) ?

    linux=remove, windows=install, очевидно же. если не знаешь, не лезь.

     
     
  • 3.55, Пупкин (?), 09:00, 05/04/2011 [^] [ответить]    [к модератору]  
  • +/
    >> А с какими опциями лучше собирать ядро под процессор core i5 2300(Sandy
    >> Bridge) ?
    > linux=remove, windows=install, очевидно же. если не знаешь, не лезь.

    Класс ответ. А если не лезть то хер когда узнаешь.

     
  • 1.38, nobody (??), 09:38, 24/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    в этой статье неверные данные

    читайте хотя бы http://forums.gentoo.org/viewtopic-t-24849-start-0.html

    автору - сначала хорошо поищи информацию, нечего людей дизинформировать

     
  • 1.50, Андрей (??), 17:27, 27/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Вот смотрю я на опции выбора CPU в ядре (да и в GCC), и думаю, Intel Core 2 == Phenom II? А то на Athlon 64 всё так с AMD и застыло.
     
     
  • 2.53, kamiram (?), 00:42, 01/04/2011 [^] [ответить]    [к модератору]  
  • +/
    кажись для xp и x2 есть варианты. или у меня это патчи?
     
  • 1.51, Андрей (??), 17:30, 27/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    И ещё: регулярно исполбзую make-kpkg, но пока не удалось после нанесения очередного patch-2.6.xx.x пересобрать пакет без полного предшествующего make-kpkg clean. А нужно-то было бы всего несколько (пропатченных) файлов перекомпилить, вместо всего ядра. Или есть у make-kpkg где-то такая фича, чтобы гибче было?
     
  • 1.52, Dmitry (??), 20:31, 31/03/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Чет не пойму к чему это все и зачем, сделайте нормальную wiki страницу под разными CPU + описание ключей компиляции и типовые тесты, бенчмарки к ним, вот тогда было бы с чем сравнить и видеть куда оптимизировать. А так каждый изобретает свое колесо ....  в своем понимании формата колеса ....
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor