diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-05 19:55:10 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-05 19:58:12 +0200 |
commit | 8551e03ee3a27492f8423db3eda7ddfd1135bd50 (patch) | |
tree | 1b73587437388d4084c98315d792e4b55da62650 /src/router/peer.rs | |
parent | Output test number and parameters to debug (diff) | |
download | wireguard-rs-8551e03ee3a27492f8423db3eda7ddfd1135bd50.tar.xz wireguard-rs-8551e03ee3a27492f8423db3eda7ddfd1135bd50.zip |
Added outbound benchmark
Decent performance (~1.5Gb/s on old XPS laptop from 2014),
biggest bottleneck seems to be the heap allocator,
swapping with jemalloc yields 2x performance.
Diffstat (limited to '')
-rw-r--r-- | src/router/peer.rs | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/router/peer.rs b/src/router/peer.rs index 3489bbf..634f980 100644 --- a/src/router/peer.rs +++ b/src/router/peer.rs @@ -41,11 +41,10 @@ pub struct KeyWheel { } pub struct PeerInner<C: Callbacks, T: Tun, B: Bind> { - pub stopped: AtomicBool, + pub device: Arc<DeviceInner<C, T, B>>, pub opaque: C::Opaque, pub outbound: Mutex<SyncSender<JobOutbound>>, pub inbound: Mutex<SyncSender<JobInbound<C, T, B>>>, - pub device: Arc<DeviceInner<C, T, B>>, pub staged_packets: Mutex<ArrayDeque<[Vec<u8>; MAX_STAGED_PACKETS], Wrapping>>, // packets awaiting handshake pub rx_bytes: AtomicU64, // received bytes pub tx_bytes: AtomicU64, // transmitted bytes @@ -106,10 +105,12 @@ fn treebit_remove<A: Address, C: Callbacks, T: Tun, B: Bind>( impl<C: Callbacks, T: Tun, B: Bind> Drop for Peer<C, T, B> { fn drop(&mut self) { - // mark peer as stopped - let peer = &self.state; - peer.stopped.store(true, Ordering::SeqCst); + + // remove from cryptkey router + + treebit_remove(self, &peer.device.ipv4); + treebit_remove(self, &peer.device.ipv6); // drop channels @@ -121,11 +122,6 @@ impl<C: Callbacks, T: Tun, B: Bind> Drop for Peer<C, T, B> { mem::replace(&mut self.thread_inbound, None).map(|v| v.join()); mem::replace(&mut self.thread_outbound, None).map(|v| v.join()); - // remove from cryptkey router - - treebit_remove(self, &peer.device.ipv4); - treebit_remove(self, &peer.device.ipv6); - // release ids from the receiver map let mut keys = peer.keys.lock(); @@ -170,7 +166,6 @@ pub fn new_peer<C: Callbacks, T: Tun, B: Bind>( device, inbound: Mutex::new(in_tx), outbound: Mutex::new(out_tx), - stopped: AtomicBool::new(false), ekey: spin::Mutex::new(None), endpoint: spin::Mutex::new(None), keys: spin::Mutex::new(KeyWheel { |