aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2023-02-15 14:32:55 +0100
committert3sserakt <t3ss@posteo.de>2023-02-15 14:32:55 +0100
commit1b8b9ebe2f3d024578b9abf43542e3d74adb26a7 (patch)
tree4fc21a6f003d28707affe89d0af351e6d2249a39
parent200be13896d919f1f86cd6d46be6c4efea365b70 (diff)
parentb8b3894211fc321402ffe62afac6885f6657b722 (diff)
downloadgnunet-1b8b9ebe2f3d024578b9abf43542e3d74adb26a7.tar.gz
gnunet-1b8b9ebe2f3d024578b9abf43542e3d74adb26a7.zip
Merge branch 'master' of ssh://git.gnunet.org/gnunet
-rw-r--r--src/dht/gnunet-service-dht_neighbours.c48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c
index fe8106bca..010a7dd62 100644
--- a/src/dht/gnunet-service-dht_neighbours.c
+++ b/src/dht/gnunet-service-dht_neighbours.c
@@ -666,7 +666,8 @@ send_find_peer_message (void *cls)
666 NULL, 666 NULL,
667 0, 667 0,
668 "set-seen-size", 668 "set-seen-size",
669 GNUNET_CONTAINER_multipeermap_size (all_connected_peers), 669 GNUNET_CONTAINER_multipeermap_size (
670 all_connected_peers),
670 NULL); 671 NULL);
671 GNUNET_CONTAINER_multipeermap_iterate (all_connected_peers, 672 GNUNET_CONTAINER_multipeermap_iterate (all_connected_peers,
672 &add_known_to_bloom, 673 &add_known_to_bloom,
@@ -1996,14 +1997,45 @@ handle_dht_p2p_put (void *cls,
1996 GNUNET_NO); 1997 GNUNET_NO);
1997 return; 1998 return;
1998 } 1999 }
1999 if (GNUNET_NO ==
2000 GNUNET_BLOCK_check_block (GDS_block_context,
2001 bd.type,
2002 bd.data,
2003 bd.data_size))
2004 { 2000 {
2005 GNUNET_break_op (0); 2001 /* Only call 'check_block' if that keeps our CPU load (from
2006 return; 2002 the cryptography) below 50% on average */
2003 static struct GNUNET_TIME_Relative avg_latency;
2004 static struct GNUNET_TIME_Absolute next_time;
2005
2006 if (GNUNET_TIME_absolute_is_past (next_time))
2007 {
2008 struct GNUNET_TIME_Absolute now
2009 = GNUNET_TIME_absolute_get ();
2010 struct GNUNET_TIME_Relative latency;
2011 struct GNUNET_TIME_Relative delta;
2012
2013 if (GNUNET_NO ==
2014 GNUNET_BLOCK_check_block (GDS_block_context,
2015 bd.type,
2016 bd.data,
2017 bd.data_size))
2018 {
2019 GNUNET_break_op (0);
2020 return;
2021 }
2022 latency = GNUNET_TIME_absolute_get_duration (now);
2023 /* Use *moving average* to estimate check_block latency */
2024 avg_latency
2025 = GNUNET_TIME_relative_divide (
2026 GNUNET_TIME_relative_add (
2027 GNUNET_TIME_relative_multiply (avg_latency,
2028 7),
2029 latency),
2030 8);
2031 /* average delay = 50% of avg_latency => 50% CPU load from crypto (at most) */
2032 delta.rel_value_us
2033 = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
2034 avg_latency.rel_value_us > 0
2035 ? avg_latency.rel_value_us
2036 : 1LLU);
2037 next_time = GNUNET_TIME_relative_to_absolute (delta);
2038 }
2007 } 2039 }
2008 if (! has_path) 2040 if (! has_path)
2009 putlen = 0; 2041 putlen = 0;