2020-09 [cvičenie] zámky - otázky a odpovede

Zdroj
ručne priradené
Pridané

Pozrieť na YouTube →

Preber si túto prednášku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto prednášky.

Otvoriť AI: ChatGPT · Claude · Gemini

Zhrnutie prednášky

Cvičenie je venované otázkam a odpovediam k implementácii per-CPU zámkov pre alokátor pamäťových stránok v xv6. Vysvetľuje sa, ako nahradiť jeden globálny freelist a zámok poľom s NCPU položkami, ako pomocou funkcie CPUID (s vypnutými prerušeniami) prideliť procesoru vlastný zoznam a ako pri prázdnom zozname implementovať kradnutie stránok od iných procesorov bez rizika deadlocku. Rozoberá sa dôvod pomenovania zámkov predponou km pre správne zachytenie štatistiky súperenia (contention) systémovým volaním. Na konkrétnom príklade študentského kódu sa demonštruje chyba spôsobená chýbajúcim kradnutím v k-alokačnej funkcii, ktorá vedie k panike pri inicializácii. Záver sa venuje debugovaniu deadlockov pomocou GDB s obmedzením na jeden procesor a použitím Backtrace na identifikáciu problematického zámku.

  • - Freelist a zámok treba zmeniť z jednej položky na pole s veľkosťou NCPU (jeden zoznam a zámok na procesor).
  • - Pred prácou s CPUID treba vypnúť prerušenia (push_off) a po skončení ich zapnúť (pop_off), aby nedošlo k zmene procesora počas výpočtu.
  • - Pri prázdnom lokálnom zozname treba implementovať kradnutie stránok z iných procesorov, pričom sa prechádza poľom zámkov okrem vlastného procesora.
  • - Kradnutie je vhodné začať od procesora n+1 (nie od nuly), aby sa rovnomerne rozložilo zaťaženie a procesor 0 nebol v nevýhode.
  • - Zámky sa musia volať s predponou km, aby ich systémové volanie kalog test správne zachytilo v štatistike súperenia o zámky.
  • - Bežná chyba je chýbajúca implementácia kradnutia v kalloc, čo spôsobí panic hard CPU starting/init exiting pri viacprocesorovej inicializácii.
  • - Na hľadanie deadlockov sa odporúča použiť GDB (ideálne s NCPU=1), prerušiť bežiaci test Ctrl-C a pomocou backtrace zistiť, v ktorej acquire funkcii a na ktorom zámku k deadlocku dochádza.

Zhrnutie pripravené s pomocou AI z prepisu videa.