mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 19:15:34 +00:00
71029cea2d
This updates all source files to use a new standard header for copyright and license declaration. Notably, copyright no longer includes a date, and we now use the standard SPDX-License-Identifier header. This commit was done almost entirely mechanically with perl, and then some minimal manual fixes. Updates #6865 Signed-off-by: Will Norris <will@tailscale.com>
109 lines
2.0 KiB
Go
109 lines
2.0 KiB
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Create two wgengine instances and pass data through them, measuring
|
|
// throughput, latency, and packet loss.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"tailscale.com/types/logger"
|
|
)
|
|
|
|
func BenchmarkTrivialNoAlloc(b *testing.B) {
|
|
run(b, setupTrivialNoAllocTest)
|
|
}
|
|
func BenchmarkTrivial(b *testing.B) {
|
|
run(b, setupTrivialTest)
|
|
}
|
|
|
|
func BenchmarkBlockingChannel(b *testing.B) {
|
|
run(b, setupBlockingChannelTest)
|
|
}
|
|
|
|
func BenchmarkNonblockingChannel(b *testing.B) {
|
|
run(b, setupNonblockingChannelTest)
|
|
}
|
|
|
|
func BenchmarkDoubleChannel(b *testing.B) {
|
|
run(b, setupDoubleChannelTest)
|
|
}
|
|
|
|
func BenchmarkUDP(b *testing.B) {
|
|
run(b, setupUDPTest)
|
|
}
|
|
|
|
func BenchmarkBatchTCP(b *testing.B) {
|
|
run(b, setupBatchTCPTest)
|
|
}
|
|
|
|
func BenchmarkWireGuardTest(b *testing.B) {
|
|
b.Skip("https://github.com/tailscale/tailscale/issues/2716")
|
|
run(b, func(logf logger.Logf, traf *TrafficGen) {
|
|
setupWGTest(b, logf, traf, Addr1, Addr2)
|
|
})
|
|
}
|
|
|
|
type SetupFunc func(logger.Logf, *TrafficGen)
|
|
|
|
func run(b *testing.B, setup SetupFunc) {
|
|
sizes := []int{
|
|
ICMPMinSize + 8,
|
|
ICMPMinSize + 100,
|
|
ICMPMinSize + 1000,
|
|
}
|
|
|
|
for _, size := range sizes {
|
|
b.Run(fmt.Sprintf("%d", size), func(b *testing.B) {
|
|
runOnce(b, setup, size)
|
|
})
|
|
}
|
|
}
|
|
|
|
func runOnce(b *testing.B, setup SetupFunc, payload int) {
|
|
b.StopTimer()
|
|
b.ReportAllocs()
|
|
|
|
var logf logger.Logf = b.Logf
|
|
if !testing.Verbose() {
|
|
logf = logger.Discard
|
|
}
|
|
|
|
traf := NewTrafficGen(b.StartTimer)
|
|
setup(logf, traf)
|
|
|
|
logf("initialized. (n=%v)", b.N)
|
|
b.SetBytes(int64(payload))
|
|
|
|
traf.Start(Addr1.Addr(), Addr2.Addr(), payload, int64(b.N))
|
|
|
|
var cur, prev Snapshot
|
|
var pps int64
|
|
i := 0
|
|
for traf.Running() {
|
|
i += 1
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
if (i % 100) == 0 {
|
|
prev = cur
|
|
cur = traf.Snap()
|
|
d := cur.Sub(prev)
|
|
|
|
if prev.WhenNsec != 0 {
|
|
logf("%v @%7d pkt/sec", d, pps)
|
|
}
|
|
}
|
|
|
|
pps = traf.Adjust()
|
|
}
|
|
|
|
cur = traf.Snap()
|
|
d := cur.Sub(prev)
|
|
loss := float64(d.LostPackets) / float64(d.RxPackets)
|
|
|
|
b.ReportMetric(loss*100, "%lost")
|
|
}
|