contributed by < HotMercury
>
注意作業書寫規範,包含標題。
第四週測驗三
預期目標 : 充分理解 linux 內部的紅黑樹,以及測試效能的方式
第二週測驗一
預期目標:了解 linux 中 cgroup 設計目的,以及演化
第三週測驗四
預期目標:嘗試理解無線網路裝置驅動程式並整理
這篇文章當頭棒喝的敲醒我對學習的認知,學習路上總是順著"應該"的道路前進,很少思考自己要的是什麼,順從代表欠缺了決定,以及承受每個決定之後帶來的結果,而對於學習總是屬於被動,沒有真正理解也就無法當作養分,當我們主動踏出決定並著手身體力行,我們才能真正學到與達成目標。
「資工系的學生不會寫程式,機械系的學生不會做機械」這句話在我開始接觸作業的時候深深的體悟到了,我可以在短時間內寫出看似符合作業標準的程式碼,為什麼說看似,因為我沒辦法提出證明,與他人比較,分析各種情況下的表現,這是我投入前不曾想過的,經過幾周的練習,我慢慢開始會構思程式碼並想辦法改進,我學會了使用圖表分析,利用一點點統計學來測量,擴大思考的因素例如:硬體架構,最差狀況問題等等。
這學期我認知道一見很重要的事情:『細節』在查閱資料時都是直接查閱作法以及他人的二手資料,這樣的後果就是無法了解事情的來龍去脈,只是像機器般照做。無法以第一手資料向他人解釋就無法真正了解資訊產業,這是我改變最多的想法。
我在這學期主動學習 linux kernel,我想像作者一樣充滿著熱血奮鬥一次,這次我知道我想投身進 linux kernel 的程式碼,我不是為了貢獻社會這種偉大的想法,而是我想要證明自己,眾多世界高手正在修改著 kernel 內部的程式碼,我卻連閱讀都感到困難,這是必須突破的。這幾周的作業只要牽扯到 lnux kernel 內部程式碼,都會讓我感到棘手,但我不認為我能力只會到這,這學期我必須達到這個目標,如果我不能解決眼前的問題,我就會變成那個有問題的人。
最後勉勵自己:紙上得來終覺淺,絕知此事要躬行
陸游
CPU sched book: Group scheduling and cgroups (Chapter 4)
https://docs.kernel.org/accounting/psi.html
我在閱讀 fsync
syscall 時為了瞭解 write back 的流程注意到 Writeback and control groups, 把資料從 memory 寫入 persistent device 是一件棘手的事,kernel 必須在 dirty pages 與 limited I/O bandwidth 間平衡,以下提出為什麼需要使用 cgroups.
There is a "magical function" called balance_dirty_pages() that will, if need be, throttle processes dirtying a lot of pages in order to match the rate at which pages are being dirtied and the rate at which they can be cleaned. It works reasonably well in current kernels, but it only operates globally; it is not equipped to deal with control groups
然而 block controller 與 memory controller 並不能好好協調
Writeback is clearly related to both memory use and I/O bandwidth, but the control-group mechanism offers no way to enable controllers to work together
以下是我的問題及總結
block control 並不能得到 memory control 的資訊,因此並不會去執行特定 control group 的資料,這樣會影響 global dirty-page watermarks
但我還是很不能理解 memory control 和 block control 的關西
為什麼 open syscall 通常會先找 rcu 如果沒有再走 REF-walk
check 宋宝华
我在閱讀 rwb_arm_timer
感到無力感,我沒辦法透過只看 code 去理解這段的意義,網路上的資料也沒有相關議題,可能必須從 git commit 去理解?
找 Jens Axboe 的演講和報告 (maintainer of block layer and io_uring)
假設我今天想要理解 open syscall 在 kernel 的流程,在網路上只能找到 csdn 殘體攻略,版本落時,但直接閱讀程式碼時又會遇到很多隱藏的設計問題,思緒會斷斷續續導致大致瀏覽過卻又不清楚。
commit fe12cfc 這是我在閱讀有關 VFS 程式碼時所發現的錯字
4/14 有發 patch 現在在等回覆
目前想要往 VFS,ext4,block layer 做出貢獻
在閱讀 driver dmcache 時有注意到一個 funciton segment_complete
裡面註解 fixme 所以我認為這裡是有機會貢獻的
/* FIXME: tidy this function */
這是一個 dm cache driver,可以將 SSD 當作 HDD 的 cache,為了作到這件事,會設計一個 migration 機制,以 work queue 的方式執行 HDD 與 SSD 間的資料搬移,所以會進入 copy
function
copy
透過設定 struct dm_io_region
可以分別定義 HDD and SSD 的實體位置,長度,device。
接下來探討 promotion 的情況進入 dm_kcopy_copy
dm_kcopyd_copy
input
copy_complete
負責做完的處理設定 struct kcopyd_job
這裡用到 GFP_NOIO 分配,GFP 也就是 get free pages,因此先聊解此意義,GFP masks used from FS/IO context,在 filesystem or stack io 需要注意 recursion deadlock,還沒很清楚暸解 lock 間的問題。
Historically, they were used to prevent recursion deadlocks caused by direct memory reclaim calling back into the FS or IO paths and blocking on already held resources. Since 4.12 the preferred way to address this issue is to use new scope APIs described in Documentation/core-api/gfp_mask-from-fs-io.rst.
注意 ext3, ReiserFS, JFS (IBM 貢獻), 如何處理 metadata, EXT3 Journal Structure, Checkpointing, Crash Recovery, Summary of Ext3