Skip to content

Benchmarks (Mk II)

Andrea Barisani edited this page Jan 12, 2024 · 29 revisions

The following benchmarks aim to provide an approximate reference for USB armory CPU performance.

Please keep in mind that all benchmarks are affected by a multitude of factors including, and not limited to, compilation options, kernel options and configuration, running processes, etc. These results provide only an approximate reference and should be taken with a grain of salt.

All tests have been performed under Arch Linux ARM.

USB armory Mk II variants

The USB armory Mk II CPU is an ARM Cortex-A7, with an approximate efficiency rating of 1.9 DMIPS/MHz.

The standard USB version mounts the i.MX6ULZ CPU (P/N MCIMX6Z0DVM09AB) which is clocked at 900 MHz.

The standard LAN version mounts the i.MX6ULL CPU (P/N MCIMX6Y2DVM09AB) which is clocked identically to the i.MX6ULZ, all i.MX6ULL benchmarks apply identically to this model as well.

Both models can be ordered (custom/bulk orders only) with the i.MX6UL (P/N MCIMX6G3DVM05AB) which is clocked at 528 MHz and has distinct security features.

nbench

The nbench utility is compiled with the following gcc flags:

-s -static -Wall -O3 -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -mtune=cortex-a7 -fomit-frame-pointer -marm -funroll-loops -ffast-math
Device Memory Index Integer Index Floating-Point Index
UA-MKII-ULZ 4.665 6.383 5.987
UA-MKII-UL 2.660 3.755 3.578

Cryptographic acceleration

The following tests compare CPU bound execution of cryptographic algorithms with their hardware accelerated counterparts.

The TamaGo tests are executed using tamago-example.

The OpenSSL tests are executed using the following version:

OpenSSL 1.1.1n  15 Mar 2022
built on: Mon Feb 20 10:04:50 2023 UTC
options:bn(64,32) rc4(char) des(long) aes(partial) blowfish(ptr)
compiler: gcc -fPIC -pthread -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-3a17yR/openssl-1.1.1n=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
Device Algorithm Library¹ Accel 256 bytes 1024 bytes 8192 bytes 65536 bytes 1048576 bytes
UA-MKII-UL aes-128-cbc TamaGo none 2925k 3660k 3939k 3973k 3851k
UA-MKII-UL aes-128-cbc TamaGo CAAM 1947k 6411k 22765k 32757k 31911k
UA-MKII-UL aes-128-cbc OpenSSL none 13091k 13529k 13669k 13544k 12804k
UA-MKII-UL aes-128-cbc OpenSSL CAAM 2435k 7784k 22926k 13631k 349k
UA-MKII-UL sha256 TamaGo none 3817k 5152k 5775k 5898k 5755k
UA-MKII-UL sha256 TamaGo CAAM 2626k 10272k 46997k 83314k 80552k
UA-MKII-UL sha256 OpenSSL none 11060k 15917k 18238k 18332k 16448k
UA-MKII-ULZ aes-128-cbc TamaGo none 4882k 6177k 6717k 6769k 6470k
UA-MKII-ULZ aes-128-cbc TamaGo DCP 4563k 13071k 30438k 35661k 35509k
UA-MKII-ULZ aes-128-cbc OpenSSL none 22392k 23097k 23306k 23166k 21179k
UA-MKII-ULZ aes-128-cbc OpenSSL DCP 3895k 11325k 27399k 29578k 349k
UA-MKII-ULZ sha256 TamaGo none 5986k 8700k 9854k 10023k 9597k
UA-MKII-ULZ sha256 TamaGo DCP 5220k 17513k 56999k 76982k 79532k
UA-MKII-ULZ sha256 OpenSSL none 18724k 27143k 31159k 31522k 26913k

¹ TamaGo: (aes|sha) <size> 3 (soft)?, OpenSSL: openssl speed -evp (aes-128-cbc|sha256) -elapsed (-engine afalg)?

Device Algorithm Library² Accel 32 bytes
UA-MKII-UL ecdsap256 TamaGo none 88/s
UA-MKII-UL ecdsap256 TamaGo CAAMᵃ 217/s
UA-MKII-UL ecdsap256 TamaGo CAAMᵇ 312/s
UA-MKII-UL ecdsap256 OpenSSL none 560/s
UA-MKII-ULZ ecdsap256 TamaGo none 147/s
UA-MKII-ULZ ecdsap256 OpenSSL none 860/s

² TamaGo: (ecdsa) 10 (soft)?, OpenSSL: openssl speed ecdsap256
ᵃ Timing Equalization protection enabled
ᵇ Timing Equalization protection disabled

OTF DRAM encryption

The Bus Encryption Engine (BEE) supports on-the-fly (OTF) AES-128 (ECB or CTR) encryption/decryption on the AXI bus.

The GoTEE example application supports BEE protection of the Trusted Applet RAM on i.MX6UL variants.

Enabling BEE imposes a performance penalty: a basic memory allocation test on OTF encrypted regions can be up to ~60% slower compared to running the same test with BEE disabled.

Clone this wiki locally