Google Группы больше не поддерживают новые публикации и подписки в сети Usenet. Опубликованный ранее контент останется доступен.
Закрыть

Динамически включать-выключать CPU

67 просмотров
Перейти к первому непрочитанному сообщению

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 06:40:0206.09.2011
Всем привет!

Вопрос - а можно ли вот так развернуть линух на двухпроцессорной системе, чтобы он не использовал второй процессор, пока не сказали? А потом сказали ещё раз и снова видел один процессор.

Это я всё к зависательной теме на Pentium D. maxcpus=1 помогает железно. Ядро 3.0 не помогает. Прогуглился и пробую параметры ядра, но два разных варианта (clocksource=acpi_pm highres=off no_hz=off и skip_acpi_timer_override no_hz=off) привели к _более быстрому_ зависанию. Сейчас тестируется irqpoll, если повиснет - следующим будет notsc. Но этот номер всё-таки может не пройти.

Меня вполне устраивает работа системы с maxcpus=1 для всего, кроме просмотра HD media. В идеале можно было бы встроить в скрипты для просмотра (а они и так уже скрипты, на отдельный X screen показывают) включение второго CPU и затем отключение.

Однако нагугленное решение http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/ вешает систему сразу. (Я загружался без maxcpus и пытался отключить второй процессор через  echo 0 > /sys/devices/system/cpu/cpu1/online).

Возможно ли такое на самом деле, или только через перезагрузку?

--
Yours, Mikhail Ramendik

Unless explicitly stated, all opinions in my mail are my own and do not reflect the views of any organization

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 06:50:0106.09.2011
Anton Kovalenko <an...@sw4me.com> writes:

>> Вопрос - а можно ли вот так развернуть линух на двухпроцессорной
>> системе, чтобы он не использовал второй процессор, пока не сказали? А
>> потом сказали ещё раз и снова видел один процессор.
>
> А всем подряд поставить affinity mask через schedtool -- не оно?
> (наследоваться при форк() будет).

Вдогонку: плюс /proc/irq/default_smp_affinity для прерываний,
и не запускать/снести irqbalance.

--
Regards, Anton Kovalenko
+7(916)345-34-02 | Elektrostal' MO, Russia

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 06:50:0106.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> Вопрос - а можно ли вот так развернуть линух на двухпроцессорной
> системе, чтобы он не использовал второй процессор, пока не сказали? А
> потом сказали ещё раз и снова видел один процессор.

А всем подряд поставить affinity mask через schedtool -- не оно?
(наследоваться при форк() будет).

Dmitry Nezhevenko

не прочитано,
6 сент. 2011 г., 08:10:0306.09.2011
On Tue, Sep 06, 2011 at 11:33:14AM +0100, Mikhail Ramendik wrote:
> Всем привет!
>
> Вопрос - а можно ли вот так развернуть линух на двухпроцессорной системе,
> чтобы он не использовал второй процессор, пока не сказали? А потом сказали
> ещё раз и снова видел один процессор.

/sys/devices/system/cpu/cpuX/online должно работать.
Когда остается 1 CPU, ядро автоматом переключается на UP.

> Это я всё к зависательной теме на Pentium D. maxcpus=1 помогает железно.
> Ядро 3.0 не помогает. Прогуглился и пробую параметры ядра, но два разных
> варианта (clocksource=acpi_pm highres=off no_hz=off и
> skip_acpi_timer_override no_hz=off) привели к _более быстрому_ зависанию.
> Сейчас тестируется irqpoll, если повиснет - следующим будет notsc. Но этот
> номер всё-таки может не пройти.

acpi=off еще попробуй. Но это совсем грустно.

> Меня вполне устраивает работа системы с maxcpus=1 для всего, кроме просмотра
> HD media. В идеале можно было бы встроить в скрипты для просмотра (а они и
> так уже скрипты, на отдельный X screen показывают) включение второго CPU и
> затем отключение

А если во время просмотра зависнет?

> Однако нагугленное решение
> http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/вешает


> систему сразу. (Я загружался без maxcpus и пытался отключить второй
> процессор через echo 0 > /sys/devices/system/cpu/cpu1/online).
> Возможно ли такое на самом деле, или только через перезагрузку?

На исправном железе работает:

[158000.796138] CPU 1 is now offline
[158000.796147] SMP alternatives: switching to UP code

[158004.924321] SMP alternatives: switching to SMP code
[158004.935597] Booting Node 0 Processor 1 APIC 0x1
[158004.935605] smpboot cpu 1: start_ip = 99000
[158000.696216] CPU1: Thermal monitoring handled by SMI
[158005.032020] Switched to NOHz mode on CPU #1

--
WBR, Dmitry

signature.asc

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 10:50:0106.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> Проблема в том, что мне в единственном случае, когда нужно оба ядра -
> то есть mplayer - надо два треда одного приложения на разных ядрах :)

Насколько я могу понять, это разрешается. То есть

- при загрузке isolcpus=1 означает: «по умолчанию ядро #1 оставь в
покое».

- про mplayer через schedtool или cpuset можно сказать: «а вот эту бяку
запусти на двух ядрах» (affinity mask 3).

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 10:50:0106.09.2011

2011/9/6 Anton Kovalenko <an...@sw4me.com>
Mikhail Ramendik <m...@ramendik.ru> writes:

>     А всем подряд поставить affinity mask через schedtool -- не оно?
>     (наследоваться при форк() будет).
>
> А как совсем всему поставишь включая ядрёные ;) процессы, которые,
> вероятно, и вешают?

Нашёл только что в kernel-parameters:

       isolcpus=       [KNL,SMP] Isolate CPUs from the general scheduler.
                       Format:
                       <cpu number>,...,<cpu number>
                       or
                       <cpu number>-<cpu number>
                       (must be a positive range in ascending order)
                       or a mixture
                       <cpu number>,...,<cpu number>-<cpu number>

По описанию получается, что указанные CPU использоваться не будут, пока
явно туда что-то не засунуть (опять же через affinity mask).

Проблема в том, что мне в единственном случае, когда нужно оба ядра - то есть mplayer - надо два треда одного приложения на разных ядрах :)

--

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 11:10:0206.09.2011
2011/9/6 Anton Kovalenko <an...@sw4me.com>


 - при загрузке isolcpus=1 означает: «по умолчанию ядро #1 оставь в
  покое».

 - про mplayer через schedtool или cpuset можно сказать: «а вот эту бяку
  запусти на двух ядрах» (affinity mask 3).

Спасибо, это вероятно то решение которое я искал. Будем пробовать. Пробовать будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off, с ним почему-то виснем быстро).

Иван Лох

не прочитано,
6 сент. 2011 г., 12:10:0206.09.2011
On Tue, Sep 06, 2011 at 04:04:25PM +0100, Mikhail Ramendik wrote:
> 2011/9/6 Anton Kovalenko <an...@sw4me.com>

> >
>
> Спасибо, это вероятно то решение которое я искал. Будем пробовать. Пробовать
> будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off, с ним
> почему-то виснем быстро).

Ну поставь тики на HZ=50000 -- вообще виснуть не будет ;-}}}


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110906160...@nano.ioffe.rssi.ru

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 13:10:0206.09.2011
2011/9/6 Иван Лох <l...@1917.com>

 
> Спасибо, это вероятно то решение которое я искал. Будем пробовать. Пробовать
> будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off, с ним
> почему-то виснем быстро).

Ну поставь тики на  HZ=50000 -- вообще виснуть не будет ;-}}}



Гм, а работать оно при этом тоже не будет, да  - весь проц уйдёт на обработку прерываний? ;) И кстати, а с чего не будет, если при no_hz=off как раз виснет?

Иван Лох

не прочитано,
6 сент. 2011 г., 13:20:0106.09.2011
On Tue, Sep 06, 2011 at 06:04:22PM +0100, Mikhail Ramendik wrote:
> > > будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off, с
> > ним
> > Ну поставь тики на HZ=50000 -- вообще виснуть не будет ;-}}}
> Гм, а работать оно при этом тоже не будет, да - весь проц уйдёт на
> обработку прерываний? ;) И кстати, а с чего не будет, если при no_hz=off как
> раз виснет?

Черт. Запутался в отрицаниях.

P.S. Я то думал тут логический пародокс, а он просто виснет под нагрузкой.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/20110906171...@nano.ioffe.rssi.ru

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 16:00:0106.09.2011
2011/9/6 Иван Лох <l...@1917.com>

> > > будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off, с
Черт. Запутался в отрицаниях.

P.S. Я то думал тут логический пародокс, а он просто виснет под нагрузкой.


Прикол в том, что под реальной пользовательской нагрузкой (например напроигрывании HD) оно если и виснет, то не чаще чем без нагрузки. А от no_hz=off вдруг взяло и стало виснуть куда быстрее. Что бы это могло быть? При maxcpus=1 не виснет вовсе. Таки "подгоревшее" второе ядро - при исправном первом?

Да, irqpoll не помог. Следующий в очереди вариант - как раз isolcpus=1 . Есть конечно ещё notsc, вроде бы напрямую с SMP связано - но clocksource=acpi_hz уже не помогло, может ли в этом случае помочь notsc?

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 16:00:0206.09.2011
2011/9/6 Mikhail Ramendik <m...@ramendik.ru>
clocksource=acpi_hz уже не помогло,

разумеется clocksource=acpi_pm . Не помогло. Оно было дано вместе с no_hz=off  highres=off, поэтому как раз тогда и зависло быстро.

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 16:10:0106.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> 2011/9/6 Mikhail Ramendik <m...@ramendik.ru>
>
> clocksource=acpi_hz уже не помогло,
>
> разумеется clocksource=acpi_pm . Не помогло. Оно было дано вместе с
> no_hz=off  highres=off, поэтому как раз тогда и зависло быстро.

[Это с моей стороны гадание на кофейной гуще, но]
насколько вы уверены, что проблема в CPU? я историю злоключений не
фиксировал (сейчас пойду почитаю старые треды), но сомнения растут.

Какой-нибудь кривой драйвер может от многоядерности ломаться запросто
(тогда isolcpus=1 будет прямо в точку, как я понимаю).

В консоли (натуральной-линуксовой-vcsa) вешаться пробовали? Иногда там
можно углядеть что-то полезное на прощанье, если она иксами не закрыта.

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 16:20:0206.09.2011
2011/9/6 Anton Kovalenko <an...@sw4me.com>

У меня нет надёжного способа повесить систему. Она просто виснет в непонятные моменты, обычно после многих часов работы, обычно НЕ под большой нагрузкой, но всё-таки что-то на машине делают. Поэтому "взять и повесить в консоли" просто нечем.

Разве что если бы была возможность вывалить на DVI-монитор консоль, пока на VGA-мониторе иксы? Или на встроенную SiS VGA консоль, пока на AGP Nvifia иксы?

И ещё. Я только что прогуглился на тему isolcpus и, возможно, что-то нашёл. https://bugzilla.novell.com/show_bug.cgi?id=171500

Чипсет у материнской платы - именно SiS! Конкретно SiS 661FX/SiS964.

Но:

# ls /etc/init.d/ir*
ls: cannot access /etc/init.d/ir*: No such file or directory

Значит irqbalanced нет. Но может быть как-то по-другому IRQ CPU affinity ловится?

...и пока я по ssh искал, прямо в ssh-ную консоль кое-что вывалилось. Правда, машина при этом не зависла, но может это поможет?

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.487764] Oops: 0000 [#1] SMP

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.487769] last sysfs file: /sys/devices/pci0000:00/0000:00:0a.0/subsystem_device

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.487915] Process kswapd0 (pid: 31, ti=f6d38000 task=f6c372c0 task.ti=f6d38000)

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.487918] Stack:

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.487957] Call Trace:

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.488027] Code: 45 04 89 44 24 04 eb 23 ff 74 24 20 89 f2 89 d8 8d 4c 24 0c e8 da f1 ff ff 01 44 24 04 58 83 7c 24 08 00 74 16 8b 46 34 8d 70 cc <8b> 46 34 0f 18 00 90 8d 46 34 39 44 24 04 75 cd fe 45 00 03 3c

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.488090] EIP: [<c10a272f>] page_referenced+0x93/0xf4 SS:ESP 0068:f6d39ea4

Message from syslogd@ramendik at Sep  6 21:11:34 ...
 kernel:[ 7436.488099] CR2: 0000000040000004


Иван Лох

не прочитано,
6 сент. 2011 г., 17:20:0106.09.2011
On Tue, Sep 06, 2011 at 08:51:50PM +0100, Mikhail Ramendik wrote:
> 2011/9/6 Иван Лох <l...@1917.com>
>
> >
> > > > > будем долгоЮ зависания случаются не сращу (ну кроме как с no_hz=off,
> > с
> > Черт. Запутался в отрицаниях.
> >
> > P.S. Я то думал тут логический пародокс, а он просто виснет под нагрузкой.
> >
> >
> Прикол в том, что под реальной пользовательской нагрузкой (например
> напроигрывании HD) оно если и виснет, то не чаще чем без нагрузки. А от
> no_hz=off вдруг взяло и стало виснуть куда быстрее. Что бы это могло быть?
> При maxcpus=1 не виснет вовсе. Таки "подгоревшее" второе ядро - при
> исправном первом?

Уф. Давайте по порядку. Вы заметили на работающей системе процессор на двухядерный,
после чего начались зависания. Причем зависает только графический интерфейс.

Мануал к материнской плате явно указывает, что она совместима с этим процессором.
Установлен BIOS последней версии. Что Вы еще меняли кроме процессора?

Температура на процессоре, северном мосту, видеокарте, как я понял, в пределах нормы?

Попробуйте Quake3 в больших дозах и смотрите на температуру.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/20110906211...@nano.ioffe.rssi.ru

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 17:50:0206.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> ...и пока я по ssh искал, прямо в ssh-ную консоль кое-что вывалилось.
> Правда, машина при этом не зависла, но может это поможет?
>
> Message from syslogd@ramendik at Sep  6 21:11:34 ...
>  kernel:[ 7436.487764] Oops: 0000 [#1] SMP

(Остальное отложим пока)
dmesg запостите, если процитированная сессия ещё не померла, плз.
и хорошо бы zgrepпнуть /var/log/* на похожее -- там может быть
поинтересенее.

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 20:20:0106.09.2011
2011/9/6 Иван Лох <l...@1917.com>

> Прикол в том, что под реальной пользовательской нагрузкой (например
> напроигрывании HD) оно если и виснет, то не чаще чем без нагрузки. А от
> no_hz=off вдруг взяло и стало виснуть куда быстрее. Что бы это могло быть?
> При maxcpus=1 не виснет вовсе. Таки "подгоревшее" второе ядро - при
> исправном первом?

Уф. Давайте по порядку. Вы заметили на работающей системе процессор на двухядерный,
после чего начались зависания. Причем зависает только графический интерфейс.

Что зависает - я не понимаю. С одной стороны, при зависе доигрался звук с youtube. С другой - на пинги не отвечает, не говоря об ssh.
 

Мануал к материнской плате явно указывает, что она совместима с этим процессором.
Установлен BIOS последней версии. Что Вы еще меняли кроме процессора?

Ни-че-го.
 

Температура на процессоре, северном мосту, видеокарте, как я понял, в пределах нормы?

Да. Хотя на северном мосту и видеокарте я её "замеряю" руками. На северном мосту воткнут вентилятор. На видеокарте (GF6200 с пассивным охлаждением) заменена термопаста, она была засохшая.
 

Попробуйте Quake3 в больших дозах и смотрите на температуру.

На досуге попробую, но сначала с affinity etc доиграюсь.

Иван Лох

не прочитано,
6 сент. 2011 г., 21:00:0106.09.2011
On Wed, Sep 07, 2011 at 01:14:11AM +0100, Mikhail Ramendik wrote:
> >
> > Мануал к материнской плате явно указывает, что она совместима с этим
> > процессором.
> > Установлен BIOS последней версии. Что Вы еще меняли кроме процессора?
>
> Ни-че-го.

А напряжение на процессоре не проседает?

> >
> > Температура на процессоре, северном мосту, видеокарте, как я понял, в
> > пределах нормы?
> >
>
> Да. Хотя на северном мосту и видеокарте я её "замеряю" руками. На северном
nvidia-settings должны показывать температуру


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110907005...@nano.ioffe.rssi.ru

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 21:30:0206.09.2011
2011/9/7 Иван Лох <l...@1917.com>

On Wed, Sep 07, 2011 at 01:14:11AM +0100, Mikhail Ramendik wrote:
> >
> > Мануал к материнской плате явно указывает, что она совместима с этим
> > процессором.
> > Установлен BIOS последней версии. Что Вы еще меняли кроме процессора?
>
> Ни-че-го.

А напряжение на процессоре не проседает?

Обычно - вроде бы нет. А "прямо в тот момент" мне его не видно.
 

> >
> > Температура на процессоре, северном мосту, видеокарте, как я понял, в
> > пределах нормы?
> >
>
> Да. Хотя на северном мосту и видеокарте я её "замеряю" руками. На северном
nvidia-settings должны показывать температуру

Драйвер nvidia давно убран, с ним искать причины зависов как-то не очень осмысленно. Под виндой, под prime95, выше примерно 63 градусов температура GPU не поднималась. Конечно, на 3D может быть и горячее - но я не использую 3D. И вообще зависания происходят даже с драйвером nv, который про ускоритель вообще ничего интересного не знает.

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 21:50:0206.09.2011
2011/9/6 Dmitry Nezhevenko <di...@inhex.net>

On Tue, Sep 06, 2011 at 11:33:14AM +0100, Mikhail Ramendik wrote:
> Всем привет!
>
> Вопрос - а можно ли вот так развернуть линух на двухпроцессорной системе,
> чтобы он не использовал второй процессор, пока не сказали? А потом сказали
> ещё раз и снова видел один процессор.

/sys/devices/system/cpu/cpuX/online должно работать.
Когда остается 1 CPU, ядро автоматом переключается на UP.

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

Впрочем, уже выяснилось, что все прерывания почему-то обрабатываются только на cpu1, так что оно неудивительно.

 

acpi=off еще попробуй. Но это совсем грустно.

Пробовал. Не помогло.
 

> Меня вполне устраивает работа системы с maxcpus=1 для всего, кроме просмотра
> HD media. В идеале можно было бы встроить в скрипты для просмотра (а они и
> так уже скрипты, на отдельный X screen показывают) включение второго CPU и
> затем отключение

А если во время просмотра зависнет?

А нестрашно. Плохо - данные потерять. А при просмотре какие данные?
 

> Однако нагугленное решение
> http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/вешает
> систему сразу. (Я загружался без maxcpus и пытался отключить второй
> процессор через  echo 0 > /sys/devices/system/cpu/cpu1/online).
> Возможно ли такое на самом деле, или только через перезагрузку?

На исправном железе работает:

       [158000.796138] CPU 1 is now offline
       [158000.796147] SMP alternatives: switching to UP code

Когда я попробовал в текстовой консоли, то кажется эти две строки и увидел. "Кажется" потому, что они быстро уехали - на клавиатуре Enter "залип".

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 21:50:0206.09.2011
2011/9/7 Mikhail Ramendik <m...@ramendik.ru>
$ cat /proc/interrupts
            CPU0       CPU1      
   0:         45          1   IO-APIC-edge      timer
   1:          0          2   IO-APIC-edge      i8042
   3:          0          2   IO-APIC-edge   
   4:          0          2   IO-APIC-edge   
   6:          0          2   IO-APIC-edge      floppy
   7:          0          0   IO-APIC-edge      parport0
   8:          0          0   IO-APIC-edge      rtc0
   9:          0          0   IO-APIC-fasteoi   acpi
  12:          0          4   IO-APIC-edge      i8042
  14:          0        906   IO-APIC-edge      pata_sis
  15:          0          0   IO-APIC-edge      pata_sis
  17:          0      12106   IO-APIC-fasteoi   sata_sis

Выяснилось, что если оставить все IRQ affinity в f (не менять с загрузки), все прерывания всё равно обрабатывает CPU 1.

Это, наверное, чипсет SiS такой "добрый". Интересно, уж не от этого ли виснем? С учётом того что при no_hz=off виснем быстрее - может и от этого, хотя с места я не вижу, чему бы тут виснуть.

Пока что сделал isolcpus=1 и проставил во все affinity 2 - чтобы ядро имело информацию, соответствующую реальному положению дел. Проверю, зависнет ли.

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 22:00:0106.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> Упс. Прошу прощения. Приложил.

Это что, /var/log/dmesg (или лог свежезагруженной машины)?
Sorry, я имел в виду то, что выводит /bin/dmesg после оопса или оопсов.


> Пока что воюю с IRQ affinity. Нарисовал скрипт-сервис:
isolcpus=1 в default_smp_affinity само не переходит?

Локальный таймер, TLB shootdown, rescheduling и др. вы не перекинете
(хотя освобождение ядра от процессов делает их реже),
irq affinity имеет смысл только для IO-*, PCI-*.


P.S. А что будет, если
- maxcpus=1
- нагрузить вычислительно
- плюс одновременно нагрузить по I/O (оба харда)?

Если это по ведомству питания и напряжения, в результате должно
довольно быстро упасть -- будем знать, что maxcpus помогает не
"железно", и вообще копаться с программной стороны смысла нет.

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 22:10:0106.09.2011
2011/9/7 Anton Kovalenko <an...@sw4me.com>

 
> Упс. Прошу прощения. Приложил.

Это что, /var/log/dmesg (или лог свежезагруженной машины)?
Sorry, я имел в виду то, что выводит /bin/dmesg после оопса или оопсов.

Прошу прощения, не знал, а теперь уж поздно :(
 

> Пока что воюю с IRQ affinity. Нарисовал скрипт-сервис:
isolcpus=1 в default_smp_affinity само не переходит?

Этого я не очень понял, но по факту, вне зависимости от isolcpus и irq affinity, все APIC прерывания идут исключительно на  CPU1.


P.S. А что будет, если
 - maxcpus=1
 - нагрузить вычислительно
 - плюс одновременно нагрузить по I/O (оба харда)?

Попробую. А как гарантированно нагрузить харды на I/O, чтобы именно харды, а не кэш?
 

Иван Лох

не прочитано,
6 сент. 2011 г., 22:10:0106.09.2011
On Wed, Sep 07, 2011 at 05:58:15AM +0400, Anton Kovalenko wrote:
>
> P.S. А что будет, если
> - maxcpus=1
> - нагрузить вычислительно
> - плюс одновременно нагрузить по I/O (оба харда)?
>
> Если это по ведомству питания и напряжения, в результате должно
> довольно быстро упасть -- будем знать, что maxcpus помогает не
> "железно", и вообще копаться с программной стороны смысла нет.

Так он ядро отключит и энергопотребление резко упадет.

Лучше что-нибудь солидное в USB подключить.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110907020...@nano.ioffe.rssi.ru

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 22:20:0106.09.2011
2011/9/7 Иван Лох <l...@1917.com>

On Wed, Sep 07, 2011 at 05:58:15AM +0400, Anton Kovalenko wrote:
>
> P.S. А что будет, если
>  - maxcpus=1
>  - нагрузить вычислительно
>  - плюс одновременно нагрузить по I/O (оба харда)?
>
>  Если это по ведомству питания и напряжения, в результате должно
>  довольно быстро упасть -- будем знать, что maxcpus помогает не
>  "железно", и вообще копаться с программной стороны смысла нет.

Так он ядро отключит и энергопотребление резко упадет.

В смысле, maxcpus=1 самим фактом резко уменьшает энергопотребление?
 

Лучше что-нибудь солидное в USB подключить.

Ну, 3G модем имеется. Но я задолбаюсь с драйверами :(

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 22:30:0206.09.2011
Иван Лох <l...@1917.com> writes:

>> Если это по ведомству питания и напряжения, в результате должно
>> довольно быстро упасть -- будем знать, что maxcpus помогает не
>> "железно", и вообще копаться с программной стороны смысла нет.
>
> Так он ядро отключит и энергопотребление резко упадет.

Вы правы [а я еще лет пять буду привыкать, что цпу столько жрут].

2MR: irqpoll надо убирать, когда эксперимент направлен на «повалить», а
не на «вдруг пофиксили?»

Mikhail Ramendik

не прочитано,
6 сент. 2011 г., 22:40:0106.09.2011
2011/9/7 Anton Kovalenko <an...@sw4me.com>


>>  Если это по ведомству питания и напряжения, в результате должно
>>  довольно быстро упасть -- будем знать, что maxcpus помогает не
>>  "железно", и вообще копаться с программной стороны смысла нет.
>
> Так он ядро отключит и энергопотребление резко упадет.

Вы правы [а я еще лет пять буду привыкать, что цпу столько жрут].

2MR: irqpoll надо убирать, когда эксперимент направлен на «повалить», а
не на «вдруг пофиксили?»


irqpoll уже давно убрал, поскольку оно с ним тоже зависло. Я собственно хочу узнать, как нагрузить оба HDD с гарантией и при этом недеструктивно. После этого погоняю, с полчаса, для начала без maxcpus. Если завалится - либо прерывания либо питание. Вот тогда попробую так же гонять, но с maxcpus=1.

Но "просто нагрузить процессор" я пробую решгулярно (тот самый просмотр HD, ради коего вообще огород городил). Не валится.

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 22:50:0206.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> irqpoll уже давно убрал, поскольку оно с ним тоже зависло. Я
> собственно хочу узнать, как нагрузить оба HDD с гарантией и при этом
> недеструктивно. После этого погоняю, с полчаса, для начала без
> maxcpus. Если завалится - либо прерывания либо питание. Вот тогда
> попробую так же гонять, но с maxcpus=1.

Я не уверен, что хорошо сейчас соображаю, но сделал бы так:

hdparm --direct -t (в цикле) на одном хдд, либо на обоих;
(это тестовое чтение без кэширования);

(классическое) компиляция ядра (в цикле) в разделе на другом хдд;
Если будет maxcpu=1, цели "повалить" поспособствует make -jN, N>1

(опционально) добавить cpuburn по вкусу, пускать и убивать с коротким
периодом.

Anton Kovalenko

не прочитано,
6 сент. 2011 г., 23:00:0206.09.2011
Anton Kovalenko <an...@sw4me.com> writes:

> hdparm --direct -t (в цикле) на одном хдд, либо на обоих;
> (это тестовое чтение без кэширования);
>
> (классическое) компиляция ядра (в цикле) в разделе на другом хдд;
> Если будет maxcpu=1, цели "повалить" поспособствует make -jN, N>1
>
> (опционально) добавить cpuburn по вкусу, пускать и убивать с коротким
> периодом.

... и железки для USB, которые от порта подзаряжаются/питаются --
воткнуть, пусть и без драйвера (USB-пылесос сгодится тоже).

Mikhail A Antonov

не прочитано,
7 сент. 2011 г., 02:50:0107.09.2011
07.09.2011 06:11, Mikhail Ramendik пишет:
> Ну, 3G модем имеется. Но я задолбаюсь с драйверами :(
Обычно "задолбаюсь" сводится к установке usb-modeswitch.
Я тоже думал первый раз что задолбаюсь.


--
Best regards,
Mikhail.

signature.asc

Mikhail Ramendik

не прочитано,
7 сент. 2011 г., 19:00:0207.09.2011

2011/9/6 Anton Kovalenko <an...@sw4me.com>

> Проблема в том, что мне в единственном случае, когда нужно оба ядра -
> то есть mplayer - надо два треда одного приложения на разных ядрах :)

Насколько я могу понять, это разрешается. То есть


 - при загрузке isolcpus=1 означает: «по умолчанию ядро #1 оставь в
  покое».

 - про mplayer через schedtool или cpuset можно сказать: «а вот эту бяку
  запусти на двух ядрах» (affinity mask 3).


А вот не проходит :(

Ядро загружено с isolcpus=1 . И пока что полёт нормальный, не висим. Хотя это пока недостаточное время чтобы убедиться. Все задачи на CPU 0.

taskset 2 ./ubench - честно загружает CPU 1.

Но вот taskset 3 mplayer file.mkv -lavdopts threads=2 - только CPU0 :( и делит его с Xorg (ну это понятно, драйвер пока что nv - просто из того что делит с XOrg видно что это именно CPU0).

taskset 0xf mplayer file.mkv -lavdopts threads=2 - тот же результат.

Вот можно ли как-то, при наличии isolcpus, сделать задачу "на все процессоры", чтобы треды раскидались по разным процессорам?

(Или это уже вопрос для LKML? Именно про isolcpus vs. task affinity, а не про дебаггинг данной конкретной системы)

Mikhail Ramendik

не прочитано,
7 сент. 2011 г., 19:30:0207.09.2011
2011/9/7 Anton Kovalenko <an...@sw4me.com>:

> Sorry, я имел в виду то, что выводит /bin/dmesg после оопса или оопсов.

Есть новый оопс. Ядро 3.0 без параметров (только ro).

Дублирую в рассылку. Да - система на этот раз зависла через примерно
три минуты после оопса.

[ 247.062434] BUG: unable to handle kernel paging request at fd0a1340
[ 247.062445] IP: [<c10b25e7>] unlink_anon_vmas+0x5d/0xe1
[ 247.062462] *pdpt = 000000000148b001 *pde = 0000000000000000
[ 247.062470] Oops: 0002 [#1] SMP
[ 247.062477] Modules linked in: ppdev lp cpufreq_conservative
cpufreq_userspace cpufreq_powersave cpufreq_stats speedstep_lib
acpi_cpufreq mperf autofs4 fuse it87 hwmon_vid loop saa7134_alsa
ir_lirc_codec lirc_dev snd_intel8x0 zl10036 snd_ac97_codec mt312
ir_sony_decoder ac97_bus ir_jvc_decoder snd_pcm_oss snd_mixer_oss
ir_rc6_decoder arc4 snd_pcm snd_seq_midi ir_rc5_decoder rt2800pci
saa7134_dvb rt2800lib snd_rawmidi snd_seq_midi_event snd_seq
parport_pc parport tpm_tis tpm tpm_bios ir_nec_decoder videobuf_dvb
dvb_core crc_ccitt rt2x00pci rt2x00lib snd_timer snd_seq_device
mac80211 saa7134 cfg80211 rc_core rfkill snd eeprom_93cx6
videobuf_dma_sg videobuf_core v4l2_common soundcore videodev
snd_page_alloc media shpchp tveeprom pci_hotplug button processor
i2c_core evdev psmouse pcspkr serio_raw ext3 jbd mbcache sg sd_mod
crc_t10dif sr_mod cdrom usbhid ata_generic hid sata_sis ohci_hcd
pata_sis ehci_hcd libata usbcore scsi_mod fan sis900 mii floppy
thermal thermal_sys [last unloaded: scsi_wait_scan]
[ 247.062599]
[ 247.062604] Pid: 3028, comm: automount Not tainted 3.0.0-1-686-pae
#1 /661 7MJ
[ 247.062613] EIP: 0060:[<c10b25e7>] EFLAGS: 00010206 CPU: 1
[ 247.062618] EIP is at unlink_anon_vmas+0x5d/0xe1
[ 247.062622] EAX: fd0a1340 EBX: f5740fc8 ECX: f52ac284 EDX: f7227a90
[ 247.062626] ESI: f551a6e4 EDI: f5480900 EBP: f52ac22c ESP: f513bea4
[ 247.062630] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[ 247.062635] Process automount (pid: 3028, ti=f513a000 task=f72cbae0
task.ti=f513a000)
[ 247.062638] Stack:
[ 247.062640] f7227a88 f52ac268 f52ac22c 00000000 f52ac22c b76c9000
c10a9b05 f513beec
[ 247.062653] f52a38b4 f52ac334 f72bdc80 f513beec bfc8e000 c10af203
00000000 ffffffff
[ 247.062664] f513bf28 00000000 f72bdc80 80000001 00000001 f51d4000
f51d4000 00000008
[ 247.062676] Call Trace:
[ 247.062685] [<c10a9b05>] ? free_pgtables+0x47/0x92
[ 247.062690] [<c10af203>] ? exit_mmap+0x92/0xbd
[ 247.062699] [<c1034464>] ? mmput+0x4e/0xbf
[ 247.062704] [<c1038e45>] ? exit_mm+0x107/0x10f
[ 247.062712] [<c12ada94>] ? _raw_spin_lock_irq+0xb/0x16
[ 247.062717] [<c103905d>] ? do_exit+0x210/0x633
[ 247.062724] [<c10cb04e>] ? fput+0x149/0x161
[ 247.062729] [<c1039675>] ? do_group_exit+0x5c/0x7f
[ 247.062734] [<c10396a9>] ? sys_exit_group+0x11/0x14
[ 247.062740] [<c12b245f>] ? sysenter_do_call+0x12/0x28
[ 247.062744] Code: 53 10 89 c7 8b 43 14 89 42 04 89 10 8d 46 1c c7
43 10 00 01 10 00 c7 43 14 00 02 20 00 39 46 1c 74 20 8b 43 0c 8b 53
08 89 42 04
[ 247.062784] 10 89 d8 c7 43 08 00 01 10 00 c7 43 0c 00 02 20 00 e8 a6 f0
[ 247.062804] EIP: [<c10b25e7>] unlink_anon_vmas+0x5d/0xe1 SS:ESP 0068:f513bea4
[ 247.062812] CR2: 00000000fd0a1340
[ 247.062817] ---[ end trace d8f2b2e47293463f ]---
[ 247.062821] Fixing recursive fault but reboot is needed!

--
Yours, Mikhail Ramendik

Unless explicitly stated, all opinions in my mail are my own and do
not reflect the views of any organization

--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/CANq10gs+7LFo13wvE9VR9VE1...@mail.gmail.com

Mikhail Ramendik

не прочитано,
7 сент. 2011 г., 20:20:0207.09.2011
2011/9/8 Anton Kovalenko <an...@sw4me.com>:

> Эксперимент на тему <<пофиксить>> (соответственно, на него нужно много
> времени, зато в это время можно пользоваться машиной):
>
> Попробуйте автомонтирование отключить (autofs? autofs5?)
> и запретить поллинг устройств udisks (для этого надо пустить udisks
> --inhibit-all-polling в начале работы, и /не срубать/ его по Ctrl-C --
> пусть так и выполняется).

Поллинг udisks уже отключён, аж через udev.

autofs используется на монтирование DVD... в этом месте звучит "ёшкин
кот" и странные подозрения. Я подумаю на тему "пофиксить через так" -
просто тогда DVD в системе не будет. (Или есть какая-то вменяемая
автоматическая возможность без autofs и с _фиксированной_, а не как в
гноме, точкой монтирования?)


> Кроме того, в ядре 3.0-rc/pre и 2.6.39 точно трогали locking как раз в
> том месте, в котором у нас 2/3 оопсов;

Один оопс был на 2.6.32, два других (включая последний присланный) на
3.0, так что кажется не изменилось.

P.S. Про прерывания, идущие на CPU 1, я уже написал в LKML. Про
isolcpus (и запус к mplayer на два процессора) подожду - "в тех
кругах" есть мнение что лучше использовать не isolcpus, а cgroups, а в
них мне пока не удалось разобраться.

Mikhail Ramendik

не прочитано,
8 сент. 2011 г., 12:50:0208.09.2011
...продолжаем исследования.

DVD отключил. Не только autofs убрал, и не только сервис autofs
отключил,, но и физически PATA кабель выдернул (питание оставил). Все
опции ядра кроме ro убрал, ядро оставил штатное 2.6.32.

Дальше запустил:

- Две компиляции ядра (простое make в цикле) - на двух разных HDD
- После 45 минут нормального полёта добавил 2x hdparm -t (два разных
hdd) в цикле
- После ещё 30 минут добавил два ubench в цикле

И ещё где-то полтора часа всё это пролетало без явных проблем, потом
компьютер понадобился. Таким образом, доказать что виновато питание не
удалось. (USB пылесоса, к сожалению, нет.)

Будем смотреть. Если без DVD всё работает как часы - попробую вернуть
DVD без automount. Ушёл отсюда

Mikhail Ramendik

не прочитано,
8 сент. 2011 г., 15:00:0108.09.2011
2011/9/8 Mikhail Ramendik <m...@ramendik.ru>:

>
> - Две компиляции ядра (простое make в цикле) - на двух разных HDD
> - После 45 минут нормального полёта добавил 2x hdparm -t (два разных
> hdd) в цикле
> - После ещё 30 минут добавил два ubench в цикле
>
> И ещё где-то полтора часа всё это пролетало без явных проблем,

...потом была перезагрузка, а через 3-4 часа зависло - без всякой
особой нагрузки, просто почту читали в Thunderbird.

Кажется, нагрузка тут вовсе ни при чём, так что и питание вряд ли при чём.

Вернул isolcpus=1. Ест ли хоть какой-то способ заставить mplayer
давать два треда на разные CPU? Ну в конце концов в исходники лезть
что ли, thread affinity ставить?

Anton Kovalenko

не прочитано,
8 сент. 2011 г., 15:30:0108.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> Вернул isolcpus=1. Ест ли хоть какой-то способ заставить mplayer
> давать два треда на разные CPU? Ну в конце концов в исходники лезть
> что ли, thread affinity ставить?

affinity ставят на процесс, schedtool'ом:

schedtool -a 0xffffffff -e mplayer

(На дочерние процессы и на треды это тоже подействует -- унаследуется и
расползется).

Mikhail Ramendik

не прочитано,
8 сент. 2011 г., 16:00:0108.09.2011
2011/9/8 Anton Kovalenko <an...@sw4me.com>:

>> Вернул isolcpus=1. Ест ли хоть какой-то способ заставить mplayer
>> давать два треда на разные CPU? Ну в конце концов в исходники лезть
>> что ли, thread affinity ставить?
>
> affinity ставят на процесс, schedtool'ом:
>
>  schedtool -a 0xffffffff -e mplayer

Не помогло - работает только на CPU 0. (-lavdopts threads=2 разумеется
используется).

schedtool -a 0x2 mplayer - странные показания top - судя по всему
работает только на CPU 1, причём Xorg там же.

Попробовал schedtool -a 1,2 mplayer - тут mplayer pабрал весь CPU 1,
оставив XOrg на CPU 0.

А требуется mplayer на оба - один тред на одном, другой на другом.
Иначе не хватает.

Anton Kovalenko

не прочитано,
8 сент. 2011 г., 16:30:0208.09.2011
Mikhail Ramendik <m...@ramendik.ru> writes:

> Попробовал schedtool -a 1,2 mplayer - тут mplayer pабрал весь CPU 1,
> оставив XOrg на CPU 0.
>
> А требуется mplayer на оба - один тред на одном, другой на другом.
> Иначе не хватает.

Вы уверены, что он это вообще умеет? То есть ситуация, когда всё было в
порядке и он успевал -- наблюдалась, и там было два треда на разных CPU?
(когда-то точно не умел; если это не mplayer2 + ffmpeg-mt, то и сейчас
может не уметь...).

btw, у вас (если вывод на нвидию) -vo vdpau указано? (если вдруг нет --
тогда укажите).

Mikhail Ramendik

не прочитано,
8 сент. 2011 г., 17:00:0108.09.2011
2011/9/8 Anton Kovalenko <an...@sw4me.com>:

>> А требуется mplayer на оба - один тред на одном, другой на другом.
>> Иначе не хватает.
>
> Вы уверены, что он это вообще умеет? То есть ситуация, когда всё было в
> порядке и он успевал -- наблюдалась, и там было два треда на разных CPU?

Да, без isolcpus это именно так и работает.

> btw, у вас (если вывод на нвидию) -vo vdpau указано? (если вдруг нет --
> тогда укажите).

vdpau отсутствует. GeForce 6200.

Mikhail Ramendik

не прочитано,
8 сент. 2011 г., 19:10:0208.09.2011
2011/9/8 Mikhail Ramendik <m...@ramendik.ru>:

>>> А требуется mplayer на оба - один тред на одном, другой на другом.
>>> Иначе не хватает.
>>
>> Вы уверены, что он это вообще умеет? То есть ситуация, когда всё было в
>> порядке и он успевал -- наблюдалась, и там было два треда на разных CPU?
>
> Да, без isolcpus это именно так и работает.

А я нашёл инструменты, которые вроде бы делают то что надо.

Смысл в том, что нужно не делать isolcpus, а создать cpuset (это
всё-таки проще в употреблении, и в дебиановском ядре есть). И каким-то
образом запихнуть все процессы начиная с init в этот cpuset. Ну а
потом отправить mplayer в root cpuset.

man от идеального инструмента лежит вот тут:

http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man8/bootcpuset.8.html

К сожалению, это часть коммерческого SGI ProPack. А жаль.

Как я понял, тут несколько строк на Си, да только для этих нескольких
строк надо очень много. Например, как собрать результат так, чтобы он
действительно мог исполняться в качестве init, и какие системные
вызовы (ядерные?) можно при этом использовать. А также как получить
PID от init и успеть его запихнуть в /dev/cpuset/system_cpuset/tasks
_до_ того, как init спаунит другие процессы...

Заметно хуже, потому что не с самого начала, это похоже умеет вот
такая тулза http://code.google.com/p/cpuset/ .

В общем теперь буду действовать так:

- Подожду пару дней - действительно ли isolcpus=1 помогает от зависаний
- Если помогает, попробую гуглевскую утилиту
- Если утилита не решает вопрос - придётся пытаться реализовать bootcpuset.

Artem Chuprina

не прочитано,
9 сент. 2011 г., 02:00:0209.09.2011
> Как я понял, тут несколько строк на Си, да только для этих нескольких
> строк надо очень много. Например, как собрать результат так, чтобы он
> действительно мог исполняться в качестве init, и какие системные
> вызовы (ядерные?) можно при этом использовать. А также как получить
> PID от init и успеть его запихнуть в /dev/cpuset/system_cpuset/tasks
> _до_ того, как init спаунит другие процессы...

PID init'а равен 1.

--
Пришел в гости математик, почитать новую рукопись. Вычитал из нее трех
героев напрочь, и ушел.
Gimli on #arda


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/87vct2nttv.wl%r...@ran.pp.ru

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 06:20:0209.09.2011
2011/9/9 Artem Chuprina <r...@ran.pp.ru>:

>> Как я понял, тут несколько строк на Си, да только для этих нескольких
>> строк надо очень много. Например, как собрать результат так, чтобы он
>> действительно мог исполняться в качестве init, и какие системные
>> вызовы (ядерные?) можно при этом использовать. А также как получить
>> PID от init и успеть его запихнуть в /dev/cpuset/system_cpuset/tasks
>> _до_ того, как init спаунит другие процессы...
>
> PID init'а равен 1.

Смысл в том, что эта штука должна запускаться _вместо_ init (с PID 1),
создавать cpuset и запихивать в него настоящий init. Но я уже понял,
что ей достаточно сначала запихнуть в этот cpuset себя, а потом -
вызывать init. Для запмуска самой штуки используется параметр ядра
init=...

Но я категорически не представляю себе, что можно, а что нельзя
делать, будучи на месте init. Главный вопрос - у меня есть libc6 или у
меня её нет? Если есть - то эта штука собирается более-менее обычно и
работает более-менее обычно.

Victor Wagner

не прочитано,
9 сент. 2011 г., 07:30:0209.09.2011
On 2011.09.09 at 11:17:08 +0100, Mikhail Ramendik wrote:

> > PID init'а равен 1.
>
> создавать cpuset и запихивать в него настоящий init. Но я уже понял,
> что ей достаточно сначала запихнуть в этот cpuset себя, а потом -
> вызывать init. Для запмуска самой штуки используется параметр ядра
> init=...

Ага - вызвать init посредством exec, заместив им себя в текущем
процессе.

>
> Но я категорически не представляю себе, что можно, а что нельзя
> делать, будучи на месте init. Главный вопрос - у меня есть libc6 или у

Все что угодно.

> меня её нет? Если есть - то эта штука собирается более-менее обычно и

Сделай ldd /sbin/init

> работает более-менее обычно.

Я вообще на своих X-терминалах shell-овский скрипт в качестве init
использую. Прекрасно работаает. А все потому что мне лень было busybox
пересобирать, а в той версии debian-а на которой я терминал собирал,
в busybox init не собрали (хотя вообще-то он там есть).



--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110909111...@wagner.pp.ru

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 08:40:0209.09.2011
2011/9/9 Victor Wagner <vi...@wagner.pp.ru>:

> Я вообще на своих X-терминалах shell-овский скрипт в качестве init
> использую. Прекрасно работаает.

Хочу подробностей. ОЧЕНЬ хочу.

На шелле то, что я хочу, пишется без проблем. Вот оно:

#!/bin/sh
/bin/mkdir /dev/cpuset
/bin/mount -t cpuset - /dev/cpuset
/bin/mkdir /dev/cpuset/syscpuset
/bin/echo 0 >/dev/cpuset/syscpuset/cpus
/bin/echo $$ >/dev/cpuset/syscpuset/tasks
/sbin/init

Специально указал полные пути, исходя из того, что у нас ещё нет $HOME
и поэтому шелл не инициализируется вообще никак.

Но. Как в параметре ядра init указать нечто с параметрами?
"init=/bin/sh /bin/cpuset-hack", что ли?

Запуск mplayer после этого я, если я правильно понял, сделаю просто...

#!/bin/sh
rxvt -e mplayer -lavdopts=2 ... &
sudo echo `pidof mplayer` > /dev/cpuset/tasks

(Ну, реально ради безопасности вторая строка будет запуском отдельного
скрипта, чтобы именно его прописать в SUDOERS, но это уже не к той
теме).

Victor Wagner

не прочитано,
9 сент. 2011 г., 09:00:0309.09.2011
On 2011.09.09 at 13:37:30 +0100, Mikhail Ramendik wrote:

> 2011/9/9 Victor Wagner <vi...@wagner.pp.ru>:
>
> > Я вообще на своих X-терминалах shell-овский скрипт в качестве init
> > использую. Прекрасно работаает.
>
> Хочу подробностей. ОЧЕНЬ хочу.

Нет никаких подробностей. Просто работает.

> На шелле то, что я хочу, пишется без проблем. Вот оно:
>
> #!/bin/sh
> /bin/mkdir /dev/cpuset
> /bin/mount -t cpuset - /dev/cpuset
> /bin/mkdir /dev/cpuset/syscpuset
> /bin/echo 0 >/dev/cpuset/syscpuset/cpus
> /bin/echo $$ >/dev/cpuset/syscpuset/tasks
> /sbin/init

Последняя строчка должна быть exec /sbin/init
Чтобы процесс не форкался, а замещал шелл инитом.


> Специально указал полные пути, исходя из того, что у нас ещё нет $HOME
> и поэтому шелл не инициализируется вообще никак.

Оно от рута работает. А /root у нас уже есть. И /etc уже есть.
А вообще можно в начале скрипта написать PATH=/bin:/sbin

Далее, /bin/echo ты используешь зря. В большинстве шеллов есть
встроенная команда echo.


> Но. Как в параметре ядра init указать нечто с параметрами?
> "init=/bin/sh /bin/cpuset-hack", что ли?


Да не нужно тебе /bin/sh. Просто объяви cpuset-hack исполняемым.

#!/bin/sh

отрабатывается ядром, и оно вполне справится с поиском интерпретатора и
в данном случае.

И лучше все-таки эту штуку держать не в /bin, а в /sbin


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/20110909125...@wagner.pp.ru

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 20:40:0109.09.2011
2011/9/9 Victor Wagner <vi...@wagner.pp.ru>:

>> На шелле то, что я хочу, пишется без проблем. Вот оно:

> Последняя строчка должна быть exec /sbin/init
> Чтобы процесс не форкался, а замещал шелл инитом.

Ага. И ещё потребовалось echo 0 >/dev/cpuset/syscpuset/mems . После
этого оно заработало. Но куча задач осталась неперекинутой, поскольку
запускаются помимо init (включая kswapd0, в котором у меня oops'ы
были).

Я обнаружил, что лишнее перекинуть просто нельзя - на некоторые задачи
echo $pid >/dev/cpuset/syscpuset/tasks даёт write error. Но поскольку
перекидывать надо по одной строке, я не смог сделать это на шелле.
Сейчас у меня работает такое решение:

в ядре init=/sbin/cpuset-hack

файл /sbin/cpuset-hack , permissions 744 чтобы случайно не запустить:

#!/bin/sh
/bin/mkdir /dev/cpuset
/bin/mount -t cpuset - /dev/cpuset
/bin/mkdir /dev/cpuset/syscpuset

echo 0 >/dev/cpuset/syscpuset/cpus
echo 0 >/dev/cpuset/syscpuset/mems
echo $$ >/dev/cpuset/syscpuset/tasks
/sbin/cpuset-hack-python.py
exec /sbin/init

файл /sbin/cpuset-hack-python.py , permissions 744 по той же причине:

#!/usr/bin/python
f=open("/dev/cpuset/tasks")
tasks=f.readlines()
f.close()

for task in tasks:
try:
f=open("/dev/cpuset/syscpuset/tasks","w")
f.write(task)
f.close()
except IOError:
pass

Я конечно вижу, что это грязно, в общем случае на /usr нельзя
рассчитывать и надо на Си писать, но влом. Или этот же эффект как-то
достигается на shell+busybox?

И запуск mplayer нашёлся способ сделать (чуть хитрее чем я тут писал -
сначала отдать PID шелла в /dev/cpuset/tasks через sudo-скрипт, а
потом запустить из этого шелла mplayer).

А теперь вопрос - как бы мне выяснить, что это у меня за 20 задач,
которые не переносятся? Проверил у нескольких /proc/$pid/cmdline -
пусто. Но там и у kswapd0 пусто, а top как-то знает, что это именно
он. Как мне-то узнать? Гугль не помог :( Особенно это будет важно,
если выяснится что весь этот хак не работает, а isolcpus работает.

И ещё вопрос - а как мне в dmesg вякнуть? А то в лог не попишешь,
подмонтирован только корень и тот read only.

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 21:00:0109.09.2011
2011/9/10 Иван Лох <l...@1917.com>:

>> А теперь вопрос - как бы мне выяснить, что это у меня за 20 задач,
>> которые не переносятся? Проверил у нескольких /proc/$pid/cmdline -
>> пусто. Но там и у kswapd0 пусто, а top как-то знает, что это именно
>> он. Как мне-то узнать? Гугль не помог :( Особенно это будет важно,
>> если выяснится что весь этот хак не работает, а isolcpus работает.
>

> Это процессы в контексте ядра. Типично у них используемая память равна 0

И узнать, какой процесс как называется, никак нельзя? А то kswapd0
вроде тоже в контексте ядра должен быть, а top знает как его зовут.

>>
>> И ещё вопрос - а как мне в dmesg вякнуть? А то в лог не попишешь,
>> подмонтирован только корень и тот read only.
>

> hello.c:
>
> #include <linux/module.h>
> #include <linux/kernel.h>

Стоп, это модуль для ядра? А то у меня-то userland процесс, пусть и
"вместо init". Не хочу в ядерный контекст, без него страшно. Но
оставить след хоть в каких-то логах (не dmesg так ещё что-нибудь)
хотелось бы.

Иван Лох

не прочитано,
9 сент. 2011 г., 21:00:0109.09.2011
On Sat, Sep 10, 2011 at 01:32:24AM +0100, Mikhail Ramendik wrote:
>
> А теперь вопрос - как бы мне выяснить, что это у меня за 20 задач,
> которые не переносятся? Проверил у нескольких /proc/$pid/cmdline -
> пусто. Но там и у kswapd0 пусто, а top как-то знает, что это именно
> он. Как мне-то узнать? Гугль не помог :( Особенно это будет важно,
> если выяснится что весь этот хак не работает, а isolcpus работает.

Это процессы в контексте ядра. Типично у них используемая память равна 0

>
> И ещё вопрос - а как мне в dmesg вякнуть? А то в лог не попишешь,
> подмонтирован только корень и тот read only.

hello.c:

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
printk(KERN_INFO "Hello world\n");
return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world\n");

}

Makefile:

obj-m += hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules



--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/2011091000...@nano.ioffe.rssi.ru

Иван Лох

не прочитано,
9 сент. 2011 г., 21:10:0209.09.2011
On Sat, Sep 10, 2011 at 01:58:27AM +0100, Mikhail Ramendik wrote:
> 2011/9/10 Иван Лох <l...@1917.com>:
>
> >> А теперь вопрос - как бы мне выяснить, что это у меня за 20 задач,
> >> которые не переносятся? Проверил у нескольких /proc/$pid/cmdline -
> >> пусто. Но там и у kswapd0 пусто, а top как-то знает, что это именно
> >> он. Как мне-то узнать? Гугль не помог :( Особенно это будет важно,
> >> если выяснится что весь этот хак не работает, а isolcpus работает.
> >
> > Это процессы в контексте ядра. Типично у них используемая память равна 0
>
> И узнать, какой процесс как называется, никак нельзя? А то kswapd0
> вроде тоже в контексте ядра должен быть, а top знает как его зовут.

ps aux -- те, что в квадратных скобках

> > #include <linux/module.h>
> > #include <linux/kernel.h>
>
> Стоп, это модуль для ядра? А то у меня-то userland процесс, пусть и

Пока syslog не запущен то printk только так. А потом можно logger


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/2011091001...@nano.ioffe.rssi.ru

Иван Лох

не прочитано,
9 сент. 2011 г., 21:20:0109.09.2011
On Sat, Sep 10, 2011 at 05:04:04AM +0400, Иван Лох wrote:
>
> ps aux -- те, что в квадратных скобках

То есть, конечно, в скобках все те у которых нет args...
Это могут и процессы запущенные через pipe быть, например

Иван Лох

не прочитано,
9 сент. 2011 г., 21:20:0209.09.2011
On Sat, Sep 10, 2011 at 05:11:22AM +0400, Иван Лох wrote:
> On Sat, Sep 10, 2011 at 05:04:04AM +0400, Иван Лох wrote:
> >

/proc/*/comm

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 21:30:0109.09.2011
2011/9/10 Иван Лох <l...@1917.com>:

>> И узнать, какой процесс как называется, никак нельзя? А то kswapd0
>> вроде тоже в контексте ядра должен быть, а top знает как его зовут.
>
> ps aux -- те, что в квадратных скобках

Нагуглил другой способ - спасибо за ключевые слова, без них не нагуглилось.

cat /proc/$pid/status | grep name

> Пока syslog не запущен то printk только так. А потом можно logger

У меня "вместо init", значит printk. Значит Си. Я пока пытаюсь Сей
избежать, так что обойдусь :) Хотя если где-нибудь есть исходник, из
коего можно сделать /bin/printk...

При помощи простенького питонного скрипта с os.system() я узнал, какие
же процессы у меня остались не в новом cpuset:

Name: migration/0
Name: ksoftirqd/0
Name: watchdog/0
Name: migration/1
Name: ksoftirqd/1
Name: watchdog/1
Name: events/0
Name: events/1
Name: kintegrityd/0
Name: kintegrityd/1
Name: kblockd/0
Name: kblockd/1
Name: kondemand/0
Name: kondemand/1
Name: aio/0
Name: aio/1
Name: crypto/0
Name: crypto/1
Name: ata/0
Name: ata/1

Для сравнения:


$ cat /proc/31/status | grep Name
Name: kswapd0

Таким образом, /0 или /1 это такие CPU affinity. Это подтверждается
просмотром полного /proc/$pid/status - там есть пункт
Cpus_allowed_list и в нём для данных процессов указан 0 или 1.

Более того. Точно такие же процессы имеются при isolcpus=1 - и для CPU
1 тоже. Значит, мне удалось полностью реплицировать isolcpus на
cpusets.

Прикол в том, что на эту тему нагуглился разговор в LKML, там isolcpus
хотели отменить, но нашлись юзеры, его применяющие. Вот переписать моё
решение на Сях, уонфиг ему сделать - и закинуть в LKML как
уж-совсем-полный аналог isolcpus?

Ладно, это потом, сначала узнаем, пропадут ли зависы. Пока погонял
сколько-то с no_hz=off - не зависло, а обычно с ним висло быстро...

(И кстати, если пропадут - стоит ли пытаться искать баг, возвращая
задачи на оба процессора? Или заработало - и ладно? Или можно так:
заработало - и ладно, но написать в ЖЖ на английском и русском
решение, чтобы следующие напоровшиеся смогли его найти?)

Кстати, всем огромное спасибо - я бы не добрался до столь странного
решения без КУЧИ подсказок.

Иван Лох

не прочитано,
9 сент. 2011 г., 21:50:0209.09.2011
On Sat, Sep 10, 2011 at 02:28:26AM +0100, Mikhail Ramendik wrote:
>
> Прикол в том, что на эту тему нагуглился разговор в LKML, там isolcpus
> хотели отменить, но нашлись юзеры, его применяющие. Вот переписать моё
> решение на Сях, уонфиг ему сделать - и закинуть в LKML как
> уж-совсем-полный аналог isolcpus?

Но все-таки. А почему нельзя поменять affinity у одной из нитей mplayer??

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 22:00:0209.09.2011
2011/9/10 Иван Лох <l...@1917.com>:

>> Прикол в том, что на эту тему нагуглился разговор в LKML, там isolcpus
>> хотели отменить, но нашлись юзеры, его применяющие. Вот переписать моё
>> решение на Сях, уонфиг ему сделать - и закинуть в LKML как
>> уж-совсем-полный аналог isolcpus?
>
> Но все-таки. А почему нельзя поменять affinity у одной из нитей mplayer??

Нет такой опции в командной строке. Это в исходник лезть. А там
непростой исходник. К тому же он регулярно обновляется и я не хотел бы
устраивать личный форк.

(А сделать настоящий патч, с новой опцией и её разбором, я пожалуй что
не потяну).

Установка affinity на два СPU для процесса mplayer - не помогает. Либо
на один, либо на другой, но не на оба. Вот такая неприятная штука
isolcpus.

Я гуглил, у людей была похожая задача. Примерно так: isolcpus 1-3,
надо было сделать процесс load balanced между CPU 2 и CPU 3. Ответ был
- не используйте isolcpus, используйте cpuset.

Однако, это уже решили. При использовании cpuset проблемы просто нет.
Ну, sudo требуется, но это дело штатное. (Хотя более корректно было бы
играть с правами доступа на файл tasks, но какая уж тут корректность
если я на /usr/bin/python рассчитываю при запуске init).

Иван Лох

не прочитано,
9 сент. 2011 г., 22:10:0109.09.2011
On Sat, Sep 10, 2011 at 02:55:45AM +0100, Mikhail Ramendik wrote:
> 2011/9/10 Иван Лох <l...@1917.com>:
> >
> > Но все-таки. А почему нельзя поменять affinity у одной из нитей mplayer??
>
> Нет такой опции в командной строке. Это в исходник лезть. А там
> непростой исходник. К тому же он регулярно обновляется и я не хотел бы
> устраивать личный форк.
>
> (А сделать настоящий патч, с новой опцией и её разбором, я пожалуй что
> не потяну).

Это скорее надо с LD_PRELOAD загружать библиотеку, которая fork() и clone()
слегка модифицирует.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/2011091002...@nano.ioffe.rssi.ru

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 22:20:0109.09.2011
2011/9/10 Иван Лох <l...@1917.com>:

> On Sat, Sep 10, 2011 at 02:55:45AM +0100, Mikhail Ramendik wrote:
>> 2011/9/10 Иван Лох <l...@1917.com>:
>> >
>> > Но все-таки. А почему нельзя поменять affinity у одной из нитей mplayer??
>>
>> Нет такой опции в командной строке. Это в исходник лезть. А там
>> непростой исходник. К тому же он регулярно обновляется и я не хотел бы
>> устраивать личный форк.
>>
>> (А сделать настоящий патч, с новой опцией и её разбором, я пожалуй что
>> не потяну).
>
> Это скорее надо с LD_PRELOAD загружать библиотеку, которая fork() и clone()
> слегка модифицирует.

Можно, но так как получилось - явно проще. (А что грязно - так
переписать с shell+python на pure C будет быстреею чем библиотеку
сочинять).

Mikhail Ramendik

не прочитано,
9 сент. 2011 г., 22:50:0109.09.2011
2011/9/10 Mikhail Ramendik <m...@ramendik.ru>:

> Можно, но так как получилось - явно проще.

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

А именно - через некоторое время после логина (производимого при
помощи kdm) юзерский процесс сразу отправить в /dev/cpuset/tasks,
чтобы всем юзерским задачам дать два процессора.

При этом, сам X сервер должен остаться где был, на одном процессоре.
Но я посмотрел в top - он от рута работает.

Вопрос в том, куда это поставить. Чьими детьми будут все процессы,
запускаемые самим юзером (именно при логине через kdm, консоль/ssh не
рассматриваем)? И в какой скрипт это, соответственно, вставить?

Сам вроде бы догадываюсь до Xsession (положить скрипт в
/etc/X11/Xsesson.d - они вроде бы выполняются не exec, а source, и
потому в $$ там толжен быть pid как раз сессии). Но - сработает ли? И
точно ли это выполняется уже от юзера и не имеет отношения к запуску
самого сервера? Я попросту не понял этого из манов.

Кроме того, гугль вроде бы подсказывает, что поскольку используется
kdm - править придётся /etc/kde4/kdm/Xsession. Или всё-таки
/etc/X11/Xsession.d сработает?

А то получается шанс "прозрачно" решить проблему. Хотя и не факт, что
получится, но уж больно приятный выходит вариант. Вообще без потери
удобства и производительности - просто загнали всю систему на CPU0.

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 00:30:0210.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:

> Ну и то, что ты делаешь на python тоже прекрасно делается на shell.
>
> Есть в нем и read и for, и while

Мне нужно следующее:

- Считать содержимое /dev/cpuset/tasks в массив, по строчкам. И больше
этот файл не трогать совсем. Массив должен быть в памяит (больше
негде, файлова система read only)

- Каждой строке массива отдельно сделать echo $string
>/dev/cpuset/syscpuset/tasks . Ошибки игнорировать.

Я не смог нагуглить, как сделать это шеллом. Поэтому и сделал питоном.

Если шеллом можно сделать _это_, может им можно и конфиг разобрать? В
этом случае даже production решение (для публикации) можно делать на
шелле. Особенно если независимо от того сделать /sbin/kprint для
выкидывания чего-нибудь в dmesg.

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 00:30:0210.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:
> Всего-то что тебе надо - это где-то прикопать некоторое количество
> информации до тех пор, пока не появится возможность тем или иным
> способом записать его в файловую систему. Совершенно необязательно,
> кстати, это делать через syslog. Можно просто файлик в /var/log открыть,
> после того как /var будет смонтирован read-write.

Так мой процесс, маленький совсем, запускается _до_ монтирования чего-либо RW.

Я пока без логгинга обойдусь, но неприятно.

Victor Wagner

не прочитано,
10 сент. 2011 г., 00:30:0210.09.2011
On 2011.09.10 at 03:14:57 +0100, Mikhail Ramendik wrote:

> Можно, но так как получилось - явно проще. (А что грязно - так
> переписать с shell+python на pure C будет быстреею чем библиотеку
> сочинять).

Совершенно не факт. Библиотек это ни разу не rocket science. Это такой
же исходник на pure C.

Ну и то, что ты делаешь на python тоже прекрасно делается на shell.

Есть в нем и read и for, и while


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110910042...@wagner.pp.ru

Victor Wagner

не прочитано,
10 сент. 2011 г., 00:30:0210.09.2011
On 2011.09.10 at 02:28:26 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Иван Лох <l...@1917.com>:
>
> >> И узнать, какой процесс как называется, никак нельзя? А то kswapd0
> >> вроде тоже в контексте ядра должен быть, а top знает как его зовут.
> >
> > ps aux -- те, что в квадратных скобках
>
> Нагуглил другой способ - спасибо за ключевые слова, без них не нагуглилось.
>
> cat /proc/$pid/status | grep name
>
> > Пока syslog не запущен то printk только так. А потом можно logger
>
> У меня "вместо init", значит printk. Значит Си. Я пока пытаюсь Сей

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

Всего-то что тебе надо - это где-то прикопать некоторое количество
информации до тех пор, пока не появится возможность тем или иным
способом записать его в файловую систему. Совершенно необязательно,
кстати, это делать через syslog. Можно просто файлик в /var/log открыть,
после того как /var будет смонтирован read-write.



--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/20110910042...@wagner.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 00:40:0110.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:

> On 2011.09.10 at 03:14:57 +0100, Mikhail Ramendik wrote:
>
>> Можно, но так как получилось - явно проще. (А что грязно - так
>> переписать с shell+python на pure C будет быстреею чем библиотеку
>> сочинять).
>
> Совершенно не факт. Библиотек это ни разу не rocket science. Это такой
> же исходник на pure C.

Ага, но там придётся алгоритм для load balancing придумывать. Этот
тред туда, а этот сюда. А зачем, когда оно в ядре уже есть? Ты же сам
против того чтобы делать работу, которая уже сделана.

Решение через cpuset позволяет обойтись _тривиальным_ кодом. То есть,
если бы не моя отсталость от нынешнего C, то проблем бы не было вовсе,
а так - ну, грязновато вышло, но для проверки сойдёт. Может ведь и не
помочь.

Artem Chuprina

не прочитано,
10 сент. 2011 г., 01:10:0110.09.2011
> #!/usr/bin/python
> f=open("/dev/cpuset/tasks")
> tasks=f.readlines()
> f.close()
>
> for task in tasks:
> try:
> f=open("/dev/cpuset/syscpuset/tasks","w")
> f.write(task)
> f.close()
> except IOError:
> pass
>
> Я конечно вижу, что это грязно, в общем случае на /usr нельзя
> рассчитывать и надо на Си писать, но влом. Или этот же эффект как-то
> достигается на shell+busybox?
>

for task in `cat /dev/cpuset/tasks`
do
echo $task > /dev/cpuset/syscpuset/tasks
done

Правда, я не смог посмотреть, что там пишется - у меня такого файла нет. Если
в /dev/cpuset/tasks больше одного слова на задачу, то надо более тщательно
строить цикл.

> А теперь вопрос - как бы мне выяснить, что это у меня за 20 задач,
> которые не переносятся? Проверил у нескольких /proc/$pid/cmdline -
> пусто. Но там и у kswapd0 пусто, а top как-то знает, что это именно
> он. Как мне-то узнать?

/proc/$PID/stat

> Гугль не помог :( Особенно это будет важно,
> если выяснится что весь этот хак не работает, а isolcpus работает.

Скорее всего, треды ядра. К которым, собственно, относится и kswapd.

--
Если ты не боишься синего экрана, то почему боишься черного?
-- Д.Белявский


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/87ty8lng8l.wl%r...@ran.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 01:20:0210.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:

> Не слушай ты темных и необразованных людей. Я тоже, когда был молодой и
> глупый, пытался ядро патчить для решения задач, к которым существуют
> userspace решения.

Вот сейчас я хочу найти, надеюсь, пока что последнее решение для тго
конкретного набора (дальше - тестирование).

А именно - как мне произвести нужную операцию для процесса, который
породит все _юзерские_ процессы после логина. Но не рутовые, например
не X сервер.

В Xsession что ли, и если да - какой у дебиановского kdm Xsession?

Я хочу попробовать дать этому процессу оба процессора ( грубо говоря,
sudo echo $$ >/dev/cpuset/tasks - реально это будет вызываемый по sudo
скрипт с pid в качестве $1). Оставив при этом все системные/рутовые
процессы на одном СPU 0.

Если систему завешивает какой-то конкретный кривой процесс, а не
scheduler, то этого должно быть достаточно для борьбы с зависанием.
Более того, если CPU 1 битое аппаратно - насколько я понимаю тоже,
поскольку нерутовое приложение систему не вешает, а из проблем умеет
либо процессор загружать, либо падать.

(А что касается mplayer - так ему я ещё и nice -2 хочу дать, если с
безопасностью справлюсь. Чтобы он успешно играл фильмы, требующие
всего процессора, когда загружен iceweasel и отжирает процентов 40-50
одного ядра).

Victor Wagner

не прочитано,
10 сент. 2011 г., 02:20:0210.09.2011
On 2011.09.10 at 05:29:03 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:
>
> > О©╫О©╫ О©╫ О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ python О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ shell.
> >
> > О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫ read О©╫ for, О©╫ while
>
> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
>
> - О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ /dev/cpuset/tasks О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ read only)

О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ /dev/cpu/tasks О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫

LIST=`cat /dev/cpuset/tasks`
for pid in $LIST; do
echo $pid > /dev/cpyset/syscpuset/tasks
done

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ shell.

О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫ /dev/cpuset/tasks О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫)

О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ AS IS

LIST="`cat /dev/cpuset/tasks`"

О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫

echo "$LIST" | while read line; do
echo $line >/dev/cpuset/syscpyset/tasks
done

О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ $LIST О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ echo.

> - О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ echo $string
> >/dev/cpuset/syscpuset/tasks . О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
>
> О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫,
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫О©╫".

О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
/bin/sh О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ (О©╫, О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫), О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ /bin/sh О©╫О©╫О©╫
О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ _О©╫О©╫О©╫_, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫? О©╫

О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ source/require О©╫ О©╫.О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ namespace О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ vulnerability,
О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ production О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ /sbin/kprint О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ dmesg.

О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ /sbin/kprint О©╫
/dev/kprint - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ character
devices, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ /sbin/kprint О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫
userspace О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ character device (О©╫ О©╫О©╫О©╫ -
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫), О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ echo О©╫О©╫О©╫О©╫О©╫О©╫.

>
> --
> Yours, Mikhail Ramendik
>
> Unless explicitly stated, all opinions in my mail are my own and do
> not reflect the views of any organization

--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/2011091006...@wagner.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 02:40:0110.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:

> Поэтому вполне сработает такая конструкция


>
> LIST=`cat /dev/cpuset/tasks`
> for pid in $LIST; do
>        echo $pid > /dev/cpyset/syscpuset/tasks
> done

Спасибо. Вот как раз того, что шелловский for умеет итерировать по
строке, разделяя newlines, я и не знал.

(Это подойдёт - там просто числа, разделённые newline).

>> Если шеллом можно сделать _это_, может им можно и конфиг разобрать? В
>

> Да, естественно.
>
> Я очень часто делаю конфиги скриптами на том же языке, что и основной
> продукт, и промом просто делаю им source/require и т.д.

Всё что тут надо конфигурировать, по максимуму:

CPUSETNAME=name
CPUS=cpus
MEMS=mems
MOVE_KERNEL_PROCESSES=[true|false]

В первой версии хватит CPUS и MEMS (имя "прибить гвоздиком", имеющиеся
процессы всегда перегонять). Для 80-90% случаев этого IMHO достаточно.

Ну, вообще это _можно_ сделать исполняемым. И вроде бы при ошибке,
если новых строк не добавлять, оно как максимум не сработает, но
система загрузится. Потому что если cpus/mems невалидно, система
просто не позволяет записать задачи в новый cpuset.

> Как мне кажется, куда более прямым решением будет не /sbin/kprint а
> /dev/kprint - маленький такой ядерный модуль, предоставляющий character
> devices, и передающий все, что туда пишется, в буфер сообщений ядра.

Я просто не верю, что готовое решение для логгинга userland процессов
до RW монтирования /var/log отсутствует. Ну сам-то /sbin/init должен
куда-то сообщить об ошибке в /etc/inittab .

> Дело в том, что для /sbin/kprint тебе все равно понадобится какой-то
> интерфейс с ядром - просто так внутреннюю ядерную функцию ты из
> userspace не позовешь.

Вот это и вопрос - позовёшь или нет. Если нет, то для работы решения
требуется собрать ядерный модуль. Значит, чтобы оно работало нормально
при штатном обновлении ядра (подъём версии - тоже штука штатная), мне
ещё и dkms прикручивать придётся. Как-то оно явно того не стоит. Уж
проще этот скрипт выпустить без лога.

(А создавать больше одного cpuset ему не нужно в принципе. Куда более
продвинутая система управления cpuset для sysv init уже есть. А этот
скрипт - для параноидального выгоняния всей системной шушеры _сразу_,
чтобы даже sysv init не дожидаться).

Victor Wagner

не прочитано,
10 сент. 2011 г., 03:30:0210.09.2011
On 2011.09.10 at 07:38:37 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:
>
> > Поэтому вполне сработает такая конструкция
> >
> > LIST=`cat /dev/cpuset/tasks`
> > for pid in $LIST; do
> >        echo $pid > /dev/cpyset/syscpuset/tasks
> > done
>
> Спасибо. Вот как раз того, что шелловский for умеет итерировать по
> строке, разделяя newlines, я и не знал.

В данном случае там не newlines, а whitespace. newlines съедены
незакавыченной подстановкой.


> (Это подойдёт - там просто числа, разделённые newline).
>
> >> Если шеллом можно сделать _это_, может им можно и конфиг разобрать? В
> >
> > Да, естественно.
> >
> > Я очень часто делаю конфиги скриптами на том же языке, что и основной
> > продукт, и промом просто делаю им source/require и т.д.
>
> Всё что тут надо конфигурировать, по максимуму:
>
> CPUSETNAME=name
> CPUS=cpus
> MEMS=mems
> MOVE_KERNEL_PROCESSES=[true|false]

Ну вот ровно такую конструцкию и
зачитывать в скрипт посредством команды "точка"

. /etc/cpuhack.cfg

Кстати, именно так устроены все конфиги в /etc/default.
Они читаются init-скриптами именно таким способом.

Дальше - просто не забывать подставить где надо

echo something > /dev/cpuset/${CPUSETNAME}/tasks

При этом крайне рекомендуется перед считыванием конфига выставить всем
переменным умолчательные значения, а после - произвести некоторые sanity
checks. Например, проверить что CPUSETNAME не пусто.


> Я просто не верю, что готовое решение для логгинга userland процессов
> до RW монтирования /var/log отсутствует. Ну сам-то /sbin/init должен
> куда-то сообщить об ошибке в /etc/inittab .

Они все на консоль пишут.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/2011091007...@wagner.pp.ru

Victor Wagner

не прочитано,
10 сент. 2011 г., 03:40:0110.09.2011
On 2011.09.10 at 05:25:31 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:
> > Всего-то что тебе надо - это где-то прикопать некоторое количество
> > информации до тех пор, пока не появится возможность тем или иным
> > способом записать его в файловую систему. Совершенно необязательно,
> > кстати, это делать через syslog. Можно просто файлик в /var/log открыть,
> > после того как /var будет смонтирован read-write.
>
> Так мой процесс, маленький совсем, запускается _до_ монтирования чего-либо RW.

Ну ядро тоже запускается до монтирования чего-то RW. И держит у себя в
памяти буфер. Который после монтирования специально обученным демоном
klogd переписывается в лог-файлы.

У тебя ситуация осложняется тем, что ты свой процесс замещаешь init-ом.
Но тоже можно решить вопрос - форкнуть отдельный процесс, в памяти
которого хранить сообщения, а потом каким-либо способом попросить этот
процесс их записать. Ну хоть SIGUSR ему послать.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/2011091007...@wagner.pp.ru

Victor Wagner

не прочитано,
10 сент. 2011 г., 03:40:0110.09.2011
On 2011.09.10 at 06:12:59 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:
>
> > Не слушай ты темных и необразованных людей. Я тоже, когда был молодой и
> > глупый, пытался ядро патчить для решения задач, к которым существуют
> > userspace решения.
>
> Вот сейчас я хочу найти, надеюсь, пока что последнее решение для тго
> конкретного набора (дальше - тестирование).
>
> А именно - как мне произвести нужную операцию для процесса, который
> породит все _юзерские_ процессы после логина. Но не рутовые, например
> не X сервер.
>
> В Xsession что ли, и если да - какой у дебиановского kdm Xsession?

Насколько я понимаю, у всех дебиановских dm используется одна и та же
система скриптов в /etc/X11/Xsession.d
Там достаточно развесисто - оно умеет запускать как минимум dbus-session и
ssh-agent
так, чтобы window manager был их потомком.


> Я хочу попробовать дать этому процессу оба процессора ( грубо говоря,
> sudo echo $$ >/dev/cpuset/tasks - реально это будет вызываемый по sudo
> скрипт с pid в качестве $1). Оставив при этом все системные/рутовые
> процессы на одном СPU 0.

Есть такая добрая идиома чтобы echo-м писать от рута:

echo something | sudo tee somefile


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/2011091007...@wagner.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 03:50:0110.09.2011
2011/9/10 Victor Wagner <vi...@wagner.pp.ru>:

> Есть такая добрая идиома чтобы echo-м писать от рута:
>
> echo something | sudo tee somefile

У меня ещё и renice в комплекте, и я что-то не очень понимаю как
сделать это безопасно.

В принципе хотелось бы вот такой скрипт, разрешённый в sudoers (у меня
так уже живёт монтирование флешки, это IMHO всё же безопаснее чем
setuid):

#!/bin/sh
echo $1 >/dev/cpuset/tasks
renice -4 -p $1

Но тут невооружённым глазом видна дырка на injection.

Можно ли чем-то её закрыть, не считая варианта "написать то же самое
на питоне"? Там-то проверить тривиально - int(sys.argv[1]), и если не
конвертится - то exception.

Artem Chuprina

не прочитано,
10 сент. 2011 г., 04:20:0110.09.2011
> Есть такая добрая идиома чтобы echo-м писать от рута:
>
> echo something | sudo tee somefile

echo something | sudo tee somefile >/dev/null

--
Intel - тоже Сильмарилл. Только сделанный не так...


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/87sjo4olnj.wl%r...@ran.pp.ru

Artem Chuprina

не прочитано,
10 сент. 2011 г., 04:30:0210.09.2011
> В принципе хотелось бы вот такой скрипт, разрешённый в sudoers (у меня
> так уже живёт монтирование флешки, это IMHO всё же безопаснее чем
> setuid):
>
> #!/bin/sh
> echo $1 >/dev/cpuset/tasks
> renice -4 -p $1
>
> Но тут невооружённым глазом видна дырка на injection.
>
> Можно ли чем-то её закрыть, не считая варианта "написать то же самое
> на питоне"? Там-то проверить тривиально - int(sys.argv[1]), и если не
> конвертится - то exception.

Можно даже на чистом sh, но проще всего -

if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
then :
else exit 1
fi

grep у тебя будет, он в бизибоксе есть. printf - встроенная команда шелла.
Опять же, включая бизибокс.

--
- А почему перед всеми командами надо сначала писать man?
- Чтобы показать компу, кто тут мужик.
-- http://bash.org.ru/quote/403510


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/87r53ool6i.wl%r...@ran.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 05:50:0210.09.2011
2011/9/10 Artem Chuprina <r...@ran.pp.ru>:

>> > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
>> > then :
>> > else exit 1
>> > fi
>>

>> Спасибо! К сожалению, расшифовать это мне не удалось. Каким образом
>> оно упадёт, если в $1 _не только_ цифры?
>
> Если там не только цифры (причем начинающиеся не с 0) или даже пустая строка,
> то регулярное выражение не удовлетворится, и grep завершится с кодом 1.  А
> поскольку он последний, то это будет код завершения всего pipeline, что после
> if.  Отсюда - ветка else, где exit 1.
>
> Или тебе чего расшифровать?  Регулярное выражение?

Оно понятно что это не здесь...

Ну не понимаю я регулярные выражения :( Впрочем, я вообще предпочитаю
_читаемые_ языки. Из программистов в техписатели ушёл, когда C++ всех
победил (Python тогда ещё не было, а Дельфи уже уходили).

Однако спасибо - в данном случае просто заюзаем :)

> А вообще для программирования на шелле существует довольно надежный способ
> ломаться - надо включить опцию -e, например, сказав не
>
> #!/bin/sh
>
> а
>
> #!/bin/sh -e
>
> Тогда любая команда, завершившаяся неудачно (кроме команд, стоящих в условии
> if или перед ||) будет приводить к тому, что в этом месте скрипт и завершится.

Это да, но когда то, что требует в Питоне int(), в шелле требует
regexp, а иначе даже не упадёт нормально, мне становится непросто :)

> Intel - тоже Сильмарилл. Только сделанный не так...

Представил себе двухядерный Сильмарилл.

Victor Wagner

не прочитано,
10 сент. 2011 г., 07:20:0210.09.2011
On 2011.09.10 at 10:42:32 +0100, Mikhail Ramendik wrote:

> 2011/9/10 Artem Chuprina <r...@ran.pp.ru>:
>
> >> > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
> >> > then :
> >> > else exit 1
>

> О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ :( О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> _О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫_ О©╫О©╫О©╫О©╫О©╫. О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫шёО©╫, О©╫О©╫О©╫О©╫О©╫ C++ О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (Python О©╫О©╫О©╫О©╫О©╫ О©╫щё О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫).

[skip]
> О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ int(), О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> regexp, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫дёО©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ :)

О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫

if printf %d "$1"

О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ %d О©╫О©╫ printf


О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫

expr "$1" + 0

О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/2011091011...@wagner.pp.ru

Ivan Shmakov

не прочитано,
10 сент. 2011 г., 07:30:0110.09.2011
>>>>> Artem Chuprina <r...@ran.pp.ru> writes:

>> Есть такая добрая идиома чтобы echo-м писать от рута:

>> echo something | sudo tee somefile

> echo something | sudo tee somefile >/dev/null

$ echo something | sudo cp -- /dev/stdin somefile

$ printf %s\\n "$varn" | sudo cp -- /dev/stdin somefile

(Поскольку $ echo "$varn", в общем случае, непереносимо.)

--
FSF associate member #7257 Coming soon: Software Freedom Day
http://mail.sf-day.org/lists/listinfo/ planning-ru (ru), sfd-discuss (en)


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/861uvo4...@gray.siamics.net

Ivan Shmakov

не прочитано,
10 сент. 2011 г., 07:40:0210.09.2011
>>>>> Artem Chuprina <r...@ran.pp.ru> writes:

>> В принципе хотелось бы вот такой скрипт, разрешённый в sudoers (у
>> меня так уже живёт монтирование флешки, это IMHO всё же безопаснее
>> чем setuid):

>> #!/bin/sh
>> echo $1 >/dev/cpuset/tasks
>> renice -4 -p $1

>> Но тут невооружённым глазом видна дырка на injection.

>> Можно ли чем-то её закрыть, не считая варианта "написать то же самое
>> на питоне"? Там-то проверить тривиально - int(sys.argv[1]), и если
>> не конвертится - то exception.

> Можно даже на чистом sh, но проще всего -

> if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
> then :
> else exit 1
> fi

> grep у тебя будет, он в бизибоксе есть. printf - встроенная команда
> шелла. Опять же, включая бизибокс.

Можно использовать -q вместо > /dev/null, благо grep из BusyBox
ее умеет:

$ busybox grep --help 2>&1 | grep -F -- -q
-q Quiet. Return 0 if PATTERN is found, 1 otherwise
$

Кроме того, я бы добавил \n к строке формата printf.

Еще можно воспользоваться expr, который также имеется в BusyBox.
E. g.:

if test 1 = "$(expr length quote "$1" \
= quote "$1" : '[1-9][0-9]*')" ; then

--
FSF associate member #7257 Coming soon: Software Freedom Day
http://mail.sf-day.org/lists/listinfo/ planning-ru (ru), sfd-discuss (en)

--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/86wrdg3...@gray.siamics.net

Artem Chuprina

не прочитано,
10 сент. 2011 г., 14:50:0210.09.2011
> >> > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1
> >> > then :
> >> > else exit 1
> >> > fi
> >>
> >> Спасибо! К сожалению, расшифовать это мне не удалось. Каким образом
> >> оно упадёт, если в $1 _не только_ цифры?
> >
> > Если там не только цифры (причем начинающиеся не с 0) или даже пустая
> > строка, то регулярное выражение не удовлетворится, и grep завершится с
> > кодом 1.  А поскольку он последний, то это будет код завершения всего
> > pipeline, что после if.  Отсюда - ветка else, где exit 1.
> >
> > Или тебе чего расшифровать?  Регулярное выражение?
>
> Оно понятно что это не здесь...
>
> Ну не понимаю я регулярные выражения :( Впрочем, я вообще предпочитаю
> _читаемые_ языки. Из программистов в техписатели ушёл, когда C++ всех
> победил (Python тогда ещё не было, а Дельфи уже уходили).
>

Это как раз можно и здесь. И вообще, регулярные выражения - это читаемый
язык. Только почти не избыточный.

^ - начало строки. Т.е. выражение, которое мы ищем, должно начинаться точно в
начале строки, а не в середине.

[1-9] - один символ от 1 до 9 в текущем символьном порядке. Т.е. цифра от 1
до 9.

[0-9] - то же самое, но от 0 до 9. Т.е. любая цифра.

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

$ - конец строки.

Итого, читая почти слева направо: в начале строки любая цифра от 1 до 9, потом
любое количество любых цифр, и на этом строка должна закончиться. Твоя
питоновская проверка, надо сказать, хуже этой, потому что сожрет 0 и
отрицательные числа, а они на месте pid'а могут как-то интерпретироваться, в
разных местах по-разному. В команде kill, например, если написать

kill 9 10

то процессам 9 и 10 будет послан SIGTERM (15), а если написать

kill -9 10

то процессу 10 будет послан SIGKILL (9).

> Однако спасибо - в данном случае просто заюзаем :)
>
> > А вообще для программирования на шелле существует довольно надежный способ
> > ломаться - надо включить опцию -e, например, сказав не
> >
> > #!/bin/sh
> >
> > а
> >
> > #!/bin/sh -e
> >
> > Тогда любая команда, завершившаяся неудачно (кроме команд, стоящих в условии
> > if или перед ||) будет приводить к тому, что в этом месте скрипт и завершится.
>
> Это да, но когда то, что требует в Питоне int(), в шелле требует
> regexp, а иначе даже не упадёт нормально, мне становится непросто :)

Ну, как я выше написал, питоновский int() ой, не обеспечивает нужной
проверки. Его результат еще надо проверить на >0. А ты это сделать забыл, а
зря.

Потом, понимаешь, int() - это очень частный случай. Регекспы хороши тем, что
у них куда больше применений. Например, когда я суммирую свои записи по
расходам в поездках, эти записи отбираются и парсятся именно ими, и я бы
задолбался описывать этот парсер (вместе с парсингом того, что не нужно, чтобы
только выкинуть) любым другим способом. При этом выражения для парсинга не
принципиально сложнее вышеприведенного.

> > Intel - тоже Сильмарилл. Только сделанный не так...
>
> Представил себе двухядерный Сильмарилл.

Судя по продолжительности свечения, ядер в Сильмарилле существенно больше двух
:-)

--
Intel - тоже Сильмарилл. Только сделанный не так...


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/87obysnsgc.wl%r...@ran.pp.ru

Mikhail Ramendik

не прочитано,
10 сент. 2011 г., 18:20:0210.09.2011
2011/9/10 Artem Chuprina <r...@ran.pp.ru>:

>> > Или тебе чего расшифровать?  Регулярное выражение?
>>
>> Оно понятно что это не здесь...
>
> Это как раз можно и здесь.

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

(Между тем, есть шанс что всё это реально сработало - тестирование
_пока что_ проблем не показало. Несмотря на "провокацию" - я включил
no_hz=off, с коим раньше висло заметно быстрее. Но окончательные
выводы делать пока рано, как и задавать вопрос "что же это всё-таки за
неведомая штука").

>И вообще, регулярные выражения - это читаемый
> язык.  Только почти не избыточный.

Ну, в теории и perl читаемый ;)

> [0-9] - то же самое, но от 0 до 9.  Т.е. любая цифра.
>
> * - предыдущее подвыражение должно матчиться любое количество раз, в том числе
> нулевое.

Ах вот где тут хитрость. Я про "в том числе нулевое".

Будем пробовать.

>> > Intel - тоже Сильмарилл. Только сделанный не так...
>>
>> Представил себе двухядерный Сильмарилл.
>
> Судя по продолжительности свечения, ядер в Сильмарилле существенно больше двух
> :-)

А, в этом смысле. Ну, отсюда можно сделать много интересных выводов,
но не будем портить сложившийся _топичный_ тред :) Я-то про всё тот же
мой двухядерный Intel Pentium D, который сделан и впрасду как-то не
так (а может, это чипсет SiS 661FX не так сделан... или ещё вариант -
процессор до меня разгоняли и много перегревали. Я его и сам чуток
перегревал несколько дней, но не смертельно - просто BIOS был кривой и
недокручивал вентилятор, частота оставалась штатной. Потом я прибил
скорость вентилятора на максимум).

Иван Лох

не прочитано,
10 сент. 2011 г., 18:30:0210.09.2011
On Sat, Sep 10, 2011 at 11:14:51PM +0100, Mikhail Ramendik wrote:
> >И вообще, регулярные выражения - это читаемый
> > язык.  Только почти не избыточный.
>
> Ну, в теории и perl читаемый ;)

IMHO граница между читаемыми и нечитаемыми языками лежит
между brainfuck и whitespace ;-}


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/20110910222...@nano.ioffe.rssi.ru

Peter Pentchev

не прочитано,
10 сент. 2011 г., 20:40:0210.09.2011
On Sat, Sep 10, 2011 at 10:13:11AM +0400, Victor Wagner wrote:
> On 2011.09.10 at 05:29:03 +0100, Mikhail Ramendik wrote:
> > Если шеллом можно сделать _это_, может им можно и конфиг разобрать? В
>
> Да, естественно.
>
> Я очень часто делаю конфиги скриптами на том же языке, что и основной
> продукт, и промом просто делаю им source/require и т.д.
>
> Некоторые считатют, что тьюринг-полный язык конфигов да еще с
> возможностью доступа в namespace основной программы - это vulnerability,
> но я полагаю, что в большинстве случаев то, кто имеет право править
> конфиг, имеет право править и программу.

А если по-другому, apt-get install confget и читать ман на тему -S :)

Всего лучшего,
Петр

--
Peter Pentchev ro...@ringlet.net ro...@FreeBSD.org pe...@packetscale.com
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
If I were you, who would be reading this sentence?

signature.asc

alexander barakin

не прочитано,
12 сент. 2011 г., 05:40:0212.09.2011
On Sat, Sep 10, 2011 at 11:14:51PM +0100, Mikhail Ramendik wrote:
> 2011/9/10 Artem Chuprina <r...@ran.pp.ru>:

> > [0-9] - то же самое, но от 0 до 9.  Т.е. любая цифра.
> >
> > * - предыдущее подвыражение должно матчиться любое количество раз, в том числе
> > нулевое.
>
> Ах вот где тут хитрость. Я про "в том числе нулевое".
>
> Будем пробовать.

всё-таки имеет смысл прочитать хотя бы про основы:
http://ru.wikibooks.org/wiki/Регулярные_выражения

там присутствуют и более углублённые источники, из которых могу
порекомендовать книгу Фридла·

а в процессе познания и «пробы» сами собой нарисуются, но, естественно,
будут более осмысленными, нежели примитивный «научный тык»·

--
wbr, alexander barakin aka sash-kan.


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org

Archive: http://lists.debian.org/20110912093...@teta.mezon.local

George Shuklin

не прочитано,
18 сент. 2011 г., 14:30:0118.09.2011
echo 0 >/sys/devices/system/cpu/cpu1/online
Обратно, соответственно, 1.

On 06.09.2011 14:33, Mikhail Ramendik wrote:
> Всем привет!
>
> Вопрос - а можно ли вот так развернуть линух на двухпроцессорной
> системе, чтобы он не использовал второй процессор, пока не сказали? А
> потом сказали ещё раз и снова видел один процессор.
>
> Это я всё к зависательной теме на Pentium D. maxcpus=1 помогает
> железно. Ядро 3.0 не помогает. Прогуглился и пробую параметры ядра, но
> два разных варианта (clocksource=acpi_pm highres=off no_hz=off и
> skip_acpi_timer_override no_hz=off) привели к _более быстрому_
> зависанию. Сейчас тестируется irqpoll, если повиснет - следующим будет
> notsc. Но этот номер всё-таки может не пройти.
>
> Меня вполне устраивает работа системы с maxcpus=1 для всего, кроме
> просмотра HD media. В идеале можно было бы встроить в скрипты для
> просмотра (а они и так уже скрипты, на отдельный X screen показывают)
> включение второго CPU и затем отключение.
>
> Однако нагугленное решение
> http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/
> вешает систему сразу. (Я загружался без maxcpus и пытался отключить
> второй процессор через echo 0 > /sys/devices/system/cpu/cpu1/online).
>
> Возможно ли такое на самом деле, или только через перезагрузку?
>
> --
> Yours, Mikhail Ramendik
>
> Unless explicitly stated, all opinions in my mail are my own and do
> not reflect the views of any organization
>


--
To UNSUBSCRIBE, email to debian-russ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Archive: http://lists.debian.org/4E76372F...@gmail.com

Mikhail Ramendik

не прочитано,
18 сент. 2011 г., 14:30:0118.09.2011
2011/9/18 George Shuklin <george....@gmail.com>:

> echo 0 >/sys/devices/system/cpu/cpu1/online
> Обратно, соответственно, 1.

Давно уже выяснилочь, что на этой системе даннео действие приводит к
завису, и что причина в том, что все APIC прерывания почему-то идут
исключительно на cpu1 вне зависимости от настроек affinity.

0 новых сообщений