# 性能测试

参与测试的软件及其版本（为避嫌 + 公平待遇，用“某”代替）：

| 软件名   | 版本   | 链接                                 |
| -------- | ------ | ------------------------------------ |
| EasyTier | 1.2.1  | https://github.com/EasyTier/EasyTier |
| 某组网工具 A      | 2024.7 月版本 | |

待测：

- WireGuard
- TailScale
- ZeroTier


## X86

|          |                                              |
| -------- | -------------------------------------------- |
| 机器型号 | 阿里云 ecs.ic5.2xlarge                       |
| vCPU     | 8 vCPU                                       |
| RAM      | 8G                                           |
| CPU 型号 | Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz |
| 操作系统 | Ubuntu 22.04 64位                            |

## 测试结果

|     软件      |    测试项目     | 性能 ( 无 -R / 带 -R ) Gbit/s |
| :-----------: | :-------------: | :---------------------------: |
| LoopBack 设备 |                 |          28.3 / 28.3          |
|   EasyTier    |   UDP 无加密    |          1.43 / 1.46          |
|   EasyTier    | UDP AES-128-GCM |          1.36 / 1.37          |
|   EasyTier    |   TCP 无加密    |          1.31 / 1.41          |
|   EasyTier    | TCP AES-128-GCM |          1.42 / 1.41          |
|               |                 |                               |
|      某组网工具 A      |   UDP 无加密    |          1.10 / 1.11          |
|      某组网工具 A      | UDP AES-128-GCM |          0.93 / 0.98          |

## 复现方式

### 基础准备

测试基于 Linux 的网络命名空间功能，使用 Ubuntu 虚拟机、物理机、 Docker 容器等都可以完成测试。

初始化命令(root 权限执行)

```bash
apt update
apt install iperf3 iptables -y

ip netns add red
ip netns add green
ip link add br0 type bridge
ip link set br0 up
ip addr add 192.168.0.1/16 dev br0

ip link add vethcab0 type veth peer name red0
ip link set vethcab0 master br0
ip link set red0 netns red
ip netns exec red ip link set lo up
ip netns exec red ip link set red0 up
ip netns exec red ip addr add 192.168.0.2/16 dev red0
ip netns exec red ip route add default via 192.168.0.1
ip link set vethcab0 up

ip link add vethcab1 type veth peer name green0
ip link set vethcab1 master br0
ip link set green0 netns green
ip netns exec green ip link set lo up
ip netns exec green ip link set green0 up
ip netns exec green ip addr add 192.168.0.3/16 dev green0
ip netns exec green ip route add default via 192.168.0.1
ip link set vethcab1 up

sysctl net.ipv4.ip_forward=1
sysctl net.bridge.bridge-nf-call-iptables=0
sysctl net.bridge.bridge-nf-call-ip6tables=0
sysctl net.ipv6.conf.lo.disable_ipv6=0

# 注： EasyTier 不依赖公网服务，可以不配置 iptables 转发
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i eht0 -j ACCEPT
iptables --policy FORWARD ACCEPT

nohup ip netns exec red iperf3 -s &
```

另外需要确保待测试的程序在 PATH 环境变量中

下面的 iperf3 未带 -R，实际测试时会测得带 -R 的数据。

### LoopBack

```bash
ip netns exec green iperf3 -c 192.168.0.2
```

### EasyTier

#### UDP 不带加密：
```bash
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread -u
ip netns exec green easytier-core -i 10.126.126.3 -p udp://192.168.0.2:11010 --multi-thread -u
ip netns exec green iperf3 -c 10.126.126.2
```

#### UDP 加密： 
```bash
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread
ip netns exec green easytier-core -i 10.126.126.3 -p udp://192.168.0.2:11010 --multi-thread
ip netns exec green iperf3 -c 10.126.126.2
```

#### TCP 不带加密

```bash
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread -u
ip netns exec green easytier-core -i 10.126.126.3 -p tcp://192.168.0.2:11010 --multi-thread -u
ip netns exec green iperf3 -c 10.126.126.2
```

#### TCP 加密

```bash
ip netns exec red easytier-core -i 10.126.126.2 --multi-thread
ip netns exec green easytier-core -i 10.126.126.3 -p tcp://192.168.0.2:11010 --multi-thread
ip netns exec green iperf3 -c 10.126.126.2
```

### 某组网工具 A

#### UDP 无加密 

```bash
ip netns exec red xxx -k iperf -s 8.134.146.7:29872 --ip 10.26.0.2
ip netns exec green xxx -k iperf -s 8.134.146.7:29872 --ip 10.26.0.3
ip netns exec green iperf3 -c 10.26.0.2
```

#### UDP 带加密 

```bash
ip netns exec red xxx -k iperf -s 8.134.146.7:29872 -w 1234 --ip 10.26.0.2
ip netns exec green xxx -k iperf -s 8.134.146.7:29872 -w 1234 --ip 10.26.0.3
ip netns exec green iperf3 -c 10.26.0.2
```
