<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>性能优化 on Ops FreeEdge</title>
    <link>https://ops.freeedge.uk/tags/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/</link>
    <description>Recent content in 性能优化 on Ops FreeEdge</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 03 Apr 2026 16:30:00 +0000</lastBuildDate>
    <atom:link href="https://ops.freeedge.uk/tags/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tailscale WireGuard 内核模块 vs 用户空间：性能深度对比与优化解析</title>
      <link>https://ops.freeedge.uk/posts/tailscale-wireguard-kernel-vs-userspace/</link>
      <pubDate>Fri, 03 Apr 2026 16:30:00 +0000</pubDate>
      <guid>https://ops.freeedge.uk/posts/tailscale-wireguard-kernel-vs-userspace/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;Tailscale 是构建在 WireGuard 之上的零配置 VPN，长期以来在其 Linux 平台上默认使用用户空间实现（&lt;code&gt;wireguard-go&lt;/code&gt;）而非内核模块。这一选择优先考虑了跨平台一致性、简化部署以及 NAT 穿透、访问控制等附加功能。然而关于内核模块是否提供更优性能的问题一直存在争议。本文深入解析架构设计、历史背景、Tailscale 的性能优化策略，以及在内核与用户空间两种模式下 Tailscale 的基准测试对比。&lt;/p&gt;
&lt;h2 id=&#34;背景内核模块-vs-用户空间-wireguard&#34;&gt;背景：内核模块 vs 用户空间 WireGuard&lt;/h2&gt;
&lt;h3 id=&#34;内核模块wireguard-linux&#34;&gt;内核模块（wireguard-linux）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;引入时间&lt;/strong&gt;：Linux 内核 5.6（2020 年）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工作原理&lt;/strong&gt;：原生内核网络栈处理加密/解密与数据包转发，最小化用户空间参与，减少上下文切换与复制开销。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优势&lt;/strong&gt;：每包 CPU 开销更低，适合高吞吐（&amp;gt;1Gbps）、高 PPS（&amp;gt;100kpps）或低功耗设备（如树莓派）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;劣势&lt;/strong&gt;：需要 root 权限，Linux 独占，内核漏洞影响整个系统安全边界。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;用户空间wireguard-go&#34;&gt;用户空间（wireguard-go）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;使用方&lt;/strong&gt;：Tailscale（默认）、官方 WireGuard 工具用户空间模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工作原理&lt;/strong&gt;：通过 TUN/TAP 接口在用户空间运行，数据包需多次穿越内核-用户空间边界（读写 TUN、UDP socket）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优势&lt;/strong&gt;：可移植（支持非 Linux 系统），无需安装内核模块，与用户空间功能集成更简单。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;劣势&lt;/strong&gt;：系统调用、内存复制与用户空间加密带来更高开销。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;需要特别说明的是，Tailscale 的数据平面还额外叠加了 DERP 中继、ACL、MagicDNS、子网路由等功能，这使得与纯 WireGuard 的性能对比变得复杂。&lt;/p&gt;
&lt;h2 id=&#34;tailscale-的优化演进&#34;&gt;Tailscale 的优化演进&lt;/h2&gt;
&lt;p&gt;Tailscale 对 &lt;code&gt;wireguard-go&lt;/code&gt; 进行了激进的优化以缩小与内核模块的性能差距：&lt;/p&gt;
&lt;h3 id=&#34;2022-年吞吐量改进v136&#34;&gt;2022 年：吞吐量改进（v1.36）&lt;/h3&gt;
&lt;p&gt;关键改进：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 TUN 接口上启用 &lt;strong&gt;TCP 分段卸载（TSO）&lt;strong&gt;和&lt;/strong&gt;通用接收卸载（GRO）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;sendmmsg()&lt;/code&gt;/&lt;code&gt;recvmmsg()&lt;/code&gt; 实现批量 I/O。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;影响&lt;/strong&gt;：吞吐量提升 2.2 倍。在 AWS c6i.8xlarge 上的测试结果：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
