Skip to content

Latest commit

 

History

History
41 lines (33 loc) · 2.08 KB

ssl-performance.md

File metadata and controls

41 lines (33 loc) · 2.08 KB

SSL in gRPC and performance

The SSL requirement of gRPC isn't necessarily making it easy to integrate. The HTTP/2 protocol requires ALPN support, which is a fairly new handshake protocol only supported by recent implementations.

As a result, we've tried hard to provide a smooth experience to our users when compiling and distributing gRPC, but this may come at performance costs due to this. More specifically, we will sometime build the SSL library by disabling assembly code (by setting the OPENSSL_NO_ASM option), which can impact performance by an order of magnitude when processing encrypted streams.

gRPC C++: Building from Source

Build system Condition Platform Uses assembly optimizations
Makefile with OpenSSL 1.0.2 development files all ✔️
Makefile all other cases all
Bazel Linux ✔️
Bazel MacOS ✔️
Bazel Windows
CMake boringssl from submodule (default) Linux or MacOS ✔️
CMake boringssl from submodule (default), generator=Ninja Windows ✔️
CMake boringssl from submodule (default), generator=Visual Studio Windows
CMake pre-installed OpenSSL 1.0.2+ (gRPC_SSL_PROVIDER=package) all ✔️

Other Languages: Binary/Source Packages

In addition, we are shipping packages for language implementations. These packages are source packages, but also have pre-built binaries being distributed. Building packages from source may give a different result in some cases.

Language From source Platform Uses assembly optimizations
C# n/a Linux, 64bit ✔️
C# n/a Linux, 32bit
C# n/a MacOS ✔️
C# n/a Windows ✔️
Node.JS n/a Linux ✔️
Node.JS n/a MacOS ✔️
Node.JS n/a Windows
Electron n/a all ✔️
ObjC Yes iOS
PHP Yes all Same as the Makefile case from above
PHP No all
Python n/a all
Ruby No all