Skip to content

协程 TCP 本地性能

查看 Markdown

使用原生 Asio TCP 协程测试程序,比较无额外业务计算和每次回显执行 10,000 次 CPU 计算两种负载。公开协程端点 API 仍为 TODO。

window>1 时测量整批 RTT;回调测试程序测量逐消息 RTT,两者不能用来推导协程加速比。

指标定义与测量方法.

平均进程 CPU 占用率以单核为 100%,多线程可超过 100%;估算值单独标注,三次 CPU 采样不完整时为 N/A。 本机有 14 个逻辑核心,整机占比 = 进程 CPU% / 14,单核 100% 对应整机 7.14%。

无额外业务计算

吞吐量

p99 RTT

全部测试负载

64 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 62,907 [62,800, 63,279] 7.68 15.88 18.79 24.33 69.7(估算) 2.80
Boost.Asio / 4 个 io_context / 4 个线程 63,350 [62,675, 63,366] 7.73 15.92 18.17 21.79 69.7(估算) 2.84
Boost.Asio / 1 个 io_context / 1 个线程 63,636 [63,019, 63,786] 7.77 15.88 18.21 21.21 69.6(估算) 2.77
Boost.Asio / 1 个 io_context / 2 个线程 60,216 [59,169, 60,582] 7.35 16.25 19.50 22.88 107.3(估算) 2.77
Boost.Asio / 1 个 io_context / 4 个线程 47,001 [44,610, 47,065] 5.74 21.54 27.96 38.38 171.3(估算) 2.81
Standalone Asio / 2 个 io_context / 2 个线程 67,180 [63,244, 68,815] 8.20 14.00 18.71 23.96 70.0(估算) 2.77
Standalone Asio / 4 个 io_context / 4 个线程 62,690 [61,690, 62,874] 7.65 15.92 18.75 23.12 69.5(估算) 2.78
Standalone Asio / 1 个 io_context / 1 个线程 63,204 [59,544, 63,453] 7.72 15.92 18.79 24.54 69.0(估算) 2.75
Standalone Asio / 1 个 io_context / 2 个线程 59,115 [58,653, 60,438] 7.22 16.33 20.42 24.67 106.7(估算) 2.77
Standalone Asio / 1 个 io_context / 4 个线程 46,469 [45,994, 46,555] 5.67 21.62 28.29 39.96 171.4(估算) 2.80

1024 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 60,841 [56,234, 60,876] 118.83 16.33 18.54 21.71 71.0(估算) 2.81
Boost.Asio / 4 个 io_context / 4 个线程 60,891 [57,264, 61,173] 118.93 16.25 18.54 21.62 71.0(估算) 2.83
Boost.Asio / 1 个 io_context / 1 个线程 60,896 [60,743, 61,375] 118.94 16.25 18.62 22.04 71.1(估算) 2.77
Boost.Asio / 1 个 io_context / 2 个线程 55,711 [54,618, 55,831] 108.81 17.21 21.62 26.38 106.3(估算) 2.80
Boost.Asio / 1 个 io_context / 4 个线程 45,848 [44,494, 46,157] 89.55 21.58 28.21 39.46 170.6(估算) 2.81
Standalone Asio / 2 个 io_context / 2 个线程 62,953 [60,845, 63,208] 122.96 14.79 19.38 25.50 70.8(估算) 2.77
Standalone Asio / 4 个 io_context / 4 个线程 61,020 [60,594, 61,084] 119.18 16.17 18.92 23.17 70.9(估算) 2.78
Standalone Asio / 1 个 io_context / 1 个线程 61,052 [60,469, 61,285] 119.24 16.25 19.42 24.46 71.2(估算) 2.75
Standalone Asio / 1 个 io_context / 2 个线程 55,727 [53,385, 56,838] 108.84 17.04 21.54 27.12 105.8(估算) 2.77
Standalone Asio / 1 个 io_context / 4 个线程 45,376 [44,406, 45,605] 88.63 21.67 28.96 38.42 170.5(估算) 2.81

16384 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 41,106 [41,061, 41,226] 1,284.56 17.71 25.04 27.17 79.8(估算) 2.86
Boost.Asio / 4 个 io_context / 4 个线程 40,662 [40,230, 40,762] 1,270.67 18.00 25.46 28.33 79.4(估算) 2.92
Boost.Asio / 1 个 io_context / 1 个线程 40,661 [40,647, 41,240] 1,270.65 17.75 25.38 28.54 79.4(估算) 2.84
Boost.Asio / 1 个 io_context / 2 个线程 34,680 [34,486, 34,787] 1,083.75 23.21 25.67 29.00 97.3(估算) 2.88
Boost.Asio / 1 个 io_context / 4 个线程 30,765 [29,823, 31,633] 961.41 26.42 31.21 42.62 132.7(估算) 2.88
Standalone Asio / 2 个 io_context / 2 个线程 40,789 [40,616, 43,126] 1,274.65 17.75 25.54 29.96 79.2(估算) 2.86
Standalone Asio / 4 个 io_context / 4 个线程 41,076 [40,656, 41,327] 1,283.62 17.46 25.33 29.12 79.6(估算) 2.88
Standalone Asio / 1 个 io_context / 1 个线程 40,492 [40,365, 41,089] 1,265.36 17.83 25.71 30.00 79.4(估算) 2.84
Standalone Asio / 1 个 io_context / 2 个线程 34,382 [34,361, 34,865] 1,074.45 23.33 26.58 32.50 97.9(估算) 2.86
Standalone Asio / 1 个 io_context / 4 个线程 30,801 [30,482, 30,969] 962.54 26.42 31.96 46.83 133.5(估算) 2.89

64 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 507,848 [492,872, 511,519] 61.99 497.38 541.58 645.58 198.9(估算) 4.02
Boost.Asio / 4 个 io_context / 4 个线程 509,076 [507,235, 523,727] 62.14 397.83 794.08 872.58 344.8(估算) 4.06
Boost.Asio / 1 个 io_context / 1 个线程 311,785 [310,989, 312,544] 38.06 817.92 865.67 971.25 99.3(估算) 3.62
Boost.Asio / 1 个 io_context / 2 个线程 471,934 [469,816, 474,904] 57.61 539.12 577.17 634.12 199.1(估算) 3.75
Boost.Asio / 1 个 io_context / 4 个线程 589,034 [529,156, 592,497] 71.90 400.71 606.50 691.92 375.9(估算) 4.69
Standalone Asio / 2 个 io_context / 2 个线程 470,327 [438,108, 472,086] 57.41 497.62 956.62 1,258.12 198.7(估算) 3.70
Standalone Asio / 4 个 io_context / 4 个线程 471,481 [454,061, 514,131] 57.55 459.21 834.79 936.67 342.8(估算) 3.78
Standalone Asio / 1 个 io_context / 1 个线程 315,350 [296,641, 318,487] 38.49 804.79 887.92 1,054.88 99.3(估算) 3.55
Standalone Asio / 1 个 io_context / 2 个线程 467,959 [465,443, 476,833] 57.12 534.62 619.21 815.21 198.4(估算) 3.92
Standalone Asio / 1 个 io_context / 4 个线程 545,110 [514,063, 546,656] 66.54 431.12 701.12 871.75 366.1(估算) 4.39

1024 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 438,479 [436,946, 447,523] 856.40 546.00 728.33 1,292.12 198.6(估算) 4.44
Boost.Asio / 4 个 io_context / 4 个线程 479,729 [428,669, 494,297] 936.97 418.83 824.75 900.21 340.7(估算) 4.48
Boost.Asio / 1 个 io_context / 1 个线程 269,139 [268,860, 270,145] 525.66 945.21 973.00 989.00 99.9(估算) 4.25
Boost.Asio / 1 个 io_context / 2 个线程 432,506 [432,351, 434,698] 844.74 584.79 617.71 655.79 199.2(估算) 4.38
Boost.Asio / 1 个 io_context / 4 个线程 532,048 [464,390, 540,492] 1,039.16 426.21 662.58 798.33 371.4(估算) 5.05
Standalone Asio / 2 个 io_context / 2 个线程 401,020 [385,339, 438,239] 783.24 545.96 1,070.96 1,366.17 197.9(估算) 4.27
Standalone Asio / 4 个 io_context / 4 个线程 468,139 [444,188, 487,913] 914.33 439.67 843.75 938.17 341.5(估算) 4.38
Standalone Asio / 1 个 io_context / 1 个线程 273,417 [272,279, 275,384] 534.02 928.12 982.00 1,028.71 99.7(估算) 4.23
Standalone Asio / 1 个 io_context / 2 个线程 432,010 [420,917, 440,576] 843.77 577.79 655.46 831.88 198.6(估算) 4.33
Standalone Asio / 1 个 io_context / 4 个线程 503,863 [489,303, 538,244] 984.11 463.88 692.38 870.46 369.1(估算) 4.61

16384 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 181,274 [180,992, 183,507] 5,664.80 1,329.75 1,666.00 1,853.04 199.0(估算) 11.91
Boost.Asio / 4 个 io_context / 4 个线程 237,272 [236,530, 244,644] 7,414.75 981.92 1,357.96 1,628.12 348.7(估算) 12.19
Boost.Asio / 1 个 io_context / 1 个线程 93,095 [91,709, 93,118] 2,909.21 2,675.00 2,767.17 2,823.29 99.9(估算) 11.75
Boost.Asio / 1 个 io_context / 2 个线程 172,338 [171,229, 175,894] 5,385.56 1,360.25 1,742.38 2,060.71 198.8(估算) 11.89
Boost.Asio / 1 个 io_context / 4 个线程 232,413 [199,379, 236,974] 7,262.91 993.04 1,304.79 1,543.92 355.8(估算) 11.98
Standalone Asio / 2 个 io_context / 2 个线程 175,046 [170,794, 176,637] 5,470.19 1,318.46 2,180.96 2,764.04 198.4(估算) 12.02
Standalone Asio / 4 个 io_context / 4 个线程 228,558 [211,600, 236,115] 7,142.44 1,012.54 1,461.92 1,750.29 348.0(估算) 12.05
Standalone Asio / 1 个 io_context / 1 个线程 93,341 [92,529, 94,551] 2,916.90 2,651.75 2,871.04 3,015.46 99.8(估算) 11.64
Standalone Asio / 1 个 io_context / 2 个线程 176,942 [175,812, 181,342] 5,529.45 1,336.75 1,651.92 1,923.62 199.1(估算) 11.83
Standalone Asio / 1 个 io_context / 4 个线程 223,382 [221,670, 236,886] 6,980.67 1,026.96 1,434.21 1,581.50 356.3(估算) 12.08

每次回显执行 10,000 次 CPU 计算

吞吐量

p99 RTT

全部测试负载

64 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 31,074 [30,880, 31,219] 3.79 31.04 37.38 44.33 85.0(估算) 2.80
Boost.Asio / 4 个 io_context / 4 个线程 31,118 [29,837, 31,545] 3.80 31.04 37.71 45.75 84.9(估算) 2.84
Boost.Asio / 1 个 io_context / 1 个线程 31,487 [31,463, 31,553] 3.84 30.96 36.17 40.38 85.1(估算) 2.77
Boost.Asio / 1 个 io_context / 2 个线程 27,960 [27,923, 28,131] 3.41 35.00 39.04 43.88 100.9(估算) 2.78
Boost.Asio / 1 个 io_context / 4 个线程 24,552 [24,414, 24,842] 3.00 40.67 46.92 57.46 125.8(估算) 2.81
Standalone Asio / 2 个 io_context / 2 个线程 30,975 [30,360, 31,137] 3.78 30.96 38.25 46.96 84.7(估算) 2.77
Standalone Asio / 4 个 io_context / 4 个线程 30,969 [29,625, 31,499] 3.78 30.96 37.79 43.54 84.7(估算) 2.81
Standalone Asio / 1 个 io_context / 1 个线程 31,006 [30,895, 31,664] 3.78 30.96 37.88 44.96 84.9(估算) 2.75
Standalone Asio / 1 个 io_context / 2 个线程 27,643 [27,168, 27,760] 3.37 35.04 41.04 50.04 101.2(估算) 2.77
Standalone Asio / 1 个 io_context / 4 个线程 24,799 [24,378, 25,417] 3.03 39.67 47.71 58.88 126.4(估算) 2.80

1024 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 31,163 [31,013, 31,269] 60.86 31.38 36.75 41.62 86.3(估算) 2.81
Boost.Asio / 4 个 io_context / 4 个线程 31,093 [29,636, 31,322] 60.73 31.38 36.79 41.38 86.2(估算) 2.88
Boost.Asio / 1 个 io_context / 1 个线程 30,875 [30,870, 31,126] 60.30 31.42 37.67 43.42 86.3(估算) 2.77
Boost.Asio / 1 个 io_context / 2 个线程 26,755 [26,628, 26,757] 52.26 36.38 41.25 49.00 99.0(估算) 2.80
Boost.Asio / 1 个 io_context / 4 个线程 24,373 [24,117, 24,504] 47.60 41.46 45.33 50.08 123.3(估算) 2.80
Standalone Asio / 2 个 io_context / 2 个线程 30,895 [30,270, 31,574] 60.34 31.42 38.42 44.04 85.5(估算) 2.75
Standalone Asio / 4 个 io_context / 4 个线程 30,768 [30,646, 31,328] 60.09 31.50 37.50 43.88 86.1(估算) 2.81
Standalone Asio / 1 个 io_context / 1 个线程 30,935 [30,815, 30,945] 60.42 31.46 37.29 43.33 86.0(估算) 2.75
Standalone Asio / 1 个 io_context / 2 个线程 26,688 [26,530, 26,893] 52.13 36.38 41.71 50.62 99.2(估算) 2.78
Standalone Asio / 1 个 io_context / 4 个线程 24,111 [23,516, 24,356] 47.09 40.50 48.00 59.21 125.5(估算) 2.80

16384 B / 1 客户端 / window=1

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 22,515 [22,025, 22,546] 703.58 38.88 45.67 49.12 86.5(估算) 2.86
Boost.Asio / 4 个 io_context / 4 个线程 22,524 [22,448, 23,206] 703.86 38.54 45.83 50.42 86.6(估算) 2.91
Boost.Asio / 1 个 io_context / 1 个线程 22,963 [22,909, 23,374] 717.60 36.92 45.33 48.25 86.7(估算) 2.81
Boost.Asio / 1 个 io_context / 2 个线程 21,869 [21,834, 21,923] 683.39 39.88 43.21 48.12 104.4(估算) 2.84
Boost.Asio / 1 个 io_context / 4 个线程 21,254 [21,221, 21,415] 664.18 40.54 46.17 52.04 107.1(估算) 2.88
Standalone Asio / 2 个 io_context / 2 个线程 22,669 [22,650, 22,873] 708.40 37.83 45.79 50.38 86.3(估算) 2.83
Standalone Asio / 4 个 io_context / 4 个线程 22,987 [22,393, 23,137] 718.34 37.21 45.88 52.00 86.4(估算) 2.86
Standalone Asio / 1 个 io_context / 1 个线程 22,884 [22,462, 23,037] 715.12 37.38 46.04 53.17 86.5(估算) 2.83
Standalone Asio / 1 个 io_context / 2 个线程 21,639 [21,637, 21,694] 676.22 40.00 45.12 53.62 104.6(估算) 2.86
Standalone Asio / 1 个 io_context / 4 个线程 20,489 [19,639, 20,976] 640.27 43.21 49.25 61.71 107.5(估算) 2.88

64 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 103,026 [102,555, 103,140] 12.58 2,471.75 2,552.54 2,642.92 199.6(估算) 3.00
Boost.Asio / 4 个 io_context / 4 个线程 169,084 [169,023, 169,975] 20.64 1,506.92 1,634.67 1,701.38 393.4(估算) 3.27
Boost.Asio / 1 个 io_context / 1 个线程 47,117 [47,075, 47,139] 5.75 5,442.42 5,518.46 5,566.88 100.0(估算) 2.84
Boost.Asio / 1 个 io_context / 2 个线程 102,262 [102,160, 102,309] 12.48 2,495.04 2,590.00 2,645.50 199.9(估算) 2.98
Boost.Asio / 1 个 io_context / 4 个线程 168,546 [150,389, 169,107] 20.57 1,511.29 1,604.00 1,657.29 397.5(估算) 3.27
Standalone Asio / 2 个 io_context / 2 个线程 101,077 [97,148, 101,896] 12.34 2,486.83 2,879.96 3,014.75 199.0(估算) 2.92
Standalone Asio / 4 个 io_context / 4 个线程 169,280 [169,265, 169,786] 20.66 1,502.79 1,625.71 1,691.71 392.9(估算) 3.27
Standalone Asio / 1 个 io_context / 1 个线程 47,209 [47,035, 47,475] 5.76 5,428.08 5,517.42 5,613.17 99.9(估算) 2.77
Standalone Asio / 1 个 io_context / 2 个线程 101,399 [99,822, 102,478] 12.38 2,505.75 2,675.12 2,912.46 199.5(估算) 2.92
Standalone Asio / 1 个 io_context / 4 个线程 160,712 [158,007, 170,412] 19.62 1,577.50 1,745.62 1,798.71 393.5(估算) 3.25

1024 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 99,316 [98,965, 99,852] 193.98 2,540.42 2,728.46 3,011.71 199.4(估算) 3.64
Boost.Asio / 4 个 io_context / 4 个线程 164,464 [164,360, 166,407] 321.22 1,537.46 1,672.33 1,729.25 394.1(估算) 3.91
Boost.Asio / 1 个 io_context / 1 个线程 46,039 [45,874, 46,227] 89.92 5,564.79 5,646.96 5,770.00 100.0(估算) 3.45
Boost.Asio / 1 个 io_context / 2 个线程 99,747 [94,313, 99,781] 194.82 2,551.75 2,645.54 2,705.83 199.8(估算) 3.67
Boost.Asio / 1 个 io_context / 4 个线程 161,407 [160,911, 163,945] 315.25 1,563.00 1,724.67 1,811.25 396.1(估算) 3.88
Standalone Asio / 2 个 io_context / 2 个线程 98,299 [96,768, 98,372] 191.99 2,554.96 2,840.42 3,052.96 199.0(估算) 3.59
Standalone Asio / 4 个 io_context / 4 个线程 163,155 [162,881, 167,233] 318.66 1,551.50 1,689.50 1,749.29 392.6(估算) 3.80
Standalone Asio / 1 个 io_context / 1 个线程 46,094 [45,839, 46,102] 90.03 5,555.71 5,655.08 5,687.25 99.9(估算) 3.34
Standalone Asio / 1 个 io_context / 2 个线程 98,907 [98,542, 99,760] 193.18 2,557.71 2,739.88 2,937.29 199.4(估算) 3.58
Standalone Asio / 1 个 io_context / 4 个线程 162,629 [161,144, 164,159] 317.63 1,554.12 1,696.79 1,769.67 396.0(估算) 3.81

16384 B / 16 客户端 / window=16

依赖库 / 模型 往返 / s MiB/s p50 / us p95 / us p99 / us CPU / % RSS / MiB
Boost.Asio / 2 个 io_context / 2 个线程 74,664 [74,344, 75,113] 2,333.26 3,326.46 3,489.21 3,854.38 199.5(估算) 11.80
Boost.Asio / 4 个 io_context / 4 个线程 124,790 [124,385, 124,966] 3,899.69 1,964.62 2,151.50 2,266.92 391.7(估算) 11.84
Boost.Asio / 1 个 io_context / 1 个线程 34,479 [34,166, 34,613] 1,077.46 7,315.88 7,537.17 8,054.50 99.9(估算) 11.70
Boost.Asio / 1 个 io_context / 2 个线程 73,952 [69,601, 74,156] 2,311.02 3,358.71 3,588.75 3,931.75 199.6(估算) 11.84
Boost.Asio / 1 个 io_context / 4 个线程 125,388 [123,713, 125,659] 3,918.38 1,951.42 2,072.25 2,199.29 396.8(估算) 11.81
Standalone Asio / 2 个 io_context / 2 个线程 73,919 [72,867, 75,297] 2,309.98 3,331.96 3,724.42 3,960.04 199.0(估算) 11.77
Standalone Asio / 4 个 io_context / 4 个线程 125,569 [123,105, 126,070] 3,924.03 1,951.75 2,145.46 2,254.21 391.9(估算) 11.80
Standalone Asio / 1 个 io_context / 1 个线程 34,466 [34,447, 34,972] 1,077.06 7,299.54 7,558.29 7,672.67 99.8(估算) 11.58
Standalone Asio / 1 个 io_context / 2 个线程 72,900 [72,273, 73,140] 2,278.14 3,368.38 3,829.58 4,074.96 199.3(估算) 11.78
Standalone Asio / 1 个 io_context / 4 个线程 124,867 [123,505, 126,990] 3,902.10 1,951.50 2,139.71 2,219.33 397.0(估算) 11.81

表格记录重复运行的中位数,吞吐量方括号为最小值和最大值;误差范围不是置信区间。延迟取各次采样分位数的中位数,不合并样本。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close