参考:

https://archlinuxarm.org/forum/viewtopic.php?f=30&t=2452

https://archlinuxarm.org/forum/viewtopic.php?f=7&t=2451#p13657

 

最近把在吃灰的PogoPlug又重新捞出来丢到出租屋那边,刚才在网上瞎逛的时候突然发现Archlinux的论坛上有个家伙po了个帖子,说在研究能不能打开他手里的pogoplug的AES硬件加速,然后发现可行并且有点效果,于是我也尝试着试了一下,发现确实ok,于是先记一下。

由于好心人(pklaus)的付出,现在不需要重复 firefoxPL先生的老路了,现在只需要安装特定的软件包,并且创建文件让系统能够在启动的时候自动加载kernel mod就可以用了。

根据原po的说明以及大胆的猜测,初步推测不仅仅是pogoplug,其他使用kiriwoodCPU的设备都可以用相同的方法来开启硬件加速。

先安装所需的kernel header:

pacman -S linux-kirkwood-headers

然后安装cryptodev-dkms以及其所需的软件包:

pacman -S cryptodev-dkms

然后就会根据安装脚本自动编译kernel mod,由于是需要编译的,可能会出现其他的软件包需求。

安装完毕之后,就把openssl给替换掉:

pacman -S openssl-cryptodev

由于openssl-cryptodev会自动引用一个openssl,其版本不一定会是最新,所以要是提示有openssl可以更新的时候请不要在意,保持openssl-cryptodev是最新的即可。当然openssl和openssl-cryptodev会有冲突,安装的时候会有提醒的。

顺便贴一下我测试的开了硬件加速和没开硬件加速的区别:

这个是没开

[root@alarm ~]# openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 1360545 aes-128-cbc's in 2.78s
Doing aes-128-cbc for 3s on 64 size blocks: 489186 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 256 size blocks: 133567 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 1024 size blocks: 32897 aes-128-cbc's in 2.88s
Doing aes-128-cbc for 3s on 8192 size blocks: 4273 aes-128-cbc's in 2.98s
Doing aes-128-cbc for 3s on 16384 size blocks: 2143 aes-128-cbc's in 2.99s
OpenSSL 1.1.0h 27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,32) rc4(char) des(long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DHAVE_CRYPTODEV -DHASH_MAX_LEN=64 -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib/engines-1.1\"" -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -march=armv5te -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 7830.47k 10470.87k 11435.84k 11696.71k 11746.45k 11742.78k

这个是开了

[root@alarm ~]# openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 36940 aes-128-cbc's in 0.11s
Doing aes-128-cbc for 3s on 64 size blocks: 37466 aes-128-cbc's in 0.07s
Doing aes-128-cbc for 3s on 256 size blocks: 33812 aes-128-cbc's in 0.07s
Doing aes-128-cbc for 3s on 1024 size blocks: 20341 aes-128-cbc's in 0.08s
Doing aes-128-cbc for 3s on 8192 size blocks: 5133 aes-128-cbc's in 0.01s
Doing aes-128-cbc for 3s on 16384 size blocks: 2984 aes-128-cbc's in 0.02s
OpenSSL 1.1.0h 27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,32) rc4(char) des(long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DHAVE_CRYPTODEV -DHASH_MAX_LEN=64 -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib/engines-1.1\"" -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -march=armv5te -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 5373.09k 34254.63k 123655.31k 260364.80k 4204953.60k 2444492.80k

这效率差距不是一星半点。不过根据原po的另外一个测试,在使用openssh传输文件的时候,速度和带宽的差距并不明显,只是在打开了硬件加速的时候,CPU占用会下降。

参考:http://www.cianmcgovern.com/serving-live-arch-linux-environment-pxe/

另外参照之前关于建立pxe服务器的文章:https://ferrets.space/2014/04/07/%e5%9c%a8%e5%ae%b6%e9%87%8c%e5%81%9a%e4%ba%86%e4%b8%aapxe%e6%9c%8d%e5%8a%a1%e5%99%a8/

其中,pxelinux.cfg/default中关于archlinux启动字段是这样的

LABEL archlinuxlive
menu label Arch Linux Live 64bit
kernel archlinuxlive/arch/boot/x86_64/vmlinuz
append initrd=archlinuxlive/arch/boot/x86_64/archiso.img archisobasedir=arch archiso_nfs_srv=NFS_SERVER_IP:/home/pxeroot/archlinuxlive ip=:::::eth0:dhcp -

不同的linux的append字段都不一样呢