Недавно мы заменили сервак (железо), новый сервак обзавелся поддержкой AES инструкций в ядре Xeon E3-1230. Вот и думаю я, какая польза от AES инструкций, если Solaris 11 не обновлялся с ноября 2010 года. Где их вообще можно применить, не пересобирая ядро Solaris?
Нашел статью в которой сказано что в ядре Solaris 2010.11 уже есть поддержка инструкций AES-NI. Посмотрел исходники onnv-gate и illumos-gate из проекта openindiana, эти исходники никто не менял со времен opensolaris. Там действительно есть проверка, если в 64битном режиме поддерживаются инструкции AES, надо выполнять код от Intel, код референсный, вошел в ядро практически без изменений. Референсный код Intel произвел для библиотечки OpenSSL, которая должна уметь собираться после версии 0.9.8k с ускорением AES.
Во-первых, ускорение будет работать только, если я собираю приложение в 64 битном режиме.
Шифрование носителя в ZFS использует ядреные функции, на процессоре x86_64 с AES ускорение должно работать. IP sec должно работать, потому что использует ядерные функции криптографии.
Если я собираю приложение с использованием библиотек openssl из дистрибутива, то AES-NI мне может быть поможет, потому что версия библиотечки в дистрибутиве 0.9.8o. Как бы проверить? Может производительность замерить?
Измерил для нескольких платформ #openssl speed aes
1) Intel(R) Xeon(R) CPU X3430 @ 2.40GHz CPU1
The 'numbers' are in 1000s of bytes per second processed.
2) Intel(R) Xeon(R) CPU E31230 @ 3.20GH CPU 1
The 'numbers' are in 1000s of bytes per second processed.
Я бы не сказал, что есть разница между 3430 и E3-1230. Учитывая разницу в тактовой частоте, E3-1230 проигрывает.
Порылся в исходниках OpenSSL 1.0.0d обнаружил, что в релизной версии Intel AES-NI не применяется вообще ни при каких обстоятельствах. Чтобы применить AES-NI надо выкачивать из CVS и собирать development версию, причем оно собирается, как опциональный engine, который приложениям вроде Apache еще объяснять надо как использовать.
Надо всеже попробовать пересобрать OpenSSL с поддержкой AES-NI для этого надо бы приручить компилятор GCC с версией > 4.4.
Нашел статью в которой сказано что в ядре Solaris 2010.11 уже есть поддержка инструкций AES-NI. Посмотрел исходники onnv-gate и illumos-gate из проекта openindiana, эти исходники никто не менял со времен opensolaris. Там действительно есть проверка, если в 64битном режиме поддерживаются инструкции AES, надо выполнять код от Intel, код референсный, вошел в ядро практически без изменений. Референсный код Intel произвел для библиотечки OpenSSL, которая должна уметь собираться после версии 0.9.8k с ускорением AES.
Во-первых, ускорение будет работать только, если я собираю приложение в 64 битном режиме.
Шифрование носителя в ZFS использует ядреные функции, на процессоре x86_64 с AES ускорение должно работать. IP sec должно работать, потому что использует ядерные функции криптографии.
Если я собираю приложение с использованием библиотек openssl из дистрибутива, то AES-NI мне может быть поможет, потому что версия библиотечки в дистрибутиве 0.9.8o. Как бы проверить? Может производительность замерить?
Измерил для нескольких платформ #openssl speed aes
1) Intel(R) Xeon(R) CPU X3430 @ 2.40GHz CPU1
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128 cbc 79323.54k 140119.04k 132770.39k 171447.64k 174181.03k
aes-192 cbc 55692.27k 144998.72k 155115.01k 161829.89k 166584.32k
aes-256 cbc 88309.22k 120232.79k 115128.49k 138101.76k 149831.68k
2) Intel(R) Xeon(R) CPU E31230 @ 3.20GH CPU 1
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128 cbc 71684.86k 112663.49k 163678.98k 167306.58k 193484.12k
aes-192 cbc 69780.21k 122104.45k 140046.76k 95495.85k 65088.17k
aes-256 cbc 33476.45k 97132.93k 147273.73k 153355.26k 154711.38k
Я бы не сказал, что есть разница между 3430 и E3-1230. Учитывая разницу в тактовой частоте, E3-1230 проигрывает.
Порылся в исходниках OpenSSL 1.0.0d обнаружил, что в релизной версии Intel AES-NI не применяется вообще ни при каких обстоятельствах. Чтобы применить AES-NI надо выкачивать из CVS и собирать development версию, причем оно собирается, как опциональный engine, который приложениям вроде Apache еще объяснять надо как использовать.
Надо всеже попробовать пересобрать OpenSSL с поддержкой AES-NI для этого надо бы приручить компилятор GCC с версией > 4.4.
В OpenSSL 1.0.0 обнаружил дикий способ написания ассемблерного кода под целевую архитектуру. Они пишут псевдокод, который транслируется в ассемблер, вместо аппаратно зависимых инструкций вставляются байты-машинные коды. Так они обощли необходимость использования компиляторов с поддержкой AES-NI инструкций. Вывод: для сборки OpenSSL с поддержкой AES-NI подойдет штатный компилятор, в частности gcc 4.3 из дистрибутива OpenSolaris.
ОтветитьУдалить