Intel QAT ZIP初步分析
-v0.1 2019.11.22 Sherlock init
本文分析Intel QAT技術對應軟件棧的支持,主要的關注點在壓縮解壓縮的軟件棧,本文
只是尋找資料時候的一個筆記,還很粗糙。
- 基本信息
QAT的官網: https://www.intel.cn/content/www/cn/zh/architecture-and-technology/intel-quick-assist-technology-overview.html
QAT相關的代碼在01.org網站: https://01.org/zh/intel-quickassist-technology?langredirect=1
基本QAT相關的用戶手冊,代碼都可以從上面的URL獲得。
- 用戶APP、QATzip、libqat庫的關係
我們這裏看看QAT裏支持的壓縮解壓縮是怎麼最終叫用戶APP使用到的。
QAT整個壓縮解壓縮的軟件棧由: 內核驅動,libqat用戶態基礎庫,QATzip用戶態庫組成。
我們這裏以ceph作爲APP,一起看下,ceph裏的壓縮解壓縮可以直接調用QATzip庫提供的
接口使用QAT的硬件壓縮解壓縮引擎。
以上軟件的位置在:1. QAT的內核態驅動和libqat用戶態基礎庫合在一起放在上面的01.org
的這個包裏:Intel® QuickAssist Technology Driver for Linux* - HW version 1.7.
2. QATzip的代碼在:https://github.com/intel/QATzip. 3. ceph的代碼:github.com/ceph.
整個調用鏈的邏輯是:
-
內核態QAT crypto驅動除了向crypto子系統上註冊外,也會向內核UIO子系統註冊,
通過UIO把QAT的硬件資源暴露給用戶態。由於UIO存在安全上的問題,可以看到主線
內核裏註冊到UIO的驅動很少,這也是QAT內核驅動中註冊UIO這部分無法上傳到主線
的原因。 -
libqat用戶態基礎庫封裝UIO用戶態接口,向上提供一組基礎的API。這個在01.org
網站的接口說明文檔中有介紹。 -
QATzip這個庫調用libqat API對外提供QAT的壓縮解壓縮基本接口。提供的接口在
QATzip/include/qatzip.h這個頭文件中。 -
Ceph代碼裏壓縮解壓縮的部分ceph/src/compressor/有QatAccel.cc, 這部分代碼
調用QATzip的接口封裝ceph裏的壓縮解壓縮接口供同目錄下的zlib/zlibCompressor.cc
使用。(目前竟然是HAVE_QATZIP這個宏隔開的 😦 ) -
接口分析
(to do: …)