В списке рассылки разработчиков ядра Linux представлен (https://lkml.org/lkml/2012/6/16/123) новый планировщик задач RIFS-ES (http://code.google.com/p/rifs-scheduler/), нацеленный на использование на десктоп-системах и обеспечение максимальной производительности интерактивных приложений. В своей работы RIFS-ES использует расширенные в сторону обеспечения интерактивности элементы расчёта приоритетов, применяемые в классическом планировщике System V и лишённые свойственных CFS усложнений, используемых для оценки интерактивности.
По сравнению со штатным планировщиком CFS проект RIFS-ES демонстрирует (https://lkml.org/lkml/2012/6/18/65) довольно существенное повышение отзывчивости: пробуждение через 10 usec для RIFS-ES против 21 usec для CFS для одного клиента, 30/19 usec для двух клиентов (RIFS-ES проигрывает), 2342/4900 usec для четырёх, 6112/8068 usec для восьми и 9690/17497 для шестнадцати.
URL: https://lkml.org/lkml/2012/6/16/123
Новость: http://www.opennet.me/opennews/art.shtml?num=34144
Да сколько можно? Куда их столько-то?
для разных задач, свой планировщик. Разве по поводу зоопарка fs кто-то возникает?
> для разных задач, свой планировщик. Разве по поводу зоопарка fs кто-то возникает?Да, возникают многие, тысячи их. В каждой теме про ext4/btrfs/ZFS/любую ФС обязательно найдётся комментарий вида "чем оно лучше ext4/btrfs/ZFS/любой другой ФС", как будто такое сравнение корректно.
если написали - значит нужно
Необязательно.
блеа, не дописал. Как говорилось каждый под конкретную задачу. Это опенсорс, здесь делают ПО для железа, а не железо для ПО.
Иногда ПО делают не для железа, а от нечего делать.
если альтернатива сможет работать быстрей, почему-бы не попробовать.
Вы так говорите, будто это что-то плохое.
>Это опенсорс, здесь делают ПО для железа, а не железо для ПО.неа.
тут делают то, что кому интересно и/или выгодно.
всё остальное — следствие.
Планировщик без поддержки cgroups подобен плееру без поддержки проигрывания медиа.
Конечно, можно натолкать туда всякие полезные фичи типа прожига дисков, заливания фоточек на фейсбук и отображения погоды на рабочем столе, но как плеер оно лучше не станет.
А когда cgroups появился?
Т.е. до планировщиков не было??
> По сравнению со штатным планировщиком CFS проект RIFS-ES демонстрирует довольно существенное повышение отзывчивости: пробуждение через 10 usec для RIFS-ES против 21 usec для CFS для одного клиента, 30/19 usec для двух клиентов (RIFS-ES проигрывает), 2342/4900 usec для четырёх, 6112/8068 usec для восьми и 9690/17497 для шестнадцати.При этом в штатном планировщике, разумеется, не настроена группировка процессов, и таким образом он поставлен в заведомо невыгодное положение.
Что-то мне подсказывает, что при использовании ulatencyd или systemd, CFS порвет этот велосипед как тузик грелку.
что-то мне подсказывает что с групировкой процессов мы получим щедулинг близкий к M:N - от которого автор CFS бежал и кричал что ненужно.
А это зависит от того, как группировать. Сильно зависит.
ХА!!!
$ git clone https://code.google.com/p/rifs-scheduler/
Cloning into rifs-scheduler...
warning: You appear to have cloned an empty repository.нас обманули! это задний проход!
Видимо, у разработчика на компе уже стоит новый шедулер, и процесс, занимающийся заливкой кода в репу, отправлен в бессрочный слип (ввиду недостаточной "интерактивности").
Ветки поищите
какбэ их сайт http://code.google.com/p/rifs-scheduler/source/checkout не намекает что это квест.зыж
$ git help clone
git-clone - Clone a repository into a new directory
DESCRIPTION
Clones a repository into a newly created directory, creates remote-tracking branches for each branch in the cloned repository
/*
* By default the system creates a single root-domain with all cpus as
* members (mimicking the global state we have today).
*/
static struct root_domain def_root_domain;int __weak arch_sd_sibling_asym_packing(void)
{
return 0*SD_ASYM_PACKING;
}Вот как-то так... :)
Моя нипанимат. Они в ретёрне умножают на ноль чтоле? Тогда просто почему не вернуть ноль? lol
> Моя нипанимат. Они в ретёрне умножают на ноль чтоле? Тогда просто почему
> не вернуть ноль? lolНадо было дописать /* reserved for future usage */
:DЩа ещё
---Вот это функция resched_task из RIFS-ES
static void resched_task(struct task_struct *p)
{
int cpu;assert_raw_spin_locked(&grq.lock);
if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))
return;set_tsk_thread_flag(p, TIF_NEED_RESCHED);
cpu = task_cpu(p);
if (cpu == smp_processor_id())
return;/* NEED_RESCHED must be visible before we test polling */
smp_mb();
if (!tsk_is_polling(p))
smp_send_reschedule(cpu);
}эта из CFQ
void resched_task(struct task_struct *p)
{
int cpu;
assert_raw_spin_locked(&task_rq(p)->lock);
if (test_tsk_need_resched(p))
return;
set_tsk_need_resched(p);
cpu = task_cpu(p);
if (cpu == smp_processor_id())
return;
/* NEED_RESCHED must be visible before we test polling */
smp_mb();
if (!tsk_is_polling(p))
smp_send_reschedule(cpu);
}
lol. Кстате, я конечно не супер-пупер Си программер, но увидел это - (struct task_struct *p). А эти ребята поро typedef struct foo1 foo0; знают?
Так нагляднее, с typedef заплутаешь.
ну а тут тебя это смущает что ли?
set_tsk_thread_flag(p, TIF_NEED_RESCHED)
и
set_tsk_need_resched(p)
Нет никакого смысла пихать typedef направо и налево. Часто удобнее оставить struct str_t *abc как есть. Это делает код понятнее, потому что не нужно грепать, что же за foo0 скрыто.
Может быть для того, чтобы когда захочется не 0, не забыть умножить на что полагается
Ну вот когда надо будет, тогда и пишите. Пока не надо - это просто лишние такты в помойку, хотя может и не критично, в зависимости как часто эту функцию вызывают.
Это почти с гарантией будет соптимизировано. Не забыть - много важнее.
> Может быть для того, чтобы когда захочется не 0, не забыть умножить
> на что полагаетсяДля таких случаев делают комментарий, а не тупую бесполезную операцию в надежде "компилятор это исправит".
не путай надежду с уверенностью
А что вам не нравится то?
#define DEFAULT_PRIO (MAX_RT_PRIO + 20)Ну чё, талант, Инго Молнар раньше тоже так делал,
правда он скромнее был, он всего лишь 6 приплюсовывал :)
Меня терзают смутные сомнения, что это очередные авантюристы, накопипастившие код CFQ и немного его поправившие в нужную сторону.
> Меня терзают смутные сомнения, что это очередные авантюристы, накопипастившие код CFQ
> и немного его поправившие в нужную сторону.А это все планировщики такие будут. Они отличаются только алгоритмами
определения задачи которую нужно поставить в очередь на проц,
дальше вызывается smp_send_reschedule().
Так что, задача планировщика - это сказать "хочу вот эту!"
> 30/19 usec для двух клиентов (RIFS-ES проигрывает),т.е. для десктопа он не нужен. Парадокс, однако
Некоторые видят только то, что хотят видеть. Остальное - не видят в упор. Парадокс.
> Остальное - не видят в упор.Вупор обиделся и ушёл домой.
Парадокс этого даже не заметил.