Skip to content

Commit

Permalink
crypto: tcrypt - allow setting num of bufs
Browse files Browse the repository at this point in the history
For multiple buffers speed tests, the number of buffers, or
requests, used actually sets the level of parallelism a tfm
provider may utilize to hide latency. The existing number
(of 8) is good for some software based providers but not
enough for many HW providers with deep FIFOs.

Add a module parameter that allows setting the number of
multiple buffers/requests used, leaving the default at 8.

Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Gilad Ben-Yossef authored and Herbert Xu committed Dec 28, 2017
1 parent 4431bd4 commit 8fcdc86
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions crypto/tcrypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ static char *alg = NULL;
static u32 type;
static u32 mask;
static int mode;
static u32 num_mb = 8;
static char *tvmem[TVMEMSIZE];

static char *check[] = {
Expand Down Expand Up @@ -413,7 +414,7 @@ struct test_mb_ahash_data {
};

static void test_mb_ahash_speed(const char *algo, unsigned int sec,
struct hash_speed *speed)
struct hash_speed *speed, u32 num_mb)
{
struct test_mb_ahash_data *data;
struct crypto_ahash *tfm;
Expand All @@ -422,7 +423,7 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,
unsigned int i, j, k;
int ret;

data = kzalloc(sizeof(*data) * 8, GFP_KERNEL);
data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
if (!data)
return;

Expand All @@ -433,7 +434,7 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,
goto free_data;
}

for (i = 0; i < 8; ++i) {
for (i = 0; i < num_mb; ++i) {
if (testmgr_alloc_buf(data[i].xbuf))
goto out;

Expand Down Expand Up @@ -473,7 +474,7 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,
if (speed[i].klen)
crypto_ahash_setkey(tfm, tvmem[0], speed[i].klen);

for (k = 0; k < 8; k++)
for (k = 0; k < num_mb; k++)
ahash_request_set_crypt(data[k].req, data[k].sg,
data[k].result, speed[i].blen);

Expand All @@ -484,7 +485,7 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,

start = get_cycles();

for (k = 0; k < 8; k++) {
for (k = 0; k < num_mb; k++) {
ret = crypto_ahash_digest(data[k].req);
if (ret == -EINPROGRESS) {
ret = 0;
Expand All @@ -509,7 +510,7 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,
end = get_cycles();
cycles = end - start;
pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
cycles, cycles / (8 * speed[i].blen));
cycles, cycles / (num_mb * speed[i].blen));

if (ret) {
pr_err("At least one hashing failed ret=%d\n", ret);
Expand All @@ -518,10 +519,10 @@ static void test_mb_ahash_speed(const char *algo, unsigned int sec,
}

out:
for (k = 0; k < 8; ++k)
for (k = 0; k < num_mb; ++k)
ahash_request_free(data[k].req);

for (k = 0; k < 8; ++k)
for (k = 0; k < num_mb; ++k)
testmgr_free_buf(data[k].xbuf);

crypto_free_ahash(tfm);
Expand Down Expand Up @@ -1815,19 +1816,23 @@ static int do_test(const char *alg, u32 type, u32 mask, int m)
if (mode > 400 && mode < 500) break;
/* fall through */
case 422:
test_mb_ahash_speed("sha1", sec, generic_hash_speed_template);
test_mb_ahash_speed("sha1", sec, generic_hash_speed_template,
num_mb);
if (mode > 400 && mode < 500) break;
/* fall through */
case 423:
test_mb_ahash_speed("sha256", sec, generic_hash_speed_template);
test_mb_ahash_speed("sha256", sec, generic_hash_speed_template,
num_mb);
if (mode > 400 && mode < 500) break;
/* fall through */
case 424:
test_mb_ahash_speed("sha512", sec, generic_hash_speed_template);
test_mb_ahash_speed("sha512", sec, generic_hash_speed_template,
num_mb);
if (mode > 400 && mode < 500) break;
/* fall through */
case 425:
test_mb_ahash_speed("sm3", sec, generic_hash_speed_template);
test_mb_ahash_speed("sm3", sec, generic_hash_speed_template,
num_mb);
if (mode > 400 && mode < 500) break;
/* fall through */
case 499:
Expand Down Expand Up @@ -2106,6 +2111,8 @@ module_param(mode, int, 0);
module_param(sec, uint, 0);
MODULE_PARM_DESC(sec, "Length in seconds of speed tests "
"(defaults to zero which uses CPU cycles instead)");
module_param(num_mb, uint, 0000);
MODULE_PARM_DESC(num_mb, "Number of concurrent requests to be used in mb speed tests (defaults to 8)");

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Quick & dirty crypto testing module");
Expand Down

0 comments on commit 8fcdc86

Please sign in to comment.