1
0
mirror of https://git.zx2c4.com/wireguard-go synced 2025-09-18 20:57:50 +02:00
wireguard-go/device
Alexander Yastrebov 264889f0bb device: optimize message encoding
Optimize message encoding by eliminating binary.Write (which internally
uses reflection) in favour of hand-rolled encoding.

This is companion to 9e7529c3d2.

Synthetic benchmark:

    var packetSink []byte
    func BenchmarkMessageInitiationMarshal(b *testing.B) {
        var msg MessageInitiation
        b.Run("binary.Write", func(b *testing.B) {
            b.ReportAllocs()
            for range b.N {
                var buf [MessageInitiationSize]byte
                writer := bytes.NewBuffer(buf[:0])
                _ = binary.Write(writer, binary.LittleEndian, msg)
                packetSink = writer.Bytes()
            }
        })
        b.Run("binary.Encode", func(b *testing.B) {
            b.ReportAllocs()
            for range b.N {
                packet := make([]byte, MessageInitiationSize)
                _, _ = binary.Encode(packet, binary.LittleEndian, msg)
                packetSink = packet
            }
        })
        b.Run("marshal", func(b *testing.B) {
            b.ReportAllocs()
            for range b.N {
                packet := make([]byte, MessageInitiationSize)
                _ = msg.marshal(packet)
                packetSink = packet
            }
        })
    }

Results:
                                             │      -      │
                                             │   sec/op    │
    MessageInitiationMarshal/binary.Write-8    1.337µ ± 0%
    MessageInitiationMarshal/binary.Encode-8   1.242µ ± 0%
    MessageInitiationMarshal/marshal-8         53.05n ± 1%

                                             │     -      │
                                             │    B/op    │
    MessageInitiationMarshal/binary.Write-8    368.0 ± 0%
    MessageInitiationMarshal/binary.Encode-8   160.0 ± 0%
    MessageInitiationMarshal/marshal-8         160.0 ± 0%

                                             │     -      │
                                             │ allocs/op  │
    MessageInitiationMarshal/binary.Write-8    3.000 ± 0%
    MessageInitiationMarshal/binary.Encode-8   1.000 ± 0%
    MessageInitiationMarshal/marshal-8         1.000 ± 0%

Signed-off-by: Alexander Yastrebov <yastrebov.alex@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2025-05-21 00:09:36 +02:00
..
allowedips_rand_test.go device: use rand.NewSource instead of rand.Seed 2025-05-05 15:10:08 +02:00
allowedips_test.go device: add support for removing allowedips individually 2025-05-20 23:03:06 +02:00
allowedips.go device: add support for removing allowedips individually 2025-05-20 23:03:06 +02:00
bind_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
channels.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
constants.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
cookie_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
cookie.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
device_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
device.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
devicestate_string.go device: remove deviceStateNew 2021-02-09 15:39:19 +01:00
endpoint_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
indextable.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
ip.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
kdf_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
keypair.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
logger.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
mobilequirks.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
noise_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
noise-helpers.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
noise-protocol.go device: optimize message encoding 2025-05-21 00:09:36 +02:00
noise-types.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
peer.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
pools_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
pools.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
queueconstants_android.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
queueconstants_default.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
queueconstants_ios.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
queueconstants_windows.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
race_disabled_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
race_enabled_test.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
receive.go device: reduce RoutineHandshake allocations 2025-05-15 16:42:06 +02:00
send.go device: optimize message encoding 2025-05-21 00:09:36 +02:00
sticky_default.go global: replaced unused function params with _ 2025-05-05 15:10:08 +02:00
sticky_linux.go global: replaced unused function params with _ 2025-05-05 15:10:08 +02:00
timers.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
tun.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
uapi.go device: add support for removing allowedips individually 2025-05-20 23:03:06 +02:00