summaryrefslogtreecommitdiffstats
path: root/src/router/peer.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2019-09-05 19:55:10 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2019-09-05 19:58:12 +0200
commit8551e03ee3a27492f8423db3eda7ddfd1135bd50 (patch)
tree1b73587437388d4084c98315d792e4b55da62650 /src/router/peer.rs
parentOutput test number and parameters to debug (diff)
downloadwireguard-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 'src/router/peer.rs')
-rw-r--r--src/router/peer.rs17
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 {