AES crypto performance improvements
Stefan Metzmacher
metze at samba.org
Mon Aug 17 13:39:09 UTC 2015
Am 14.08.2015 um 15:28 schrieb Stefan Metzmacher:
> Am 13.08.2015 um 23:22 schrieb Stefan Metzmacher:
>> Hi,
>>
>> while debugging poor performance of our SMB3 crypto
>> I developed the following performance improvements.
>>
>> The aes_block_xor() improved by a factor of ~10.
>> The aes_block_[r|l]shift() functions improved by 25%.
>>
>> Please review and push.
>>
>> The real solution will be to use hardware support,
>> I've extended the work from Simo in the following branch
>> https://git.samba.org/?p=metze/samba/wip.git;a=shortlog;h=refs/heads/master3-smb-crypto
>> (ignore the unrelated and directly reverted commits on top)
>>
>> But I'm not that happy with the abstraction yet.
>
> There's a regression in the aes_ccm_128 optimization because that doesn't
> have test cases... I'm working on it.
As a start I'd like to prefer aes-ccm for 4.3.0rc3.
Can someone review and push these patches to master?
Thanks!
metze
-------------- next part --------------
From cbe431929b5aa8e1ab9922fd1af71bdc495a3b28 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze at samba.org>
Date: Mon, 17 Aug 2015 08:56:43 +0200
Subject: [PATCH 1/2] libcli/smb: prefer AES128_CCM
Callgrind showed that we use 28,165,720,719 cpu cycles to send
a 100MB file to a client using aes-ccm.
With aes-gcm this is raises up to 723,094,413,831 cpu cycles.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11451
Signed-off-by: Stefan Metzmacher <metze at samba.org>
---
libcli/smb/smbXcli_base.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index 6c35430..c1e9e58 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -4598,8 +4598,12 @@ static struct tevent_req *smbXcli_negprot_smb2_subreq(struct smbXcli_negprot_sta
}
SSVAL(p, 0, 2); /* ChiperCount */
- SSVAL(p, 2, SMB2_ENCRYPTION_AES128_GCM);
- SSVAL(p, 4, SMB2_ENCRYPTION_AES128_CCM);
+ /*
+ * For now we preferr CCM because our implementation
+ * is faster than GCM, see bug #11451.
+ */
+ SSVAL(p, 2, SMB2_ENCRYPTION_AES128_CCM);
+ SSVAL(p, 4, SMB2_ENCRYPTION_AES128_GCM);
b = data_blob_const(p, 6);
status = smb2_negotiate_context_add(state, &c,
--
1.9.1
From 9de1cb0329a6a5e375cae59a29768b6d925e5749 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze at samba.org>
Date: Mon, 17 Aug 2015 08:56:43 +0200
Subject: [PATCH 2/2] s3:smb2_negprot: prefer AES128_CCM if the client supports
it
Callgrind showed that we use 28,165,720,719 cpu cycles to send
a 100MB file to a client using aes-ccm.
With aes-gcm this is raises up to 723,094,413,831 cpu cycles.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11451
Signed-off-by: Stefan Metzmacher <metze at samba.org>
---
source3/smbd/smb2_negprot.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/source3/smbd/smb2_negprot.c b/source3/smbd/smb2_negprot.c
index 3106ef3..18382a9 100644
--- a/source3/smbd/smb2_negprot.c
+++ b/source3/smbd/smb2_negprot.c
@@ -421,6 +421,8 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
uint8_t buf[4];
DATA_BLOB b;
size_t i;
+ bool aes_128_ccm_supported = false;
+ bool aes_128_gcm_supported = false;
capabilities &= ~SMB2_CAP_ENCRYPTION;
@@ -451,15 +453,23 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
p += 2;
if (v == SMB2_ENCRYPTION_AES128_GCM) {
- xconn->smb2.server.cipher = v;
- break;
+ aes_128_gcm_supported = true;
}
if (v == SMB2_ENCRYPTION_AES128_CCM) {
- xconn->smb2.server.cipher = v;
- break;
+ aes_128_ccm_supported = true;
}
}
+ /*
+ * For now we preferr CCM because our implementation
+ * is faster than GCM, see bug #11451.
+ */
+ if (aes_128_ccm_supported) {
+ xconn->smb2.server.cipher = SMB2_ENCRYPTION_AES128_CCM;
+ } else if (aes_128_gcm_supported) {
+ xconn->smb2.server.cipher = SMB2_ENCRYPTION_AES128_GCM;
+ }
+
SSVAL(buf, 0, 1); /* ChiperCount */
SSVAL(buf, 2, xconn->smb2.server.cipher);
--
1.9.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20150817/d1cee72c/signature.sig>
More information about the samba-technical
mailing list