首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >充分利用HW加速器

充分利用HW加速器
EN

Stack Overflow用户
提问于 2015-10-07 14:29:13
回答 2查看 1.2K关注 0票数 9

我想使用OpenSSL来处理我们所有的SSL通信(客户端和服务器端)。我们希望使用HW加速卡卸载繁重的密码计算。

我们注意到在OpenSSL的“速度”测试中,有对密码函数(例如RSA_sign/decrypt等)的直接调用。为了充分利用HW容量,需要多个线程(最多128个线程)来加载请求卡,并确保HW卡永不空闲。

我们希望使用高级OpenSSL API来处理SSL (例如,SSL_connect/read/write/accept),但是这个API并不公开实际加密操作的执行点。例如,在调用SSL_connect时,我们不知道执行RSA操作的点,而且我们也不知道哪些调用会导致大量的密码计算,并且只将那些调用引用到加速器。

问题:

  1. 如何在充分利用HW加速器的同时使用高级API?我应该使用多个线程吗?
  2. 这样做有什么“标准”的方法吗?(实施实例)
  3. (最新回答)你熟悉英特尔的异步OpenSSL吗?他们似乎试图解决这个确切的问题,但我们找不到实际的代码或使用示例。

更新

  1. 使用Intel QuickAssist技术中可以看到,Intel还提到了多线程/进程的使用: OpenSSL的标准版本本质上是串行的,这意味着它在一个上下文中处理一个连接。从密码操作的角度来看,该版本基于同步/阻塞编程模型。一个主要的限制是,只有通过添加更多线程(即进程)来利用核心并行化,才能提高吞吐量,但这也会增加上下文管理开销。
  2. 英特尔的OpenSSL分支终于找到了这里。更多信息可以在包含这里的pdf中找到。 看起来英特尔改变了OpenSSL引擎的工作方式--它将工作提交给驱动程序,并立即返回,而相应的结果应该被轮询。 如果您使用其他SSL加速器,则相应的OpenSSL引擎也应该进行修改。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-20 22:18:35

根据用多选项解释rsa的openssl速度输出的说法,-multi并不是“并行化”的工作,它只是并行运行多个基准测试。

因此,您的HW卡的负载将从本质上受到当前可用工作量的限制(请注意,一般来说,在工业中,80%的计划容量负载在负载峰值的情况下被认为是最佳的)。当然,运行多个服务器线程/进程将产生与多个基准测试相同的效果。

OpenSSL 支持多个线程,只要您给它回调以锁定共享数据。.对于多个进程,它警告从父进程继承的重用数据状态

这就是垂直缩放的方法。用于水平缩放:

  • openssl通过异步BIOs支持异步I/O
  • 但是,它的基本密码操作和内部引擎调用是同步的,要改变这一点就需要对逻辑进行彻底的修改。
  • 由于主要的设计缺陷,使它们提供异步操作受到严厉的批评的私有努力

英特尔宣布了一些“异步OpenSSL”项目 (08.2014)与其硬件一起使用,但链接白皮书很少给出它的实现和开发状态的细节。一位开发人员发布了一些相关代码 (10.2015)指出,它“足够稳定,可以得到一个概述”。

票数 3
EN

Stack Overflow用户

发布于 2015-10-10 08:26:28

正如jww在注释中提到的,您应该使用引擎API来完成任务。上面的链接中有一个关于如何使用该API的示例。通常,硬件加速器提供者实现一个称为“引擎”的库--这个引擎提供加密加速,可以由OpenSSL内部使用。假设您想要使用的加速器已经实现了一个引擎(例如"cswitft"),您应该通过调用ENGINE *e = ENGINE_by_id("cswift");来获得引擎,然后将它初始化为ENGINE_init(e);,并将其设置为您想要使用的操作的默认值,例如ENGINE_set_default_RSA(e);

调用这些函数之后,可以使用OpenSSL的高级API (例如SSL_connect/read/write/accept)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32994981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档