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"