# How to use x64_64 optimized AES algorithm?

## Hupf

Hi,

I want to setup a partition with cryptsetup/luks with regards to speed. Currently benchmarks show that CPU is the limiting factor for me. This is an amd64 system and I've enabled the appropriate kernel options, but I'm not sure wether the specialized or the standard algorithm is used and how to change this.

I couldn't find relevant information in the kernel Documentation directory and google only hints to a different content of /proc/crypto for amd64 Ubuntu users:

```
fromgoogle ~ # cat /proc/crypto

name         : cbc(aes)

driver       : cbc(aes-x86_64)

module       : cbc

```

Details on my setup (in short: gentoo-sources, ~amd64, default/linux/amd64/10.0/server profile)

```
constable_visit ~ # gunzip -c /proc/config.gz | grep CRYPTO_AES

CONFIG_CRYPTO_AES=y

CONFIG_CRYPTO_AES_X86_64=y

# CONFIG_CRYPTO_AES_NI_INTEL is not set
```

```
constable_visit ~ # grep -A9 -i aes /proc/crypto 

name         : cbc(aes)

driver       : cbc(aes-asm)

module       : kernel

priority     : 200

refcnt       : 1

selftest     : passed

type         : givcipher

async        : no

blocksize    : 16

min keysize  : 16

max keysize  : 32

--

name         : cbc(aes)

driver       : cbc(aes-asm)

module       : kernel

priority     : 200

refcnt       : 1

selftest     : passed

type         : blkcipher

blocksize    : 16

min keysize  : 16

max keysize  : 32

ivsize       : 16

--

name         : aes

driver       : aes-generic

module       : kernel

priority     : 100

refcnt       : 1

selftest     : passed

type         : cipher

blocksize    : 16

min keysize  : 16

max keysize  : 32

--

name         : aes

driver       : aes-asm

module       : kernel

priority     : 200

refcnt       : 1

selftest     : passed

type         : cipher

blocksize    : 16

min keysize  : 16

max keysize  : 32

```

```
constable_visit ~ # emerge --info #shortened

Portage 2.2_rc67 (default/linux/amd64/10.0/server, gcc-4.4.3, glibc-2.11.1-r0, 2.6.34-gentoo x86_64)

=================================================================

System uname: Linux-2.6.34-gentoo-x86_64-AMD_Sempron-tm-_140_Processor-with-gentoo-2.0.1

Timestamp of tree: Mon, 07 Jun 2010 00:00:01 +0000

app-shells/bash:     4.1_p7

dev-lang/python:     2.6.5-r2, 3.1.2-r3

sys-apps/baselayout: 2.0.1

sys-apps/openrc:     0.6.1-r1

sys-apps/sandbox:    2.2

sys-devel/autoconf:  2.65

sys-devel/automake:  1.10.3, 1.11.1

sys-devel/binutils:  2.20.1-r1

sys-devel/gcc:       4.4.3-r2

sys-devel/gcc-config: 1.4.1

sys-devel/libtool:   2.2.8

virtual/os-headers:  2.6.33

ABI="amd64"

ACCEPT_KEYWORDS="amd64 ~amd64"

ACCEPT_LICENSE="* -@EULA @EULA"

ACCEPT_PROPERTIES="*"

ARCH="amd64"

ASFLAGS_x86="--32"

CBUILD="x86_64-pc-linux-gnu"

CDEFINE_amd64="__x86_64__"

CDEFINE_x86="__i386__"

CFLAGS="-march=amdfam10 -O2 -pipe"

CFLAGS_x86="-m32"

CHOST="x86_64-pc-linux-gnu"

CHOST_amd64="x86_64-pc-linux-gnu"

CHOST_x86="i686-pc-linux-gnu"

CXXFLAGS="-march=amdfam10 -O2 -pipe"

DEFAULT_ABI="amd64"

ELIBC="glibc"

KERNEL="linux"

LDFLAGS="-Wl,-O1"

LDFLAGS_x86="-m elf_i386"

MULTILIB_ABIS="amd64 x86"

```

----------

## Sadako

I don't know why the ubuntu kernel is printing something differently, but aes-asm is the optimized algorithm, the asm referring to assembly instructions, which are arch specific (in this case x86_64).

----------

