Re: [Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
Hi Tony, On 05/04/22 15:04, Tony He wrote: Hi JJK, Yeah, I know this way, but there is still context switching in the kernel space and user space. I have been looking for a way to benchmark in the kernel space. I expect there is a kernel module like below: insmod benchmark.ko AES-256-GCM (After it's done, this module will exit automatically) that would be 'tcrypt' then, I guess ; on my Fedora boxen I have # modinfo tcrypt filename: /lib/modules/5.16.18-100.fc34.x86_64/kernel/crypto/tcrypt.ko.xz author: James Morris description: Quick & dirty crypto testing module [...] parm: alg:charp parm: type:uint parm: mask:uint parm: mode:int parm: sec:Length in seconds of speed tests (defaults to zero which uses CPU cycles instead) (uint) parm: num_mb:Number of concurrent requests to be used in mb speed tests (defaults to 8) (uint) parm: klen:Key length (defaults to 0) (uint) cheers, JJK Jan Just Keijser 于2022年4月5日周二 19:26写道: hi Tony, On 02/04/22 11:40, Tony He wrote: Hi Antonio, I am porting ovpn-dco to embedded ARMv8 device with hardware crypto engine. However the performance is not very good. It's about 130-140Mbps. I expect more. The SDK already provides kernel CryptoAPI(CFI) interface to access the crypto engine. I want to know if the crypto operation is the bottleneck. Do you know how to benchmark crypto performance in the kernel space? Any advice is welcome. Thank you! a quick & dirty way to test the hardware crypto engine is to use the Linux cryptodev engine in combination with openssl ; it's a bit tricky to get it working but it *is* a nice way to test hardware crypto. * https://github.com/cryptodev-linux/cryptodev-linux.git * do a custom openssl build with ./Configure -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS enable-engine enable-dso enable-devcryptoeng * run openssl speed using ./openssl speed -elapsed -engine devcrypto -evp aes-128-cbc and compare the results with "-engine devcrypto" removed. HTH, JJK ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel
Re: [Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
Hi JJK, Yeah, I know this way, but there is still context switching in the kernel space and user space. I have been looking for a way to benchmark in the kernel space. I expect there is a kernel module like below: insmod benchmark.ko AES-256-GCM (After it's done, this module will exit automatically) Tony Jan Just Keijser 于2022年4月5日周二 19:26写道: > > hi Tony, > > On 02/04/22 11:40, Tony He wrote: > > Hi Antonio, > > > > I am porting ovpn-dco to embedded ARMv8 device with hardware crypto > > engine. However the performance is not very good. > > It's about 130-140Mbps. I expect more. The SDK already provides kernel > > CryptoAPI(CFI) interface to access the crypto engine. > > I want to know if the crypto operation is the bottleneck. Do you know > > how to benchmark crypto performance in the kernel space? > > Any advice is welcome. Thank you! > > > a quick & dirty way to test the hardware crypto engine is to use the > Linux cryptodev engine in combination with openssl ; it's a bit tricky > to get it working but it *is* a nice way to test hardware crypto. > > * https://github.com/cryptodev-linux/cryptodev-linux.git > * do a custom openssl build with > ./Configure -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS enable-engine > enable-dso enable-devcryptoeng > * run openssl speed using >./openssl speed -elapsed -engine devcrypto -evp aes-128-cbc > > and compare the results with "-engine devcrypto" removed. > > HTH, > > JJK > > > ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel
Re: [Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
hi Tony, On 02/04/22 11:40, Tony He wrote: Hi Antonio, I am porting ovpn-dco to embedded ARMv8 device with hardware crypto engine. However the performance is not very good. It's about 130-140Mbps. I expect more. The SDK already provides kernel CryptoAPI(CFI) interface to access the crypto engine. I want to know if the crypto operation is the bottleneck. Do you know how to benchmark crypto performance in the kernel space? Any advice is welcome. Thank you! a quick & dirty way to test the hardware crypto engine is to use the Linux cryptodev engine in combination with openssl ; it's a bit tricky to get it working but it *is* a nice way to test hardware crypto. * https://github.com/cryptodev-linux/cryptodev-linux.git * do a custom openssl build with ./Configure -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS enable-engine enable-dso enable-devcryptoeng * run openssl speed using ./openssl speed -elapsed -engine devcrypto -evp aes-128-cbc and compare the results with "-engine devcrypto" removed. HTH, JJK ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel
Re: [Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
Hey Tony, On 03/04/2022 04:44, Tony He wrote: Any advice is welcome. Thank you! Debugging/profiling the fast path is never easy, but your method is definitely a reasonable approach. Glad you already found the bottleneck. An alternative is using the perf kernel tool, which tells you the amount of time spent in the various routines. -- Antonio Quartulli ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel
Re: [Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
Hi, I used below ugly way to benchmark the performance roughly. In POC, confirmed the hardware crypto engine is the bottleneck and not very fast for packet not over than 1500 bytes. Overhead is required for queuing the data to crypto engine and sending data back to kernel. ktime_get_real_ts64(_time); ret = crypto_wait_req(crypto_aead_encrypt(req), ); ktime_get_real_ts64(_time); init_usecs = (init_time.tv_sec * 1000 * 1000) + (init_time.tv_nsec / 1000); comp_usecs = (comp_time.tv_sec * 1000 * 1000) + (comp_time.tv_nsec / 1000); delta_usecs += comp_usecs - init_usecs; total_size += skb->len - head_size; if(total_size > 1){ mbits = total_size * 8; printk("total_size is %u bytes, time is %u, the rate is %u\n", total_size, delta_usecs, mbits/delta_usecs); total_size = 0; delta_usecs = 0; } .. .. Tony Tony He 于2022年4月2日周六 17:40写道: > > Hi Antonio, > > I am porting ovpn-dco to embedded ARMv8 device with hardware crypto > engine. However the performance is not very good. > It's about 130-140Mbps. I expect more. The SDK already provides kernel > CryptoAPI(CFI) interface to access the crypto engine. > I want to know if the crypto operation is the bottleneck. Do you know > how to benchmark crypto performance in the kernel space? > Any advice is welcome. Thank you! > > Tony ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel
[Openvpn-devel] [ovpn-dco] How to benchmark kernel crypto performance?
Hi Antonio, I am porting ovpn-dco to embedded ARMv8 device with hardware crypto engine. However the performance is not very good. It's about 130-140Mbps. I expect more. The SDK already provides kernel CryptoAPI(CFI) interface to access the crypto engine. I want to know if the crypto operation is the bottleneck. Do you know how to benchmark crypto performance in the kernel space? Any advice is welcome. Thank you! Tony ___ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel