Intel AV-ICE06加速卡測試報告
Intel RSA加速卡結合Intel其QAT_Engine測試性能的提升,其支持的異步模式對性能的提升很大。
注意QAT_Engine只支持openssl1.1.0以上
1 測試環境
硬件:H61
系統:2.6.32-64bits+gcc4.4.5
openssl:公版openssl1.1.1a
加速卡:Intel AV-ICE06(C62X系列)
2 准備工作
2.1 下載驅動及相關手冊

2.2 下載QAT引擎
git clone https://github.com/01org/QAT_Engine.git
2.3 下載OpenSSL-1.1.1a
2.4 確保已安裝這些軟件包
apt-get update
apt-get install pciutils-dev
apt-get install g++
apt-get install pkg-config
apt-get install libssl-dev
3 編譯gcc4.4.7(此步可以跳過,直接修改configure中gcc版本依賴為>=4.4.5)
3.1下載源碼(要求gcc>=4.4.7)
- gcc下載地址:https://ftp.gnu.org/gnu/gcc/gcc-4.4.7
- gmp下載地址:https://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
- mpc下載地址:https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
- mpfr下載地址:https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
3.2 安裝gmp-4.3.2
tar jxvf gmp-4.3.2.tar.bz2
cd gmp-4.3.2
mkdir build && cd build
../configure --prefix=/usr/local/gmp-4.3.2
make
make install
3.3 安裝mpfr-3.1.4
tar -jzvf mpfr-3.1.4.tar.bz2
cd mpfr-3.1.4
mkdir build && cd build
../configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-4.3.2
make
make install
3.4 安裝mpc-1.0.3
tar -zxvf mpc-1.0.3.tar.gz
mkdir build && cd build
../configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-3.1.4
make
make install
3.5 安裝gcc-4.4.7
tar -zxvf gcc-4.4.7.tar.gz
cd gcc-4.4.7
mkdir build && cd build
../configure --prefix=/usr/local/gcc-4.4.7 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3
make
make install
4 intel加速卡驅動編譯
4.1 編譯驅動
mkdir QAT && cd QAT
tar -zxvf qat1.7.l.4.4.0-00023.tar.gz
./configure
make qat-driver-install
4.2 驅動編譯過程碰到的問題
問題1:pci_pcie_cap函數重定義
解決方法:
刪除 /home/ssl/QAT/quickassist/qat/compat/qat_compat.h第107開始的pci_pcie_cap函數
問題2:內核不存在usleep_range函數定義
解決方法:
../quickassist/qat/drivers/crypto/qat/qat_common/adf_clock.c:152
../quickassist/qat/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c:165
../quickassist/qat/drivers/crypto/qat/qat_common/adf_admin.c:166
以上3處替換為udelay函數
問題3:內核不支持使用MD5進行預計算
沒有/usr/src/linux-headers-2.6.32-5-amd64-hz1000/include/crypto/md5.h文件
解決方法:
將 /home/ssl/QAT/quickassist/utilities/osal/src/linux/kernel_space/OsalCryptoInterface.c 88行if內的部分注釋掉,改成跟else一樣。
或者直接將內核版本判斷改成2.6.33,其余幾個地方也是一樣
4.3 拷貝整個QAT目錄及驅動至產品機
- 將QAT整個目錄拷貝至產品機
- 將/lib/modules/2.6.32-5-amd64-hz1000/updates/整個目錄下和/lib/modules/2.6.32-5-amd64-hz1000/kernel/drivers/下的qat_api.ko和usdm_drv.ko拷貝至產品機對應目錄下
4.4 intel_qat依賴uio.ko,需要從開發機中拷過去
驅動位於/lib/modules/2.6.32-5-amd64-hz1000/kernel/drivers/uio
4.5 產品機上操作,進行剩余的安裝,啟動加速服務
cd QAT
make adf-ctl-install
make qat-service-install
4.6 如果純手動操作,在編譯完成之后需要
- 將動態庫拷到/lib下
- 將adf_ctl拷到$ICP_ROOT/build和/usr/sbin
- 將配置文件拷貝/etc下
- 將firmware文件拷到/lib/firmware
- 將模塊拷到內核源目錄下,供qat_service加載
- 啟動qat_service,加載合適的模塊,並且運行adf_ctl打開設備
- 將qat_service加入啟動腳本中
5 加速服務控制命令
service qat_service start
service qat_service stop //停止軟件
service qat_service shutdown //停止軟件並移除驅動
或者
/etc/init.d/qat_service start
/etc/init.d/qat_service stop //停止軟件
/etc/init.d/qat_service shutdown //停止軟件並移除驅動
6 安裝sample應用(本部分不是必須)
- 編譯安裝
在QAT目錄下, make samples-install
- 編譯問題
6系列內核kernel_write函數是靜態的,sample驅動中用到會找不到。直接注釋掉即可,內核態測試才需要用到
cp /home/ssl/QAT/quickassist/lookaside/access_layer/src/sample_code/performance/compression/calgary /lib/firmware
cp /home/ssl/QAT/quickassist/lookaside/access_layer/src/sample_code/performance/compression/calgary32 /lib/firmware
cp /home/ssl/QAT/quickassist/lookaside/access_layer/src/sample_code/performance/compression/canterbury /lib/firmware
cp /home/ssl/QAT/build/cpa_sample_code /usr/local/bin/cpa_sample_code
cp /home/ssl/QAT/build/cpa_sample_code.ko /usr/local/bin/cpa_sample_code.ko
- 測試
在用戶態,啟動cpa_sample_code之前,確保LD_LIBRARY_PATH設置了libqat_s.so所在的路徑
在執行sample代碼前,必須已加載驅動且軟件已經啟動。可以用一下命令確認
lsmod | grep "qa"
service qat_service status
用戶態下,執行sample代碼:./cpa_sample_code
內核態下,執行sample代碼: insmod ./cpa_sample_code.ko
7 編譯OpenSSL-1.1.1a
./config --prefix=/usr/local/ssl -Wl,-rpath,\${LIBRPATH}
make depend (if recommended by the OpenSSL\* build system)
make
make install
export OPENSSL_ENGINES=/usr/local/ssl/lib/engines-1.1
8 QAT引擎編譯
8.1 編譯命令
要帶Upstream QAT driver並且使用USDM組件
cd /QAT_Engine
./autogen.sh
./configure \
--with-qat_dir=/home/ssl/QAT \
--with-openssl_dir=/home/ssl/openssl-OpenSSL_1_1_1a \
--with-openssl_install_dir=/usr/local/ssl \
--enable-upstream_driver \
--enable-usdm
make
make install
8.2 碰到的問題
錯誤1:autoconf版本不夠
解決:autoconf要求2.68以上,修改/QAT_Engine/ .tools/configure.ac第4行
錯誤2:configdata.pm not present in the @INC path
解決:export PERL5LIB=$PERL5LIB:/home/ssl/openssl-OpenSSL_1_1_1a
錯誤3:gcc未知的選項-fstack-protector-strong
解決:gcc4.9開始才支持此選項,可以改成-fstack-protector-all或者-fstack-protector
8.3 引擎測試
根據實際情況選擇/QAT_Engine/qat/config/c6xx下配置拷貝到/etc
重啟加速驅動
./openssl engine -t -c -vvvv qat #會打出qat引擎的相關信息
9 openssl speed測試命令
- RSA2048
# Software 純軟
./openssl speed -elapsed rsa2048
# Synchronous 同步
./openssl speed -engine qat -elapsed rsa2048
# Asynchronous1 異步
./openssl speed -engine qat -elapsed -async_jobs 36 rsa2048
# Asynchronous2 異步
./openssl speed -engine qat -elapsed -async_jobs 72 rsa2048
- ECDSA-P256
# Software 純軟
./openssl speed -elapsed ecdsap256
# Synchronous 同步
./openssl speed -engine qat -elapsed ecdsap256
# Asynchronous1 異步1
./openssl speed -engine qat -elapsed -async_jobs 36 ecdsap256
# Asynchronous2 異步2
./openssl speed -engine qat -elapsed -async_jobs 72 ecdsap256
- ECDH-P256
# Software 純軟
./openssl speed -elapsed ecdhp256
# Synchronous 同步
./openssl speed -engine qat -elapsed ecdhp256
# Asynchronous1 異步1
./openssl speed -engine qat -elapsed -async_jobs 36 ecdpp256
# Asynchronous2 異步2
./openssl speed -engine qat -elapsed -async_jobs 72 ecdpp256
10 測試結果

