«

»

Окт 06 2016

Результаты переработки многопоточной реализации генерации простых числе для RSA и DH

Ещё весной, во время реализации DHE, я обратил внимание на плохую масштабируемость генерации ключей, хотя в теории этот процесс должен параллелиться почти идеально. Получалось же что RSA хоть как-то параллелиться до 4-х потоков, а DH вообще до 2-х. После небольшого расследования причин и соотв. переработки алгоритмов было произведено небольшое тестирование: среднее время генерации ключа на серии из 100 ключей в зависимости от размера ключа и кол-ва потоков. Ниже привожу результаты (тестирование проводилось на Xeon-D 1540).

Генерация RSA ключей в секундах реального времени:

Кол-во потоков 512 бит 1024 бита 2048 бит 4096 бит 8192 бита
1 0.148 сек 1.151 сек 11.244 сек 131.731 сек 1713.024 сек
2 0.080 сек 0.586 сек 5.776 сек 66.687 сек 869.877 сек
3 0.054 сек 0.420 сек 4.043 сек 45.257 сек 595.355 сек
4 0.042 сек 0.313 сек 3.014 сек 34.472 сек 447.879 сек
5 0.033 сек 0.244 сек 2.352 сек 27.562 сек 356.136 сек
6 0.029 сек 0.203 сек 1.986 сек 22.541 сек 294.696 сек
7 0.025 сек 0.182 сек 1.708 сек 19.359 сек 253.913 сек
8 0.023 сек 0.162 сек 1.512 сек 17.341 сек 227.011 сек

А теперь, для наглядности, тоже самое только время в потоко-секундах:

Кол-во потоков 512 бит 1024 бита 2048 бит 4096 бит 8192 бита
1 0.148 1.151 11.244 131.731 1713.024
2 0.160 1.172 11.552 133.374 1739.754
3 0.162 1.260 12.129 135.771 1786.065
4 0.168 1.252 12.056 137.888 1791.516
5 0.165 1.220 11.760 137.810 1780.680
6 0.174 1.218 11.916 135.246 1768.176
7 0.175 1.274 11.956 135.513 1777.391
8 0.184 1.296 12.096 138.728 1816.088
Разброс значений
4.94% 3.26% 2.03% 1.32% 1.32%

Т.е. теперь зависимость от кол-ва потоков генерации фактически линейная. Ниже аналогичные таблицы для генерации модулей DH:

Кол-во потоков 256 бит 512 бит 1024 бита 2048 бит 4096 бит
1 0.399 сек 2.871 сек 28.121 сек 347.210 сек 4142.057 сек
2 0.209 сек 1.547 сек 15.181 сек 157.720 сек 2527.711 сек
3 0.128 сек 1.052 сек 10.273 сек 113.577 сек 1607.135 сек
4 0.109 сек 0.783 сек 7.480 сек 81.751 сек 1174.542 сек
5 0.087 сек 0.625 сек 6.380 сек 66.503 сек 971.088 сек
6 0.071 сек 0.563 сек 4.987 сек 55.553 сек 768.313 сек
7 0.059 сек 0.439 сек 4.322 сек 44.621 сек 652.061 сек
8 0.055 сек 0.400 сек 3.704 сек 38.713 сек 565.883 сек
Кол-во потоков 256 бит 512 бит 1024 бита
2048 бит
4096 бит
1 0.399 2.871 28.121 347.210 4142.057
2 0.418 3.094 30.362 315.440 5055.422
3 0.384 3.156 30.819 340.731 4821.405
4 0.436 3.132 29.920 327.004 4698.168
5 0.435 3.125 31.900 332.515 4855.440
6 0.426 3.378 29.922 333.318 4609.878
7 0.413 3.073 30.254 312.347 4564.427
8 0.440 3.200 29.632 309.704 4527.064
Разброс значений
3.67% 2.81% 2.38% 3.41% 4.26%

К сожалению я не успел провести тесты для ключей RSA в 16 и 32 килобит и модулей DH в 8, 16 и 32 килобит до замены тестового оборудования, однако я склонен полагать что результаты будут теми же.

Добавить комментарий