a3485e685f
Calling runtime PM API for every block causes serious perf hit to crypto operations that are done on a long buffer. As crypto is performed on a page boundary, encrypting large buffers can cause a series of crypto operations divided by page. The runtime PM API is also called those many times. We call runtime_pm_get_sync only at beginning on the session (cra_init) and runtime_pm_put at the end. This result in upto a 50% speedup as below. This doesn't make the driver to keep the system awake as runtime get/put is only called during a crypto session which completes usually quickly. Before: root@beagleboard:~# time -v openssl speed -evp aes-128-cbc Doing aes-128-cbc for 3s on 16 size blocks: 13310 aes-128-cbc's in 0.01s Doing aes-128-cbc for 3s on 64 size blocks: 13040 aes-128-cbc's in 0.04s Doing aes-128-cbc for 3s on 256 size blocks: 9134 aes-128-cbc's in 0.03s Doing aes-128-cbc for 3s on 1024 size blocks: 8939 aes-128-cbc's in 0.01s Doing aes-128-cbc for 3s on 8192 size blocks: 4299 aes-128-cbc's in 0.00s After: root@beagleboard:~# time -v openssl speed -evp aes-128-cbc Doing aes-128-cbc for 3s on 16 size blocks: 18911 aes-128-cbc's in 0.02s Doing aes-128-cbc for 3s on 64 size blocks: 18878 aes-128-cbc's in 0.02s Doing aes-128-cbc for 3s on 256 size blocks: 11878 aes-128-cbc's in 0.10s Doing aes-128-cbc for 3s on 1024 size blocks: 11538 aes-128-cbc's in 0.05s Doing aes-128-cbc for 3s on 8192 size blocks: 4857 aes-128-cbc's in 0.03s While at it, also drop enter and exit pr_debugs, in related code. tracers can be used for that. Tested on a Beaglebone (AM335x SoC) board. Signed-off-by: Joel A Fernandes <joelagnel@ti.com> Acked-by: Kevin Hilman <khilman@linaro.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
||
---|---|---|
.. | ||
amcc | ||
caam | ||
nx | ||
ux500 | ||
atmel-aes-regs.h | ||
atmel-aes.c | ||
atmel-sha-regs.h | ||
atmel-sha.c | ||
atmel-tdes-regs.h | ||
atmel-tdes.c | ||
bfin_crc.c | ||
dcp.c | ||
geode-aes.c | ||
geode-aes.h | ||
hifn_795x.c | ||
ixp4xx_crypto.c | ||
Kconfig | ||
Makefile | ||
mv_cesa.c | ||
mv_cesa.h | ||
n2_asm.S | ||
n2_core.c | ||
n2_core.h | ||
omap-aes.c | ||
omap-sham.c | ||
padlock-aes.c | ||
padlock-sha.c | ||
picoxcell_crypto_regs.h | ||
picoxcell_crypto.c | ||
s5p-sss.c | ||
sahara.c | ||
talitos.c | ||
talitos.h | ||
tegra-aes.c | ||
tegra-aes.h |