The OpenNET Project / Index page

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

Оптимизация отзывчивости десктоп-системы через использование cgroup в Linux
По заявлению одного из разработчиков из компании Red Hat добиться эффекта
существенного повышения отзывчивости десктоп-систем в условиях большой фоновой
нагрузки, связанной с запуском ресурсоемких задач, можно через использование
cgroup без дополнительных патчей Linux-ядра. Более того, утверждается что
cgroup-метод работает даже лучше патча с привязкой групп планирования к TTY.

Метод проверен на Linux-ядре 2.6.32.

В /etc/rc.local добавляем:

   mkdir -p /dev/cgroup/cpu
   mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
   mkdir -m 0777 /dev/cgroup/cpu/user


В ~/.bashrc:

   if [ "$PS1" ] ; then  
        mkdir -m 0700 /dev/cgroup/cpu/user/$$
        echo $$ > /dev/cgroup/cpu/user/$$/tasks
   fi

Для автоматического удаления групп, в которых больше нет процессов:

создать /usr/local/sbin/cgroup_clean

   #!/bin/sh
   rmdir /dev/cgroup/$1

в rc.local добавить:

   echo "1" > /dev/cgroup/cpu/user/notify_on_release
   echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent
 
18.11.2010 , Автор: Stax , Источник: http://www.opennet.ru/openforum/vsl... (доп. ссылка 1)
Раздел:    Корень / Администратору / Система / Linux специфика / Оптимизация и тюнинг в Linux

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, o_o (?), 20:13, 17/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
    mount: неизвестный тип файловой системы 'cgroup'
     
     
  • 2.2, IceMan (?), 20:37, 17/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Самосборное или древнее ядро? =)
     

  • 1.3, assaron (?), 21:11, 17/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    кто-нибудь может объяснить как оно работает?
     
     
  • 2.4, asddas (?), 01:44, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    дает всем право переводить процессы между группами, на каждую сессию шела создает новую группу.
     
     
  • 3.11, pavlinux (ok), 16:42, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > на каждую сессию шела создает новую группу.

    Фигу! На каждый процесс с форками из шелла создаёт новую группу.
    То есть процесс и его форки будут в одной группе, а fork + exec уже в другой.

     
  • 3.12, User294 (ok), 18:19, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > дает всем право переводить процессы между группами,

    Мне кажется или это не прикольно, когда кто угодно может контейнеры перефигаривать?!

     
     
  • 4.17, pavlinux (ok), 05:34, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Дык, Торвальдц тому товрищу так и написал, что мол vulnerable кастылек твой парниша!!!
     

  • 1.5, Аноним (-), 03:03, 18/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Есть такая вещь, как libcg. Она умеет это делать без ручных манипуляций...
     
  • 1.6, Аноним (-), 03:30, 18/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В Fedora есть пакет libcgroup со скриптами в /etc/init.d, которые делают что-то похожее.
    только непонятно нужно ли ещё добавлять что-то в ~/.bashrc или достаточно скриптов из libcgroup?
     
     
  • 2.7, anonymous (??), 09:06, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > В Fedora есть пакет libcgroup со скриптами в /etc/init.d, которые делают что-то
    > похожее.

    Насколько я сужу по моей ф14 то тама это по дефаульту выключено и вообще вроде это вся борода тама для lxc ... ( который юзается через libvirtd, жаль что еще virt-manager до поддержки lxc не допилили :)  ( тама это токо в роадмапе) )


     

  • 1.8, анонимус (??), 16:03, 18/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>~/.bashrc

    так это только для баш субпроцессов работает чтоли?

     
     
  • 2.10, Crazy Alex (??), 16:35, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Да. Но идея, думаю, понятна, расширить не проблема. В частности - добавить соответствующие строки во врапперы для "тяжелого" софта. А так - говорят, в systemd будет позитрее механику управления группами.
     

  • 1.9, Crazy Alex (??), 16:33, 18/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надо еще пару действий добавить для автоматического удаления групп, в которых больше нет процессов:

    создать /usr/local/sbin/cgroup_clean
    --cut--
    #!/bin/sh

    rmdir /dev/cgroup/$1
    --cut--

    в rc.local добавить:
    --cut--
    echo "1" > /dev/cgroup/cpu/user/notify_on_release
    echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent
    --cut--

     
     
  • 2.13, Crazy Alex (??), 18:47, 18/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ошибся (у меня расположение другое). Если монтируется в /dev/cgroup/cpu, то в /usr/local/sbin/cgroup_clean, соответственно, и кладём

    rmdir /dev/cgroup/cpu/$1

     

  • 1.14, Аноним (-), 22:51, 18/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь заметил повышение отзывчивости с использованием cgroup?
     
     
  • 2.15, Logo (ok), 02:01, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Да.
    На Федоре 14 make -j40, Файрфокс работает гладко, окна двигаются с незначительными застряганиями, даже не верится, что процессор на 80-100% два ядра загружены.

    Но! Без нагрузки заметны застрягания при работе с окнами в KDE-4. Иногда система не отзывается до 20 секунд. При перемещении окон, при скроле в консолях наблюдаются рывки, что вызывает дискомфорт.
    -------------

    На SUSE сказало, что неизвестная файловая система cgroup (перекомпилировать ядро не стал). Ну и естественно  make -j40 полностью парализовал работу.

     
     
  • 3.18, vvvua (ok), 09:50, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А если попробовать консольке из которой будут зваться "тяжелые" процессы nice поднять?
     
     
  • 4.19, Logo (ok), 11:55, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    При чем тут nice, я попробовал данный метод и ответил, ниже написал поправку и все.
     
     
  • 5.21, vvvua (ok), 19:08, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > При чем тут nice, я попробовал данный метод и ответил, ниже написал
    > поправку и все.

    Мне интересно поведение Вашей системы в том же тесте в сравнении с nice, так как сам не пробовал. Ничего другого своим вопросом не хотел сказать.

     
     
  • 6.22, Logo (ok), 21:18, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ok. Проверю.
     
  • 6.24, Logo (ok), 22:12, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот: собираем inkscape-0.48.0

    Включаем   cgroup
    # make -j40
    Все красиво ютубе без рывков и застряганий, файрфокс при скролинге немного равками идет. Время сборки 7 минут, около 10 секунд отнесем на "люфт".


    Отключаем  cgroup
    # make clean
    # reboot
    # nice --adjustment=19 make -j40
    Сиcтема ведет себя, так, как будто вовсе никакой компиляции нет.
    Время сборки 6 минут и пару секунд.

    Пусть даже была погрешность в 1 минуту, то и тогда, помойму, нет смысла в  cgroup.
    # uname -sro
    > Linux 2.6.35.6-48.fc14.x86_64 GNU/Linux

     
     
  • 7.36, vvvua (ok), 09:47, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо. Вы подтвердили моё предположение, что cgroup один из многих элементов влияния на шедулер Linux'а для небольшого количества пользователей, которым влом (или пока не умеют) использовать nice и подобное.
    Имеет смысл включать cgroup в предустановленных системах. Например в нетбуках.
     
     
  • 8.48, Crazy Alex (??), 23:28, 01/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    cgroups могут ограничить гораздо больше, чем только процессорное время То ест... текст свёрнут, показать
     
  • 3.26, Roman (??), 00:06, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    на какой сусе? у меня 11.2 и все заработало...
     
     
  • 4.27, Logo (ok), 00:35, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    OpenSUSE 11.3
    2.6.34.7-0.5-desktop

     
     
  • 5.28, Roman (??), 00:37, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > OpenSUSE 11.3
    > 2.6.34.7-0.5-desktop

    блин, а я ее себе на новую машину поставил ((

     
     
  • 6.29, Logo (ok), 00:48, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> OpenSUSE 11.3
    >> 2.6.34.7-0.5-desktop
    > блин, а я ее себе на новую машину поставил ((

    Ну и что? Система хорошая, практически все работает. А за ядром не угнаться, либо сам пересобирай.

     
     
  • 7.45, stranger (??), 14:15, 24/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Десктопное ядро там без cgroups. Если оно вам надо ставьте ядро -default.
     

  • 1.16, Logo (ok), 03:37, 19/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    *** Монтировать нужно в  /sys/fs/cgroup ***
    *** Это избавит от застряганий и рывков ***

    в rc.local пишем:
    mount -t cgroup cgroup /sys/fs/cgroup -o cpu
    mkdir -m 0777 /sys/fs/cgroup/user

    echo "1" > /sys/fs/cgroup/user/notify_on_release
    echo "/usr/local/sbin/cgroup_clean" > /sys/fs/cgroup/release_agent
    ---------------------

    в ~/bashrc пишем:
    if [ "$PS1" ] ; then  
       mkdir -m 0700 /sys/fs/cgroup/user/$$
       echo $$ > /sys/fs/cgroup/user/$$/tasks
    fi
    ---------------------

    в /usr/local/sbin/cgroup_clean пишем:
    #!/bin/sh  
    rmdir /sys/fs/cgroup/$1
    ----------------------

    Работает без проблем. При монтировании в /dev/ у меня на Fedora 14, после интенсивной нагрузки система дергалась, а при монтировании в /sys/fs/ все OK!

     
     
  • 2.20, Stax (ok), 15:59, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно.. На самом деле, рекомендацию монтировать в /dev/cgroup я взял из документации ядра (Documentation/cgroups/cgroups.txt), там показано использование именно /dev/cgroup. Но с sys вполне работает.
     
     
  • 3.23, pavlinux (ok), 21:58, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Да это пофигу куда монтировать. Это ж VFS.

    Хотя, самым оптимальным будет каталог в корне, из одной буквы,
    то есть  mount -t cgroup cgroup /a -o cpu.

    Угадайте почему? :)


      

     
     
  • 4.25, Logo (ok), 22:17, 19/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Да это пофигу куда монтировать. Это ж VFS.
    > Хотя, самым оптимальным будет каталог в корне, из одной буквы,
    > то есть  mount -t cgroup cgroup /a -o cpu.
    > Угадайте почему? :)

    Возможно, пока в эту суть не вникал.


     
     
  • 5.30, pavlinux (ok), 01:21, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> Да это пофигу куда монтировать. Это ж VFS.
    >> Хотя, самым оптимальным будет каталог в корне, из одной буквы,
    >> то есть  mount -t cgroup cgroup /a -o cpu.
    >> Угадайте почему? :)
    > Возможно, пока в эту суть не вникал.

    строка для open и подобных короче :)

    open("/a", ....) или  
    open("/dev/cgroup/cpu/user/", ....)

    нанасекунды решают всё :)

     
     
  • 6.32, Logo (ok), 02:02, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Да это пофигу куда монтировать. Это ж VFS.
    >>> Хотя, самым оптимальным будет каталог в корне, из одной буквы,
    >>> то есть  mount -t cgroup cgroup /a -o cpu.
    >>> Угадайте почему? :)
    >> Возможно, пока в эту суть не вникал.
    > строка для open и подобных короче :)
    > open("/a", ....) или
    > open("/dev/cgroup/cpu/user/", ....)
    > нанасекунды решают всё :)

    Заинтриговал. Сейчас попробую :)


     
     
  • 7.33, Logo (ok), 02:58, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Смонтировал в /0/u
    Собираю inkscape
    Вроде немного плавнее скролинг в файрфоксе.
    Время сборки 00:08:46 :(
     
     
  • 8.34, pavlinux (ok), 03:05, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Блин, я ж пошутил, там действительно разница в пару микросекунд ... текст свёрнут, показать
     
     
  • 9.35, Logo (ok), 03:27, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Зато без прибамбасов make -j40 --- 00 06 26 и никакого кино c nice --adjustmen... текст свёрнут, показать
     
  • 2.37, mevlad (?), 21:11, 20/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    м. б. как-то так:

    # yum -y install libcgroup libcgroup-pam

    #echo "vlad cpu users/vlad/" >> /etc/cgrules.conf

    # cat >> /etc/cgconfig.conf << EOF
    group users/vlad {
        perm {
            task {
                uid = vlad;
                gid = vlad;
            }
            admin {
                uid = root;
                gid = vlad;
            }
       }
       cpu {
          cpu.shares = 2048;
          notify_on_release =1;
       }
    }
    EOF

    # echo "session  optional pam_cgroup.so" >> /etc/pam.d/su

    # chkconfig cgconfig  on

    # chkconfig cgred on

    # service cgconfig start

    # servive cgreg start

     
     
  • 3.39, zillah (?), 09:01, 22/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > # echo "session  optional pam_cgroup.so" >> /etc/pam.d/su

    почему в su?

     
     
  • 4.40, mevlad (?), 05:02, 23/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    в смысле?
     
     
  • 5.41, zillah (?), 06:17, 23/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > в смысле?

    А тупо, каким образом модуль в su поможет пользователю?
    Оно не грузится при логоне, открытии новой сессии...
    Или я что-то не допонял, хотелось бы допонять, так как этот вариант мне больше импонирует нежели чем "ручной".

     
     
  • 6.42, mevlad (?), 21:09, 23/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    это был пример использования pam-модуля.
    в данном случаи идея в том, чтобы использовать те же правила для пользователя, если он выполняет нечто через su
     
     
  • 7.44, zillah (?), 06:27, 24/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > это был пример использования pam-модуля.
    > в данном случаи идея в том, чтобы использовать те же правила для
    > пользователя, если он выполняет нечто через su

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

    До кучи нарылась проблема, толи wine толи NV libGL к такому оказались не готовы... эххх.

     
     
  • 8.46, mevlad (?), 23:48, 24/11/2010 [^] [^^] [^^^] [ответить]  
  • +/
    на fedora 14 работает, проверял про пример использования pam-модуля имелись в... текст свёрнут, показать
     
  • 3.47, Pavel (??), 00:09, 27/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    У меня также получилось, но вот вопрос: как работает cpu.shares = 512 ?, я запустил от пользователя burnMMX - но всеравно в top я вижу что 99% процессора использует burnMMX.
    Как лимитировать процессор?
     

  • 1.38, pavlinux (ok), 14:03, 21/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    меж тем, появился второй вариант патча

    http://groups.google.com/group/linux.kernel/msg/4346cbca04f92350?hl=en&dmode=

     
  • 1.43, pavlinux (ok), 21:28, 23/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    4-й вариант
    http://groups.google.com/group/linux.kernel/browse_frm/thread/a012df180affc8d
     


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




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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