Linux Kernel 5.8 將為 blk-mq 引入內(nèi)聯(lián)加密支持
為了提供更好的加密性能,目前谷歌工程師正在為 Linux 文件系統(tǒng)加密管理工具 fscrypt 添加內(nèi)聯(lián)加密支持。而與之相關(guān)的開發(fā)包括在 Linux 5.8 的塊設(shè)備隊列管理 blk-mq 中引入內(nèi)聯(lián)加密。
fscrypt 是用于 Linux 文件系統(tǒng)加密管理的高級工具,它管理元數(shù)據(jù)、密鑰生成、密鑰封裝與 PAM 集成,并提供用于創(chuàng)建和修改加密目錄的統(tǒng)一界面。fscrypt 的內(nèi)核部分已集成到諸如 ext4 的文件系統(tǒng)中。
blk-mq 則是 Linux 的塊設(shè)備層多隊列機制,它將 Linux 內(nèi)核存儲棧中請求層的單隊列改成多隊列,理論上提升性能。
如果接下來 blk-mq 支持內(nèi)聯(lián)加密,那么它能夠在存儲棧中向下傳遞加密上下文,目前 Linux 內(nèi)核源碼 commit中解釋:我們必須通過某種方式讓存儲設(shè)備驅(qū)動程序知道它應(yīng)該用于加密/解密請求的加密上下文。而上層(例如文件系統(tǒng)/fscrypt)知道情況并且管理加密上下文。這樣,當上層提交 BIO 到塊層,這個 BIO 最終到達的設(shè)備驅(qū)動程序支持內(nèi)聯(lián)加密,那么設(shè)備驅(qū)動程序則已經(jīng)表明了 BIO 的加密上下文。
代碼上具體改動是將 struct bio_crypt_ctx 添加到 struct bio 中,用來表示加密上下文,同時引入各種用于操作 bio_crypt_ctx 并使 bio/request 合并函數(shù)邏輯知曉 bio_crypt_ctx。