山东001在线

 找回密码
 立即注册
搜索
查看: 334|回复: 0

新闻速看使用 Kernel TLS 和 SSL_sendfile( ) 提高 NGINX 性能2023/7/3 9:51:06

[复制链接]
  • TA的每日心情
    无聊
    2023-5-27 01:12
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2023-7-3 09:51:08 | 显示全部楼层 |阅读模式

    TLS(传输层安全协议)是一种极为受欢迎的加密协议。在内核()中施TLS(即TLS)可显著降低在用户空间与内核之间复制操作的需求,从而提高NGINX的性能。更要紧的是,把[url=http:///www.nginx-cn.net/?p=20422]使用nginx进行微缓存的好处[/url]分析透彻,让其社会功能发挥到极致才是我们当务之急要做的。NGINX 已成为 F5, Inc 的一员,而 F5, Inc 则是当前全球热门的开源项目 NGINX 背后的公司。[align=center]https://www.nginx-cn.net/wp-content/uploads/2023/06/tutorial-deploy-configure-microservices_code-review-768x425-02.png[/align]



    通过结合使用TLS和(),数据可以直接在内核空间加密,然后再传递到络堆栈进行传输。这使得我们不再需要将数据复制到用户空间、利用TLS库进行加密、再返回内核空间进行传输的这一过程。TLS还可以将TLS的处理过程卸载到硬件,包括将TLS对称加密处理任务卸载到络设备。



    现代L和FBSD内核支持将TLS卸载到内核,而NGINX开源版现在也同样能做到!NGINX1214在使用SSL_()传输静态文件时引入了TLS支持,可以极大地改善性能。如下所述,内核和OSSL只有采用TLS构建,才能让NGINX使用SSL_()。



    本文详细介绍了支持TLS的操作系统以及OSSL版本,并展示了如何针对TLS构建和配置内核与NGINX。为了向您展示TLS的性能改善效果,我们还将分享在FBSD和U上进行测试的具体说明和结果数据。



    注:TLS的施这一新兴事物正在迅速发展中。本文描述了截至2022年11月NGINX对TLS的支持情况,但本文提供的信息和说明可能会在之后进行更新,请随时关注和NGINX博客上的公告。



    通用要求


    操作系统——以下任一一个:





    FBSD?130+。截至2022年11月,FBSD130+是仅有一个在NGINX中支持TLS的操作系统,且需手动构建NGINX即可整合OSSL?300+。请参阅在FBSD上启用支持TLS的NGINX。





    可以使用在L内核版本417或更高版本上构建的L发行版,但我们建议尽可能使用在版本52或更高版本上构建的发行版。(际上,版本413便提供了TLS支持,但OSSL300需要内核头版本417或更高版本。)







    OSSL——版本300或更高版本





    NGINX——版本1214或更高版本(主线版)





    操作系统支持
    支持TLS的操作系统
    截至2022年11月,在NGINX开源版支持的所有操作系统中,以下操作系统支持TLS和指定的密码。有关密码支持的详细信息,请参阅TLS协议和密码支持。







    TLS12密码
    TLS13密码套件
    TLS_CHACHA20_POLY1305_SHA256密码
    L内核版本


    AL2*
    ?
    ?
    ?
    510


    COS8**
    ?
    ?
    ?
    418


    FBSD130
    ?
    ?
    ??***
    NA


    RHEL8
    ?
    ?
    ?
    418


    SLES15SP2
    ?
    ?
    ?
    53


    U2022LTS
    ?
    ???
    ?
    54


    U2104
    ?
    ?
    ?
    511


    U2110
    ?
    ?
    ?
    513



    ??*内核版本必须是510(不能是414);请参阅不支持TLS的操作系统和AL2常见问题解答
    ?**继承了上游源RHEL8的TLS支持特性
    ***请参阅FBSD操作日志



    不支持TLS的操作系统
    以下操作系统不支持KTLS,原因如下:




    AL311–314——内核使用CONFIG_TLS=选项构建,该选项禁止将TLS构建为模块或内核的一部分。
    AL2——默认AL2AMI(请参阅AL2常见问题解答)的L内核版本是414。
    COS74+——L内核版本为310。继承了上游源RHEL74+的TLS支持特性。
    D10和11——内核使用CONFIG_TLS=选项构建(请参阅D漏洞报告日志)。
    RHEL74+——L内核版本是310。
    SLES?12SP5+——L内核版本是412。
    U?1804LTS——L内核版本是415。

    TLS协议和密码支持
    如上所述,支持TLS的操作系统对TLS协议和密码的支持各不相同。



    对于TLSV12,KTLS模块支持以下密码:




    AES128-GCM-SHA256
    AES256-GCM-SHA384
    ECDHE-RSA-AES128-GCM-SHA256
    ECDHE-RSA-AES256-GCM-SHA384

    对于TLS13,TLS模块支持以下密码套件:




    TLS_AES_128_GCM_SHA256
    TLS_AES_256_GCM_SHA384
    TLS_CHACHA20_POLY1305_SHA256(仅部分操作系统,如支持TLS的操作系统部分所述)

    如要验证NGINX二进制文件中启用了哪些OSSL支持的TLS密码,请运行构建NGINX的目录(例如主目录)中的-300命令。



    启用NGINX中的TLS
    我们在文首的介绍中说过,TLS可提高NGINX的性能,因为所有加密和解密操作都在内核中进行。数据可以直接在内核空间加密,然后传递到络堆栈进行传输,消除了将数据复制到用户空间、使用TLS库对其加密、再返回内核空间进行传输的这一过程的必要性。







    加载内核中的TLS
    在现代FBSD和L发行版中,TLS通常被构建为一个模块(使用CONFIG_TLS=选项)。在启动NGINX之前,必须将TLS模块显式加载到内核。





    在FBSD上,以用户身份运行以下命令:



    #
    #=1
    有关FBSD命令选项的详细信息,请参阅(4)的手册页。





    在L发行版上,以用户身份运行以下命令:



    #


    在FBSD上启用支持TLS的NGINX
    如要在FBSD上启用NGINX的TLS支持,您可以使用与L发行版相同的操作说明。但我们建议您执行以下步骤,以便在FBSD端口集合的-树中使用支持TLS的NGINX。有关更多信息(包括TLS概述),请参阅FBSD上的将TLS卸载到内核。





    构建支持TLS的OSSL30,在配置菜单中选择适当的选项:



    #-


    修改,将-用作SSL库:



    #"DEFAULT_VERSIONS+==-


    构建NGINX:



    #-


    在L发行版上构建支持TLS的NGINX
    大多数当前的L发行版都包含早于300(通常是版本11)的OSSL版本。因此,您需要使用OSSL300从源代码构建NGINX。



    命令中启用TLS支持的两个关键选项是:




    ---=-300
    ----=-

    另一个选项面向NGINX官方二进制包(请见)中的模块。您还可以指定一组自定义模块。如要查看当前NGINX二进制文件的构建选项,请运行-V。



    如要使用OSSL300构建NGINX,请运行以下命令:



    $-1214
    $-300
    $-300
    $-1214
    $\
    ---\
    --=\
    ---=\
    ----=\
    ----=\
    ---=\
    ---=\
    ------=_\
    -----=_\
    -----=_\
    -----=_\
    -----=_\
    --=\
    --=\
    ---\
    ----\
    ---\
    ---__\
    ---___\
    ---__\
    ---__\
    ---__\
    ---___\
    ---_4_\
    ---___\
    ---__\
    ---___\
    ---__\
    ---__\
    ---___\
    ---__\
    ---_2_\
    ---\
    ---__\
    ---\
    ---__\
    ---__\
    ---___\
    ---=-300\
    ----=-\
    ----='--O2----W-W=--W,-D_FORTIFY_SOURCE=2-PIC'\
    ---='-W,-B--W,-,-W,-,-W,----'
    $–4
    $
    注:生成的NGINX二进制文件静态链接到OSSL300库。如果日后需要修补OSSL,您必须下载并解压新的OSSL源文件,然后运行上述命令重建NGINX二进制文件。



    配置NGINX
    如要启用TLS,在{}中的__指令中添加OKTLS参数,如我们的测试中使用的示例配置:



    _;
    _;

    {}

    {
    ;

    {
    443;
    _;
    __;
    __OKTLS;
    _TLS13;

    {
    ;
    }
    }
    }
    验证TLS是否已启用
    如要验证NGINX是否正在使用TLS,请开启调试模式,并在错误日志中检查BIO___()和SSL_()。



    $BIO
    2022111016:02:46[]274550#274550:*2BIO___():1
    2022111016:02:49[]274550#274550:*3BIO___():1

    $SSL_
    2022111016:02:46[]274550#274550:*2SSL_:1048576
    2022111016:02:49[]274550#274550:*3SSL_:1048576
    注:我们建议您在进行这些检查后关闭调试模式(尤其是在生产环境中)。由于存在大量的写入操作,调试日志会导致性能下降;此外,调试日志可能很大,很就会耗尽磁盘分区上的可用空间。



    借助TLS提高性能
    当在高负载下提供静态文件时,与用户空间TLS相比,SSL_()可将吞吐量提高比较多2倍,但性能提升的幅度在很大程度上取决于多种因素(磁盘性能、系统负载等)。如果您的卡支持TLS卸载,它还可以减少CPU使用率。



    测试性能
    如要测量您的设置的性能提升情况,可以依循以下说明来运行简单的单线程测试。如下所述,我们的测试结果表明,需进行任何特定调整,TLS即可将性能提升近30%。



    使用的硬件和软件:




    AWS3例采用了:

    4GBRAM

    20GB通用SSD

    英特尔?至强?白金8259CLCPU,250GH双核处理器


    ?FBSD130和U2110
    TLS13,采用TLS_AES_256_GCM_SHA384密码套件
    NGINX1214,根据启用NGINX中的TLS部分的要求构建和配置。

    执行测试的方法:





    创建一个完全适合磁盘缓存的大文件:



    #-11G


    运行以下命令检查吞吐量;多次重复执行基本命令以获得更准确的结果。将输出结果输出到用程序[FBSD][U],进行基本的统计分析。







    #'1100';----'%{_}\'1G|


    性能测试结果
    以下是我们的测试结果,以,的输出结果表示,每个值都是下载速度,单位是B秒。



    不支持TLS的FBSD130的吞吐量:



    NMMMAS
    10532225573348555616555155610239137
    支持TLS的FBSD130的吞吐量:



    NMMMAS
    10629379723164717349708600428304766
    支持TLS的U2110的吞吐量:



    NMMMAS
    10529199705720662354654321648025103
    支持TLS的U2110的吞吐量:



    NMMMAS
    10619105760208756278741848343255246
    在我们的测试中,与U相比,FBSD上的TLS提升的性能更高。性能改进比例如下:







    比较小值
    比较大值
    中位数
    平均数


    FBSD130
    18%
    26%
    29%
    28%


    U2110
    16%
    8%
    14%
    13%



    结语
    NGINX1214在使用SSL_()提供静态文件时引入了TLS支持。我们的测试表明,NGINX性能可提高8%到29%,具体因操作系统而异。



    我们很想知道您的TLS和NGINX使用体验,尤其是您在其他操作系统上的测试结果!您可以在下方的评论区中分享您的结果。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|山东001在线 ( ICP11027147 )

    GMT+8, 2024-5-9 01:33 , Processed in 0.075303 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表