近兩年,我一直在閱讀linux核心IO流程相關的代碼,一方面是工作需要,平時需要解決一些相關問題,另一方面也想借着閱讀他人的代碼提高自己。從最開始的一片懵懂到熟悉,知識總是在點滴的積累中累計成塔。
年初的時候産生了寫部落格的想法,然總覺知小而謀大,寫出的東西會誤導想了解這個領域的人,最終還是沒有動筆。如今半年過去,随着了解的核心子產品越多,知識就越零散,想着還是把知道的東西寫下來,一來是對知識的整理與分類,給自己留下點回憶;二來如果有人從這些文字中獲益,那我是極為開心的。
linux核心紛繁複雜,有時候即使看懂了代碼但也未必能明白開發者的真正意圖,隻能大概揣測一二,是以如果有寫的不詳盡,不正确之處請海涵,也歡迎一起交流,互相學習。
linux核心的IO流程從上到下大緻分為VFS層、檔案系統層、緩存層(其實是VFS的一部分)、Block通用塊層、BUS層(PCIe、RDMA、FC等)、裝置層。 裝置層我用NVMe做講解,Block層用MQ機制講解,檔案系統用ext4講解,至于BUS層,打算是用PCIe但是還未熟悉就先暫時擱置。 部落格采用的是linux4.20的代碼來分析IO流程的設計,用關系圖和流程圖作為輔助,争取能給講明白不會給讀者留下不知所雲的感覺。
在閱讀源碼的過程中看了很多前輩這方面的部落格,學習甚多,不覺得能給超越這些人,然不斷向前即可。