Это очень крутая штука в наборе инструкций современных процессоров Intel. Но чтобы задействовать это ускорение приложение, разумеется, должно использовать специальные ассемблерные команды. И примером приложения использующего их является OpenSSL версии начиная с 1.0.2beta2 и хэш алгоритмы SHA-1 / SHA-512, другие хэш функции не смотря на поддержку со стороны процессоров таким образом оптимизированы не были (видимо, по причине известных проблем с коллизиями в том же md5).
Итак, берем машины E5 2670v2 из тестового стенда и прогоняем обычный OpenSSL (OpenSSL 1.0.1e 11 Feb 2013 из сборки Debian Wheezy) в следующей конфигурации:
Теперь собираем вручную OpenSSL версии равной или старше чем openssl-1.0.2-beta2.
И запускаем те же тесты используя свеже собранный OpenSSL на Debian 7 Wheezy:
Тесты в обоих версиях были прогнаны 3-5 раз, значения отличались не более чем на 1000k, что в районе 1-2% погрешности и вполне допустимо.
Выводы очень странные напрашиваются. Точно ускоряется и очень мощно sha256 - в почти 1,5 раза.
Почему замедляются md4 и md5 - для меня загадка. Возможно это связано с флагами компиляции данных пакетов в Debian 7 Wheezy либо с деградациями в beta выпуске OpenSSL либо просто с большими отклонениями на малом объеме данных - на 8192 блоках таких колебаний вовсе нету.
А sha1 в свою очередь в любом случае показал себя как самый быстрый хэш из хэшей со вменяемыми характеристиками и стойкостью к коллизиям! :)
Итак, берем машины E5 2670v2 из тестового стенда и прогоняем обычный OpenSSL (OpenSSL 1.0.1e 11 Feb 2013 из сборки Debian Wheezy) в следующей конфигурации:
for i in md4 md5 sha1 sha256 sha512; do openssl speed $i 2>&1|egrep -v '(Doing|OpenSSL|built|options|compiler)';doneИ получаем вот такие цифры:
The 'numbers' are in 1000s of bytes per second processed.Как обычно бывает - md4 самый быстрый и тем ярче превосходство, чем больше блок данных (особенно велико оно на кратных 8192 байтам блоках).
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md4 79469.84k 247447.81k 593828.73k 909654.02k 1081913.88k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 57183.56k 170794.37k 383938.70k 555845.63k 640581.52k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 63621.49k 183943.89k 404654.92k 581348.35k 689886.95k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 49298.04k 111948.78k 193886.12k 240399.93k 256172.03k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha512 39788.22k 163034.65k 244865.02k 346445.91k 395853.82k
Теперь собираем вручную OpenSSL версии равной или старше чем openssl-1.0.2-beta2.
И запускаем те же тесты используя свеже собранный OpenSSL на Debian 7 Wheezy:
The 'numbers' are in 1000s of bytes per second processed.Теперь повторяем тест стандартного OpenSSL но уже из состава CentOS 6 (OpenSSL 1.0.1e-fips 11 Feb 2013):
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md4 45183.93k 159576.92k 445669.20k 805581.82k 1057753.77k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 37000.35k 125855.38k 312857.60k 516176.14k 630956.03k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 41862.74k 134170.77k 343537.27k 562741.59k 701120.13k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 62982.42k 140178.79k 245336.79k 300390.40k 322792.20k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha512 45197.99k 180312.43k 280480.11k 396773.03k 453845.02k
The 'numbers' are in 1000s of bytes per second processed.А теперь прогоняем тест актуальной версии OpenSSL собранной вручную, но на машине на базе CentOS 6:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md4 60064.70k 188973.95k 447881.22k 683383.58k 808962.73k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 44789.97k 131985.83k 293138.94k 420840.19k 483939.67k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 48999.05k 139180.74k 304883.92k 442452.99k 521759.40k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 36892.66k 82828.82k 144455.59k 181290.18k 194063.02k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha512 29594.76k 119322.73k 185533.70k 262828.03k 299693.84k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md4 29176.77k 102947.75k 300172.54k 573421.63k 785858.56k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 25097.23k 83432.96k 220905.47k 375433.44k 474740.05k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 27111.94k 89276.33k 238348.20k 409880.32k 526125.74k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 48053.63k 107633.37k 186195.20k 227252.14k 243523.58k
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha512 34854.11k 141876.76k 215300.10k 301368.30k 342690.47k
Тесты в обоих версиях были прогнаны 3-5 раз, значения отличались не более чем на 1000k, что в районе 1-2% погрешности и вполне допустимо.
Выводы очень странные напрашиваются. Точно ускоряется и очень мощно sha256 - в почти 1,5 раза.
Почему замедляются md4 и md5 - для меня загадка. Возможно это связано с флагами компиляции данных пакетов в Debian 7 Wheezy либо с деградациями в beta выпуске OpenSSL либо просто с большими отклонениями на малом объеме данных - на 8192 блоках таких колебаний вовсе нету.
А sha1 в свою очередь в любом случае показал себя как самый быстрый хэш из хэшей со вменяемыми характеристиками и стойкостью к коллизиям! :)
No comments :
Post a Comment
Note: only a member of this blog may post a comment.