Май 24 2010

Kernel

Published by

Ядро — сердце системы, которое в дефолтном варианте перегружено кучей лишних фишек и поддержкой огромного количества железа.

Например, зачем нужна поддержка десятков звуковых карточек и сетевух на домашней системе, которая будет стоять только на этой машине? Если собирать liveCD/DVD/Flash, то конечно это всё надо.
Чтобы выкинуть из ядра горы мусора (в нашем случае) ядро придётся перебрать.для тех кто никогда этого не делал есть хороший хау-ту
Ставим ядро 2.6 или Ядерная физика для домохозяйки впрочем google поможет найти сотни других копий и версий

Может кому пригодится —  русский перевод опций ядра
Исходники ядра можно взять из репозитариев дистрибутива или найти неофициальные (содержащие новые возможности и изменения  неодобренные Линусом Торвальдсом, возможно пока)
например http://zen-kernel.org
Ядра этого проекта содержат много фишек, которых нет в официальном ядре,например:
BFS, SLQB и множество других
посмотреть содержашиеся в этом ядре фичи можно здесь http://zen-kernel.org/included-code
чтобы добавить эти функции в ядро можно наложить патч http://zen-kernel.org/news

но эти патчи не всегда ложатся на ядро из дистрибутива,поэтому лучше добавить репозитарий zen-kernel
в gentoo

layman -a zen-sources

для других дистрибутивов http://zen-kernel.org/tutorials/distribution-specific-installation
всё лишнее выключаем — будь то железо или софт (при конфигурации ядра доступны help-ы по всем (почти) пунктам) — процессор только тот, что установлен — сеть, звук, контроллеры…аналогично. Если не уверены, что что-то не нужно — ставим модулем, также и драйвера железа, используемого лишь иногда, ставим модулем — принтеры, телефоны, камеры и т.д.
нужные модули для установленного железа можно посмотреть вот так

lspci -k | grep -i driver | sort -u | cut -d " " -f 5 && lspci -k | grep -i modules | sort -u | cut -d " " -f 3

или просто

lspci -k

если есть HAL (с вероятностью 99% он есть)

lshal | grep -i driver | sort -u | cut -d "'" -f2

показывает больше нужных модулей(но не все) включая usb устройства


впрочем касательно лишних модулей ( читай поддержка не нужного железа ) в ядрах >=2.6.32 добавили скрипт, который сравнивает загруженные в данный момент модули и те, чья поддержка включена в ядре, если находит лишние модули, то он их отключает, сохраняя настройки в «.config» вызывается он командой в директории исходников ядра ( обычно /usr/src/linux )

make localmodconfig

если будет ругаться на то что нет /sbin/lsmod

ln -s /bin/lsmod /sbin/lsmod

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

make localyesconfig



Если вы не собираетесь использовать initrd, то драйвер контроллеров, к которым подключены ваши диски,и драйвер корневой файловой системы обязательно должны быть В ЯДРЕ!если же эти драйвера сделать модулем — ядро не увидит корневую фс и не сможет загрузить систему!



  • General setup—>Configure standard kernel features (for small systems) включает скрытые настройки ядра, такие, как поддержка процессоров, suspend, hybernate и другие ( если не уверены — не стоит включать — в описании одной из скрытых опций написано следующее «Disabling this option saves about 4k and might cause you much additional grey hair.») стоит прислушаться :)
  • General setup—>Choose SLAB allocator—>(X) SLUB (Unqueued Allocator) (дефолт)

если ядро zen-source то

  • General setup—>Choose SLAB allocator—>(X) SLQB (более быстрый аллокатор нежели SLUB)

если не zen, то можно попробовать наложить патч SLQB

  • General setup—>Profiling support если не знаете что такое и не занимаетесь разработкой софта — отключаем
  • General setup—>Initial RAM filesystem and RAM disk (initramfs/initrd) support — если не используете initrd и ramdisk — отключаем
  • Processor type and features  —> MTRR (Memory Type Range Register) support (дефолт — оставляем )
  • Processor type and features  —> x86 PAT support (включаем)
  • Processor type and features  —>Timer frequency—>(1000 HZ) (не для всех процессоров-для Core2Duo самое оно)(повышает отзывчивость системы,но немного снижает производительность) для ноутов лучше по-меньше — меньше прерываний — меньше сажает батарею.

В zen ядре или после наложения патчей Кона Коливаса есть возможность повысить эту частоту вплоть до 10000Hz

  • Processor type and features  —>Preemption Model—>Preemptible Kernel (Low-Latency Desktop)(так же повышает отзывчивость и немного снижает производительность)
  • Processor type and features  —> Tickless System (Dynamic Ticks) для десктопа выключить, для ноута включить (меньше холостых прерываний — меньше сажает батарею)
  • Kernel hacking —>Compile the kernel with frame pointers (отключаем — это сделает ядро меньше и быстрее и выкинет отладочную информацию — если занимаетесь debug-ом ядра, то не стоит отключать)

везде где возможно отключаем debug если этим самым дебагом не занимаетесь (а так же смотрите Strip)

  • Kernel hacking —>IO delay type выбираем no port-IO delay это на некоторых железках помогает избежать известного бага с io wait (12309)
  • General setup—>Optimize for size

если включено,то ядро будет собираться с -Os (оптимизация размера) если отключить то с -O2 об этом здесь GCC

у меня очередное ядро при сборке с -Os получилось 2.6 Mb с -O2 — 2.9 Mb (bzImage)(в ядре были дрова для контроллеров,сетевой и звука)на процессорах intel рекомендуется собирать с -O2 т.к в этом случае применяется выравнивание,повышающее производительность на этих процессорах включая Core i7

для Celeron-ов и Atom-ов можно оставить -Os т.к. у них маленький кэш

  • Processor type and features —>Symmetric multi-processing support (включаем для многоядерных процов)
  • Networking support —>Networking options —>The IPv6 protocol (отключаем — большинству он не нужен)
  • Kernel hacking —>[*] Show timing information on printks — поможет отследить время загрузки ядра и наиболее медленные моменты


Для экстремалов

This page has the following sub pages.

5 responses so far

5 Responses to “Kernel”

  1. megabakson 17 Ноя 2010 at 12:27

    советую патчик для страдающих от 12309
    для 35 https://sites.google.com/site/linuxoptimization/home/kernel/sched_autogroup-2.6.35.patch?attredirects=0&d=1
    для 36 http://pavlinux.ru/krnl/sched_autogroup-2.6.36.patch.bz2
    для 37 http://marc.info/?l=linux-kernel&m=128978361700898&w=2
    НЕ дружит с bfs

  2. megabakson 19 Ноя 2010 at 05:52

    а можно ещё лучше сделать без пересборки ядра

    #!/bin/bash

    for user in `grep '/home/' /etc/passwd|grep -v 'nologin'|cut -d: -f1`;
    do
    if [[ -d `grep $user /etc/passwd|grep -v 'nologin'|cut -d: -f6` ]]; then
    export X_USER=`echo $X_USER $user|tr " " ","`;
    fi
    done

    while [[ `pidof X` ]]
    do
    sleep 2 && ionice -n 7 -t -c 3 -p `pgrep -u root -v X` &>/dev/null || exit 1
    sleep 2 && ionice -n 0 -t -c 1 -p `pgrep -u $X_USER && pidof X` &>/dev/null || exit 1
    sleep 2 && renice -n -19 -p `pgrep -u $X_USER && pidof X ` &>/dev/null || exit 1
    sleep 2 && renice -n 20 -p `pidof kswapd0` &>/dev/null || exit 1
    exit 0
    done

    и

    #!/bin/bash
    PROGRAMMS="dd ktorrent eiskaltdcpp-qt eiskaltdcpp-gtk rtorrent deluged transmission-daemon"

    while [[ `pidof X` ]]
    do
    for prog in $PROGRAMMS;
    do
    sleep 2 && renice -n 20 -p `pgrep $prog` &>/dev/null
    sleep 2 && ionice -n 7 -t -c 3 -p `pgrep $prog` &>/dev/null
    done
    done

    и прописать запуск этих скриптов в /etc/rc.local или /etc/conf.d/local или что там у кого есть из аналогов и добавив в конец &
    например

    sleep 4 && /home/megabaks/scripts/renice/renice &
    sleep 1 && /home/megabaks/scripts/renice/test &
  3. anon_666on 13 Янв 2011 at 02:32

    Предлагаю определиться с циклом в первом скрипте, и переписать оба скрипта, например:

    #!/bin/bash

    X_USER=`awk -F: '/\/home\//&&!/nologin/{i=i?i","$1:$1}END{print i}' /etc/passwd`

    #while pidof X; do
      i=`pgrep -u $X_USER; pidof X`
      ionice -n 7 -c 3 -p `pgrep -u root -v X`
      ionice -n 0 -c 1 -p $i
      renice -n -19 -p $i
      renice -n 20 -p `pidof kswapd0`
      #sleep 5
    #done
    #!/bin/bash

    PROGRAMS='kio_file dd ktorrent eiskaltdcpp-qt eiskaltdcpp-gtk rtorrent deluged transmission-daemon'

    while pidof X; do
      for i in $PROGRAMS; do
        i=`pidof $i`
        renice -n 0 -p $i
        ionice -n 4 -c 0 -p $i
      done
      sleep 5
    done
  4. Made_in_Chinaon 18 Дек 2011 at 21:20

    > ядро не увидит корневуЯ фс

    *корневую

  5. megabakson 18 Дек 2011 at 22:14

    корневуЯ

    fixed

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress