為什麼這篇Linux 核心開發鄉民發文收入到精華區:因為在Linux 核心開發這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者tuxoko (tux)看板Soft_Job標題Re: [閒聊] Linux Kernel 開發...
我不知道本魯該不該算是個 Linux Kernel 開發者
我只有 submit 過 2 個很小的 patches 到 mainline,而且都不是核心
總之我主要做的事情都是 out of tree 的
我一開始接觸這塊 是因為工作上要求而自幹了一個 remote filesystem
那個時候就靠從 fs 相關 syscall 開始 trace code 進 VFS layer
然後看他跟各個 filesystem operations 如何搭上
我大概花了一個禮拜的時間做出一個可以 mount 的 prototype
然後再慢慢的把剩下的 syscall 相關的 operation 補上
那段時間我過的真的蠻充實的
我從完全沒有 Kernel 開發經驗 到 VFS 由裡到外弄懂 (很舊的版本 現在又變好多QQ)
還弄懂各種 Synchronizaion: ticket spinlock, mutex, wait_queue, RCU
還有各種 Debugging 技巧: 看懂 oops/decodecode, Magic sysrq, kexec/kdump
這些基本上都是我自學的
總之我目前主要參與的是 ZFS on Linux (還是filesystem相關...)
我目前主要都是一些bugfix 和支援新版 kernel 相容性為主
我最大的貢獻是改進ZFS 的 memory management
那個pull request 已經一年多了還沒merge 進去QQ
另外我有幾個race condition 的bugfix 也是令我滿自豪的
比如有一個存在已久跟 mutex 相關的 race/memory corrution 大家都摸不著頭緒是
被我解掉的
另外發一下牢騷,ZFS 因為是從 Solaris/Illumos porting 過來的
很多 API 都要包裝過,用在Linux 上往往都會有一些小問題要work around
然後他們的Lock ordering 非常的 sloppy,而且沒有註解清楚這些 Lock 到底是要保護
什麼,導致常常會有lock inversion deadlock 出現。
我常常腦海裏面都有砍掉重練的聲音,可是 ZFS 實在是太龐大的QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 50.135.204.227
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1449049236.A.C5B.html
解 deadlock 也沒有什麼特殊技巧,就是運用現有的工具像 softlockup,
hardlockup detector, hung task detector,有了這些 deadlock 時多半會出現
問題 thread 的 call trace,再利用這些分析問題點在哪。如果沒有打開那些功能
也可以用 sysrq-l sysrq-w 之類的。
另外 Kernel 有內建強大的 Lock ordering 分析器 Lockdep。他可以動態建立各種
Lock class 之間的相依性,然後印出所有可能 deadlock 的地方。
可是因為 ZFS 沒有嚴謹的 Lock class ordering,所以一開 Lockdep 馬上就吐一對東西
出來,所以目前還沒辦法用在 ZFS 上。QQ
oops 也沒什麼特殊技巧,先把 "Code: 48 89 45 c8 0f ..." 這行
餵進 scripts/decodecode 就可以得到問題點的 assembly
對照到 source code,然後利用 register 的值就可以大概推出當時的 state。
剩下的就是根據問題的種類想辦法分析了
也不算沒下文啦,這段時間我偶爾會更新一下,也有一些人有持續使用
只是說他動到的範圍太大,怕會影響跟 illumos 之間的流動性所以暫時還沒進去
這段 code illumos 也正在 porting 回去,所以應該可見的未來會進去吧...
話說你不是 maintainer 嗎? Maintainer 的等級不是比較高嗎?