aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulius Bünger <buenger@mytum.de>2015-01-22 23:08:42 +0000
committerJulius Bünger <buenger@mytum.de>2015-01-22 23:08:42 +0000
commitbffe57690709d934d5b7b0013607d561628e3a25 (patch)
treef75f6fed5ab82eabead1ad1c6d68294c03bdb252 /src
parentcb0c0d02486a041fb0f04f1b1f6f85c5f8d329f6 (diff)
downloadgnunet-bffe57690709d934d5b7b0013607d561628e3a25.tar.gz
gnunet-bffe57690709d934d5b7b0013607d561628e3a25.zip
moved the client request rate estimation in fkt of its own
Diffstat (limited to 'src')
-rw-r--r--src/rps/gnunet-service-rps.c70
1 files changed, 44 insertions, 26 deletions
diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c
index 58c986247..278276aff 100644
--- a/src/rps/gnunet-service-rps.c
+++ b/src/rps/gnunet-service-rps.c
@@ -683,6 +683,7 @@ insert_in_sampler (void *cls, const struct GNUNET_PeerIdentity *peer)
683 RPS_sampler_update_list (peer); 683 RPS_sampler_update_list (peer);
684} 684}
685 685
686
686/** 687/**
687 * Check whether #insert_in_sampler was already scheduled 688 * Check whether #insert_in_sampler was already scheduled
688 */ 689 */
@@ -725,6 +726,45 @@ resize_wrapper ()
725} 726}
726 727
727 728
729/**
730 * Estimate request rate
731 *
732 * Called every time we receive a request from the client.
733 */
734 void
735est_request_rate()
736{
737 struct GNUNET_TIME_Relative max_round_duration;
738
739 if (request_deltas_size > req_counter)
740 req_counter++;
741 if ( 1 < req_counter)
742 {
743 /* Shift last request deltas to the right */
744 memcpy (&request_deltas[1],
745 request_deltas,
746 (req_counter - 1) * sizeof (struct GNUNET_TIME_Relative));
747
748 /* Add current delta to beginning */
749 request_deltas[0] = GNUNET_TIME_absolute_get_difference (last_request,
750 GNUNET_TIME_absolute_get ());
751 request_rate = T_relative_avg (request_deltas, req_counter);
752
753 /* Compute the duration a round will maximally take */
754 max_round_duration = GNUNET_TIME_relative_add (round_interval,
755 GNUNET_TIME_relative_divide (round_interval, 2));
756
757 /* Set the estimated size the sampler has to have to
758 * satisfy the current client request rate */
759 sampler_size_client_need = max_round_duration.rel_value_us / request_rate.rel_value_us;
760
761 /* Resize the sampler */
762 resize_wrapper ();
763 }
764 last_request = GNUNET_TIME_absolute_get ();
765}
766
767
728/*********************************************************************** 768/***********************************************************************
729 * /Util functions 769 * /Util functions
730***********************************************************************/ 770***********************************************************************/
@@ -812,37 +852,15 @@ handle_client_request (void *cls,
812{ 852{
813 struct GNUNET_RPS_CS_RequestMessage *msg; 853 struct GNUNET_RPS_CS_RequestMessage *msg;
814 uint32_t num_peers; 854 uint32_t num_peers;
815 struct GNUNET_TIME_Relative max_round_duration; 855 uint32_t i;
816
817
818 /* Estimate request rate */
819 if (request_deltas_size > req_counter)
820 req_counter++;
821 if ( 1 < req_counter)
822 {
823 /* Shift last request deltas to the right */
824 memcpy (&request_deltas[1],
825 request_deltas,
826 (req_counter - 1) * sizeof (struct GNUNET_TIME_Relative));
827 /* Add current delta to beginning */
828 request_deltas[0] = GNUNET_TIME_absolute_get_difference (last_request,
829 GNUNET_TIME_absolute_get ());
830 request_rate = T_relative_avg (request_deltas, req_counter);
831
832 max_round_duration = GNUNET_TIME_relative_add (round_interval,
833 GNUNET_TIME_relative_divide (round_interval, 2));
834 sampler_size_client_need = max_round_duration.rel_value_us / request_rate.rel_value_us;
835
836 resize_wrapper ();
837 }
838 last_request = GNUNET_TIME_absolute_get ();
839
840 856
841 // TODO check message size
842 msg = (struct GNUNET_RPS_CS_RequestMessage *) message; 857 msg = (struct GNUNET_RPS_CS_RequestMessage *) message;
843 858
844 num_peers = ntohl (msg->num_peers); 859 num_peers = ntohl (msg->num_peers);
845 860
861 for (i = 0 ; i < num_peers ; i++)
862 est_request_rate();
863
846 LOG (GNUNET_ERROR_TYPE_DEBUG, "Client requested %" PRIX32 " random peer(s).\n", num_peers); 864 LOG (GNUNET_ERROR_TYPE_DEBUG, "Client requested %" PRIX32 " random peer(s).\n", num_peers);
847 865
848 RPS_sampler_get_n_rand_peers (client_respond, client, num_peers, GNUNET_YES); 866 RPS_sampler_get_n_rand_peers (client_respond, client, num_peers, GNUNET_YES);