Silly overview - MarekBykowski/readme GitHub Wiki

Axxia ma dwa kernele preempt i rt-preempt. Proponuje zapoznac sie z nimi.

Synchornizacja

  • Atomic, co to load/store exclusive
  • Rcu (read copy update), bardzo dobrze sie sprawdza gdy mamy mase czytaczy i niewielu pisaczy https://en.wikipedia.org/wiki/Read-copy-update#Sample_RCU_interface
  • Chronienie sekcji krytycznej i synchornizacja miedzy watkami * spin_lock/raw_spin_lock, co sie dzieje ze spin lock gdy kernel rt-preempt
  • mutex
  • semaphore do, np.:
    • ochrony sekcji krytycznej
    • synchornizacji miedzy watkami typu event generator and event receiver
    • alokacja limitowanych resource’ów: np. mamy piec bufforow, wiec wpuscmy max. 5 watkow
  • ref count; helps with the prevention of use-after-free bugs

memory barriers

dmb, dsb, isb. Kiedy np. Robic „dmb sy” a kiedy „dmb osh”

per_cpu

Idealne do zbierania statystyk, counterow, tworzysz raz i pojawia sie jedna instancja per core wiec nie ma race’ów

irq: hard irq (top half) I soft irq (bottom half)

  • Ja bym sie glownie zastanowil nad obsluga irq, hard to zawsze to samo ale na jaki sie zdecydowac bootom half: work queue czy threaded irq
    • work queue jest wygodne bo mozna korzystac albo z publicznych threadow do obslugi albo potworzyc wlasne
    • ostatnio widze ze jest tendencja dla obslugi deferal z uzyciem threaded irq serviceow
  • Maskowanie interruptow RIFa w GIC czy w RIFie?
  • Request_irq czy devm_request_irq (jezeli platform drvier to lepsze devm_request_irq). Przy odrejestrowywaniu urzadzenia nie trzeba odrejstrowywac interrupta
  • Tasklets are softirqs that do not run concurrently
  • Softirq can run concurrently on differernt CPUs
  • Work Queues run in process context
  • Ustawnia GICa. Uwaga i to plus: w xlf jest gicv3 jeden sharowany przez wszystkie core’y. Pytanie czy interrupt z RIFa maja przychodzic na cpu0 czy inny, jakas polityka

sk_buff

in_atomic()

Jezeli bedzie trzeba dorobic API jak np. w RIFie to trzeba wziac pod uwage, ze pewnie bedzie copy_{to,from}_user. One moga spac wiec nie moga byc lockowane spin lockami. Nie mozna tez wylaczac preempt przed ich uzywciem (preempt_disable/enable lub get_cpu/put_cpu)

arch/arm64

Tez warto poczytac... nie ma w armv8 axxia-mach katalogu, wszystko jest rozproszone

debugowanie

  • Poniewaz mamy telnet do plytek jedyne gdb ktory chodzi to gdb over eth, jest LKM modul mi dzialal
  • dstrem-5, dam configuration database, bylem wstanie wszystkie core’y zhaltowac
  • scripts/decodecode do dissasemblowania kernel oopsa. Przkleijasz dumpa i scripts/decodecode < przeklejony_dump.txt
  • dobry jest kcore, pojawia Ci sie w /proc i jedziesz gdb /proc/kcore i debugujesz kernela na ktorym dzialasz. Russel King wywalil z arma bo ma bledy i nie ma komu supportowac, ale da sie jeszcze korzystac
Kernel oops diff --git a/fs/proc/Kconfig b/fs/proc/Kconfig
index 2183fcf..e551c36 100644
--- a/fs/proc/Kconfig
+++ b/fs/proc/Kconfig@@
-29,7 +29,7 @@ config PROC_FS
          programs depend on this, so everyone should say Y here.

config PROC_KCORE
-       bool "/proc/kcore support" if !ARM
+       bool "/proc/kcore support"

Literatura:

http://kernelbook.sourceforge.net/kernel-locking.pdf