diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-01-27 18:13:53 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-01-27 18:38:27 +0100 |
commit | 1b092ce584cbee0f86f3e25b5498870c8ca96652 (patch) | |
tree | f8f7119546aafab5d48f6dd9078bfbf18a753b1a /device/uapi.go | |
parent | a11dec5dc12255ee032ce730eef3c82e77c84ed2 (diff) |
device: get rid of nonce routine
This moves to a simple queue with no routine processing it, to reduce
scheduler pressure.
This splits latency in half!
benchmark old ns/op new ns/op delta
BenchmarkThroughput-16 2394 2364 -1.25%
BenchmarkLatency-16 259652 120810 -53.47%
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device/uapi.go')
-rw-r--r-- | device/uapi.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/device/uapi.go b/device/uapi.go index cbfe25e..bfef877 100644 --- a/device/uapi.go +++ b/device/uapi.go @@ -156,6 +156,7 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) { if deviceConfig { deviceConfig = false } + peer.handlePostConfig() // Load/create the peer we are now configuring. err := device.handlePublicKeyLine(peer, value) if err != nil { @@ -174,6 +175,7 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) { return err } } + peer.handlePostConfig() if err := scanner.Err(); err != nil { return ipcErrorf(ipc.IpcErrorIO, "failed to read input: %w", err) @@ -241,6 +243,12 @@ type ipcSetPeer struct { created bool // new reports whether this is a newly created peer } +func (peer *ipcSetPeer) handlePostConfig() { + if peer.Peer != nil && !peer.dummy && peer.Peer.device.isUp.Get() { + peer.SendStagedPackets() + } +} + func (device *Device) handlePublicKeyLine(peer *ipcSetPeer, value string) error { // Load/create the peer we are configuring. var publicKey NoisePublicKey |