Автор Тема: schedule при SMP системи  (Прочетена 2288 пъти)

binary_code

  • Участници
  • ***
  • Публикации: 5
    • Профил
schedule при SMP системи
« -: Feb 16, 2014, 15:14 »
Здравейте

Интересува ме някой механизма на task scheduling при SMP операционните системи.

До колкото съм запознат диспечарът е интеръпт хендлър. Интересува ме в контекста на SMP когато много CPU-та изпълняват една ОС как стоят нещата?
Предполагам всички процесори получават прекъсването и изпълняват един интеръпт хендлър като код но е нужна синхронизация по данни - рън опашки и тн ...

Ако има някой запознат моля да сподели мнение по въпроса.

Поздрави
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: schedule при SMP системи
« Отговор #1 -: Feb 16, 2014, 15:39 »
Само един процесор обслужва прекъсването. Защо трябва да е необходима синхронизация?
Активен

"Knowledge is power" - France is Bacon

binary_code

  • Участници
  • ***
  • Публикации: 5
    • Профил
Re: schedule при SMP системи
« Отговор #2 -: Feb 16, 2014, 16:00 »
не може да е един процесор ... всички процесори трябва да се инеръптнат ....

static void schedule(void)
{
    struct vcpu          *prev = current, *next = NULL;
    s_time_t              now = NOW();
    struct scheduler     *sched;
    unsigned long        *tasklet_work = &this_cpu(tasklet_work_to_do);
    bool_t                tasklet_work_scheduled = 0;
    struct schedule_data *sd;
    struct task_slice     next_slice;
    int cpu = smp_processor_id();

    ASSERT(!in_atomic());

    perfc_incr(sched_run);

    sd = &this_cpu(schedule_data);

-------------------------------


smp_processor_id(); това връща ид-то на текущия процесор - тоест този код се рънва на различни процесори ...
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: schedule при SMP системи
« Отговор #3 -: Feb 16, 2014, 16:15 »
Само един процесор изпълнява прекъсването. Разликата е там че при SMP системите се използва local APIC-а, вместо програмируемия таймер на дъното. Най-лесното е да изпълниш cat /proc/interrupts | grep LOC и ще видиш че всяко ядро е обслужило различен брой прекъсвания на таймера. Няма "глобално" прекъсване, което да се изпълнява на всички процесори. Това има и добри и лоши страни, но това е извън темата.

А иначе ако трябва да съм напълно акуратен, синхронизация има (иначе глобално няма как да станат нещата), но това не става при всяко обслужване на timer прекъсването от всяко ядро. Критериите не ги помня, но доколкото имам спомени, когато runqueue-то на някой процесор остане празно, се вика балансиращата функция, която заключва runqueue-тата за всеки процесор и преизчислява нещата. Същата се вика и периодично на някое от ядрата през някакъв интервал от време, но там нещата загрубяват, защото интервала не е постоянен, а зависи от натоварването на системата, от governor-а на процесора и тем подобни неща.
Активен

"Knowledge is power" - France is Bacon

binary_code

  • Участници
  • ***
  • Публикации: 5
    • Профил
Re: schedule при SMP системи
« Отговор #4 -: Feb 16, 2014, 16:51 »
супер ... мерси много :)

значи до колкото разбирам се ползва локалия APIC (interupts между отделните ядра/процесори) които да инволкват "дипечър хандлера", но броя на извиквания този хендлерер на всеки кор/цпу е различен - тоест има вид асиметрия ...

правилно ли съм разбрал ?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: schedule при SMP системи
« Отговор #5 -: Feb 16, 2014, 19:16 »
Ами горе-долу за всяко ядро се сетъпва LAPIC-а да го рита през някакво време, защо за някое ядро са повече предполагам идва не само от това че са инициализирани в различен момент при boot процеса. Хардуерните особености на цялата работа не са ми много ясни, едно време се беше наложило да се интересувам от резолюция на таймера и от точността на системното време, та оттам са ми предимно спомените.
Активен

"Knowledge is power" - France is Bacon

binary_code

  • Участници
  • ***
  • Публикации: 5
    • Профил
Re: schedule при SMP системи
« Отговор #6 -: Feb 16, 2014, 22:06 »
мерси много за инфото !!! :)

до колкото разбрах smp-to имало проблем със скалабилити ... линукс подържа ли някакой друг модел който скелва без проблем ....
Активен

d0ni

  • Напреднали
  • *****
  • Публикации: 183
    • Профил
Re: schedule при SMP системи
« Отговор #7 -: Feb 16, 2014, 22:58 »
до колкото разбрах smp-to имало проблем със скалабилити ... линукс подържа ли някакой друг модел който скелва без проблем ....

как стигна до този извод ???
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: schedule при SMP системи
« Отговор #8 -: Feb 17, 2014, 00:03 »
Цитат
до колкото разбрах smp-to имало проблем със скалабилити ... линукс подържа ли някакой друг модел който скелва без проблем ....

На този въпрос не мога да ти отговоря тъй като не съм експерт по линукските scheduler-и, защото task scheduler-а сам по себе си може да не е bottleneck-а в цялата работа и защото не знам в какво се изразяват въпросните проблеми. Най-добре е да видиш документацията на CFS, който в момента е нещо като стандартното решение. По принцип иначе е нормално нещата да загрубяват с многопроцесорни системи не само заради scheduler-а - синхронизацията винаги е проблем когато имаш повече паралелни задачи, които се опитват да заключат нещо в един момент. Въпреки че са полагани с времето доста усилия гранулярността на ключалките да става все по-малка. Заключването и отключването в разни мрежови, дискови и т.н. драйвери и подсистеми е нормално да става по-голям проблем когато имаш повече процесори, които търкалят код, който се бори за същите споделени ресурси.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Schedule Shutdown
Настройка на програми
abadon 18 3855 Последна публикация May 07, 2005, 12:38
от
bash script със schedule
Общ форум
mrowcp 8 1874 Последна публикация Dec 29, 2010, 19:51
от mrowcp