mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Remove 2 more syscalls by removing a useless mutex.
This commit is contained in:
parent
082a16e532
commit
dcf2c5f7e2
@ -129,17 +129,16 @@ enum BpfIteratorError {
|
|||||||
UnableToCreateIterator,
|
UnableToCreateIterator,
|
||||||
}
|
}
|
||||||
|
|
||||||
static MAP_TRAFFIC: Lazy<
|
static mut MAP_TRAFFIC: Lazy<
|
||||||
Mutex<Option<BpfMapIterator<XdpIpAddress, HostCounter>>>,
|
Option<BpfMapIterator<XdpIpAddress, HostCounter>>,
|
||||||
> = Lazy::new(|| Mutex::new(None));
|
> = Lazy::new(|| None);
|
||||||
|
|
||||||
static RTT_TRACKER: Lazy<
|
static mut RTT_TRACKER: Lazy<
|
||||||
Mutex<Option<BpfMapIterator<XdpIpAddress, RttTrackingEntry>>>,
|
Option<BpfMapIterator<XdpIpAddress, RttTrackingEntry>>,
|
||||||
> = Lazy::new(|| Mutex::new(None));
|
> = Lazy::new(|| None);
|
||||||
|
|
||||||
pub fn iterate_throughput(callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter])) {
|
pub unsafe fn iterate_throughput(callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter])) {
|
||||||
let mut traffic = MAP_TRAFFIC.lock().unwrap();
|
if MAP_TRAFFIC.is_none() {
|
||||||
if traffic.is_none() {
|
|
||||||
let lock = BPF_SKELETON.lock().unwrap();
|
let lock = BPF_SKELETON.lock().unwrap();
|
||||||
if let Some(skeleton) = lock.as_ref() {
|
if let Some(skeleton) = lock.as_ref() {
|
||||||
let skeleton = skeleton.get_ptr();
|
let skeleton = skeleton.get_ptr();
|
||||||
@ -149,12 +148,12 @@ pub fn iterate_throughput(callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter]
|
|||||||
(*skeleton).maps.map_traffic,
|
(*skeleton).maps.map_traffic,
|
||||||
)
|
)
|
||||||
} {
|
} {
|
||||||
*traffic = Some(iter);
|
*MAP_TRAFFIC = Some(iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(iter) = traffic.as_mut() {
|
if let Some(iter) = MAP_TRAFFIC.as_mut() {
|
||||||
iter.iter().unwrap().for_each(|(k, v)| {
|
iter.iter().unwrap().for_each(|(k, v)| {
|
||||||
//println!("{:?} {:?}", k, v);
|
//println!("{:?} {:?}", k, v);
|
||||||
callback(&k, &v);
|
callback(&k, &v);
|
||||||
@ -162,9 +161,8 @@ pub fn iterate_throughput(callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter]
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iterate_rtt(callback: &mut dyn FnMut(&XdpIpAddress, &RttTrackingEntry)) {
|
pub unsafe fn iterate_rtt(callback: &mut dyn FnMut(&XdpIpAddress, &RttTrackingEntry)) {
|
||||||
let mut traffic = RTT_TRACKER.lock().unwrap();
|
if RTT_TRACKER.is_none() {
|
||||||
if traffic.is_none() {
|
|
||||||
let lock = BPF_SKELETON.lock().unwrap();
|
let lock = BPF_SKELETON.lock().unwrap();
|
||||||
if let Some(skeleton) = lock.as_ref() {
|
if let Some(skeleton) = lock.as_ref() {
|
||||||
let skeleton = skeleton.get_ptr();
|
let skeleton = skeleton.get_ptr();
|
||||||
@ -174,12 +172,12 @@ pub fn iterate_rtt(callback: &mut dyn FnMut(&XdpIpAddress, &RttTrackingEntry)) {
|
|||||||
(*skeleton).maps.rtt_tracker,
|
(*skeleton).maps.rtt_tracker,
|
||||||
)
|
)
|
||||||
} {
|
} {
|
||||||
*traffic = Some(iter);
|
*RTT_TRACKER = Some(iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(iter) = traffic.as_mut() {
|
if let Some(iter) = RTT_TRACKER.as_mut() {
|
||||||
iter.iter().unwrap().for_each(|(k, v)| {
|
iter.iter().unwrap().for_each(|(k, v)| {
|
||||||
callback(&k, &v[0]); // Not per-CPU
|
callback(&k, &v[0]); // Not per-CPU
|
||||||
});
|
});
|
||||||
|
@ -32,5 +32,7 @@ impl Default for RttTrackingEntry {
|
|||||||
///
|
///
|
||||||
/// Executes `callback` for each entry.
|
/// Executes `callback` for each entry.
|
||||||
pub fn rtt_for_each(callback: &mut dyn FnMut(&XdpIpAddress, &RttTrackingEntry)) {
|
pub fn rtt_for_each(callback: &mut dyn FnMut(&XdpIpAddress, &RttTrackingEntry)) {
|
||||||
iterate_rtt(callback);
|
unsafe {
|
||||||
|
iterate_rtt(callback);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,5 +29,7 @@ pub struct HostCounter {
|
|||||||
pub fn throughput_for_each(
|
pub fn throughput_for_each(
|
||||||
callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter]),
|
callback: &mut dyn FnMut(&XdpIpAddress, &[HostCounter]),
|
||||||
) {
|
) {
|
||||||
crate::bpf_iterator::iterate_throughput(callback);
|
unsafe {
|
||||||
|
crate::bpf_iterator::iterate_throughput(callback);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user