[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



2011/9/9 Victor Wagner <vitus@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.

-- 
Yours, Mikhail Ramendik

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

Reply to: