My tor relay uses ~50 Mbytes/s (25 MBytes/s read and 25 MBytes/s write). I would expect that each byte has to be decrypted and encrypted once. So I would expect my tor relay decrypts ~25 MBytes/s and encrypts ~25 MBytes/s.
The server receives < 10 SYN packets per second, which I assume is mostly setting up new TCP connections to other relays.
openssl
seems to be able to do 150-350 MBytes/s (median IP-packet size to the node is 543), depending on whether tor uses AES-NI or not:
$ openssl speed -elapsed -evp aes-256-cbc
:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-256-cbc 273508.06k 336348.35k 369346.47k 358322.18k 225869.82k 229485.23k
$ OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-256-cbc
:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-256-cbc 141424.04k 177762.28k 160536.66k 148307.63k 154921.64k 188443.31k
Given this, I would have expected my tor-relay would run at 10-30% CPU. But it runs at 150% CPU (two cores at ~75%).
What explains this big difference?