GNU/Linux >> Znalost Linux >  >> Linux

Proč deaktivace přerušení deaktivuje preempci jádra a jak spin lock deaktivuje preempci

Nejsem guru plánovačů, ale rád bych vysvětlil, jak to vidím já. Zde je několik věcí.

  1. preempt_disable() nezakáže IRQ . Pouze se zvýší thread_info->preempt_count proměnná.
  2. Zakázání přerušení také zakáže preempci, protože plánovač poté nefunguje – ale pouze na počítači s jedním CPU. Na SMP to nestačí, protože když zavřete přerušení na jednom CPU, druhý / ostatní stále dělají / dělají něco asynchronně.
  3. Big Lock (znamená - uzavření všech přerušení na všech CPU) dramaticky zpomaluje systém - proto se již nepoužívá. To je také důvod, proč preempt_disable() neuzavře IRQ.

Můžete vidět, co je preempt_disable(). Zkuste toto:1. Získejte spinlock.2. Plán hovorů()

V dmesg uvidíte něco jako "BUG:scheduling while atomic". K tomu dojde, když plánovač zjistí, že váš proces je v atomickém (nikoli preemptivním) kontextu, ale naplánuje se sám.

Hodně štěstí.


V modulu testovacího jádra, který jsem napsal za účelem monitorování/profilování úlohy, jsem se pokusil zakázat přerušení pomocí:

1 – Použití local_irq_save()

2 - Použití spin_lock_irqsave()

3 – Ručně zakázat_irq() všem IRQ v /proc/interrupts

Ve všech 3 případech jsem stále mohl používat hrtimer k měření času, i když byly IRQ zakázány (a úkol, který jsem monitoroval, byl také vyloučen).

Připadá mi to veeeeerrrryyyy divné... Osobně jsem očekával to, na co upozornil Sebastian Mountaniol -> Žádná přerušení - žádné hodiny. Žádné hodiny – žádné časovače...

Linuxové jádro 2.6.32 na jednom jádru, jediném CPU... Může někdo mít lepší vysvětlení?


Linux
  1. Vlastní jádra v Ubuntu/Debianu – jak, kdy a proč

  2. Jak a proč používat vzdáleného hostitele dockeru

  3. Jak zamknout a odemknout uživatele v Linuxu

  1. Jak ladit linuxové jádro pomocí GDB a QEMU?

  2. Jak číst, chápat, analyzovat a ladit paniku linuxového jádra?

  3. Jak mohu zkontrolovat konfiguraci preempce jádra?

  1. Redis jako mezipaměť:Jak to funguje a proč ji používat

  2. Proč jsou data důležitá a jak je chránit

  3. Proč získáte cp:vynechání chyby adresáře v Linuxu a jak to vyřešit