md_doc_ssl-performance.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <meta name="generator" content="Doxygen 1.8.17"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>GRPC Objective-C: SSL in gRPC and performance</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="search/searchdata.js"></script>
  14. <script type="text/javascript" src="search/search.js"></script>
  15. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  16. </head>
  17. <body>
  18. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  19. <div id="titlearea">
  20. <table cellspacing="0" cellpadding="0">
  21. <tbody>
  22. <tr style="height: 56px;">
  23. <td id="projectalign" style="padding-left: 0.5em;">
  24. <div id="projectname">GRPC Objective-C
  25. &#160;<span id="projectnumber">1.36.1</span>
  26. </div>
  27. </td>
  28. </tr>
  29. </tbody>
  30. </table>
  31. </div>
  32. <!-- end header part -->
  33. <!-- Generated by Doxygen 1.8.17 -->
  34. <script type="text/javascript">
  35. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  36. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  37. /* @license-end */
  38. </script>
  39. <script type="text/javascript" src="menudata.js"></script>
  40. <script type="text/javascript" src="menu.js"></script>
  41. <script type="text/javascript">
  42. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  43. $(function() {
  44. initMenu('',true,false,'search.php','Search');
  45. $(document).ready(function() { init_search(); });
  46. });
  47. /* @license-end */</script>
  48. <div id="main-nav"></div>
  49. <!-- window showing the filter options -->
  50. <div id="MSearchSelectWindow"
  51. onmouseover="return searchBox.OnSearchSelectShow()"
  52. onmouseout="return searchBox.OnSearchSelectHide()"
  53. onkeydown="return searchBox.OnSearchSelectKey(event)">
  54. </div>
  55. <!-- iframe showing the search results (closed by default) -->
  56. <div id="MSearchResultsWindow">
  57. <iframe src="javascript:void(0)" frameborder="0"
  58. name="MSearchResults" id="MSearchResults">
  59. </iframe>
  60. </div>
  61. </div><!-- top -->
  62. <div class="PageDoc"><div class="header">
  63. <div class="headertitle">
  64. <div class="title">SSL in gRPC and performance </div> </div>
  65. </div><!--header-->
  66. <div class="contents">
  67. <div class="textblock"><p>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.</p>
  68. <p>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 <code>OPENSSL_NO_ASM</code> option), which can impact performance by an order of magnitude when processing encrypted streams.</p>
  69. <h1><a class="anchor" id="autotoc_md223"></a>
  70. gRPC C++: Building from Source</h1>
  71. <table class="markdownTable">
  72. <tr class="markdownTableHead">
  73. <th class="markdownTableHeadNone">Build system </th><th class="markdownTableHeadNone">Condition </th><th class="markdownTableHeadNone">Platform </th><th class="markdownTableHeadNone">Uses assembly optimizations </th></tr>
  74. <tr class="markdownTableRowOdd">
  75. <td class="markdownTableBodyNone">Makefile </td><td class="markdownTableBodyNone">with OpenSSL 1.0.2 development files </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  76. <tr class="markdownTableRowEven">
  77. <td class="markdownTableBodyNone">Makefile </td><td class="markdownTableBodyNone">all other cases </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:x: </td></tr>
  78. <tr class="markdownTableRowOdd">
  79. <td class="markdownTableBodyNone">Bazel </td><td class="markdownTableBodyNone"></td><td class="markdownTableBodyNone">Linux </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  80. <tr class="markdownTableRowEven">
  81. <td class="markdownTableBodyNone">Bazel </td><td class="markdownTableBodyNone"></td><td class="markdownTableBodyNone">MacOS </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  82. <tr class="markdownTableRowOdd">
  83. <td class="markdownTableBodyNone">Bazel </td><td class="markdownTableBodyNone"></td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:x: </td></tr>
  84. <tr class="markdownTableRowEven">
  85. <td class="markdownTableBodyNone">CMake </td><td class="markdownTableBodyNone">boringssl from submodule (default) </td><td class="markdownTableBodyNone">Linux or MacOS </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  86. <tr class="markdownTableRowOdd">
  87. <td class="markdownTableBodyNone">CMake </td><td class="markdownTableBodyNone">boringssl from submodule (default), generator=Ninja </td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  88. <tr class="markdownTableRowEven">
  89. <td class="markdownTableBodyNone">CMake </td><td class="markdownTableBodyNone">boringssl from submodule (default), generator=Visual Studio </td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:x: </td></tr>
  90. <tr class="markdownTableRowOdd">
  91. <td class="markdownTableBodyNone">CMake </td><td class="markdownTableBodyNone">pre-installed OpenSSL 1.0.2+ (<code>gRPC_SSL_PROVIDER=package</code>) </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  92. </table>
  93. <h1><a class="anchor" id="autotoc_md224"></a>
  94. Other Languages: Binary/Source Packages</h1>
  95. <p>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.</p>
  96. <table class="markdownTable">
  97. <tr class="markdownTableHead">
  98. <th class="markdownTableHeadNone">Language </th><th class="markdownTableHeadNone">From source </th><th class="markdownTableHeadNone">Platform </th><th class="markdownTableHeadNone">Uses assembly optimizations </th></tr>
  99. <tr class="markdownTableRowOdd">
  100. <td class="markdownTableBodyNone">C# </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Linux, 64bit </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  101. <tr class="markdownTableRowEven">
  102. <td class="markdownTableBodyNone">C# </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Linux, 32bit </td><td class="markdownTableBodyNone">:x: </td></tr>
  103. <tr class="markdownTableRowOdd">
  104. <td class="markdownTableBodyNone">C# </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">MacOS </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  105. <tr class="markdownTableRowEven">
  106. <td class="markdownTableBodyNone">C# </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  107. <tr class="markdownTableRowOdd">
  108. <td class="markdownTableBodyNone">Node.JS </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Linux </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  109. <tr class="markdownTableRowEven">
  110. <td class="markdownTableBodyNone">Node.JS </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">MacOS </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  111. <tr class="markdownTableRowOdd">
  112. <td class="markdownTableBodyNone">Node.JS </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:x: </td></tr>
  113. <tr class="markdownTableRowEven">
  114. <td class="markdownTableBodyNone">Electron </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  115. <tr class="markdownTableRowOdd">
  116. <td class="markdownTableBodyNone">ObjC </td><td class="markdownTableBodyNone">Yes </td><td class="markdownTableBodyNone">iOS </td><td class="markdownTableBodyNone">:x: </td></tr>
  117. <tr class="markdownTableRowEven">
  118. <td class="markdownTableBodyNone">PHP </td><td class="markdownTableBodyNone">Yes </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">Same as the <code>Makefile</code> case from above </td></tr>
  119. <tr class="markdownTableRowOdd">
  120. <td class="markdownTableBodyNone">PHP </td><td class="markdownTableBodyNone">No </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:x: </td></tr>
  121. <tr class="markdownTableRowEven">
  122. <td class="markdownTableBodyNone">Python </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Linux, 64bit </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  123. <tr class="markdownTableRowOdd">
  124. <td class="markdownTableBodyNone">Python </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Linux, 32bit </td><td class="markdownTableBodyNone">:x: </td></tr>
  125. <tr class="markdownTableRowEven">
  126. <td class="markdownTableBodyNone">Python </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">MacOS, 64bit </td><td class="markdownTableBodyNone">:heavy_check_mark: </td></tr>
  127. <tr class="markdownTableRowOdd">
  128. <td class="markdownTableBodyNone">Python </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">MacOS, 32bit </td><td class="markdownTableBodyNone">:x: </td></tr>
  129. <tr class="markdownTableRowEven">
  130. <td class="markdownTableBodyNone">Python </td><td class="markdownTableBodyNone">n/a </td><td class="markdownTableBodyNone">Windows </td><td class="markdownTableBodyNone">:x: </td></tr>
  131. <tr class="markdownTableRowOdd">
  132. <td class="markdownTableBodyNone">Ruby </td><td class="markdownTableBodyNone">No </td><td class="markdownTableBodyNone">all </td><td class="markdownTableBodyNone">:x: </td></tr>
  133. </table>
  134. </div></div><!-- contents -->
  135. </div><!-- PageDoc -->
  136. <!-- start footer part -->
  137. <hr class="footer"/><address class="footer"><small>
  138. Generated on Wed Mar 3 2021 19:20:09 for GRPC Objective-C by &#160;<a href="http://www.doxygen.org/index.html">
  139. <img class="footer" src="doxygen.png" alt="doxygen"/>
  140. </a> 1.8.17
  141. </small></address>
  142. </body>
  143. </html>