aboutsummaryrefslogtreecommitdiff
path: root/src/util/benchmark.c
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-08-18 02:29:14 +0200
committerFlorian Dold <florian.dold@gmail.com>2018-08-18 02:29:14 +0200
commitadc9f7dc9978dd38d14c925e3e38d658f9300753 (patch)
treefe7add757b1221ec4e580cfdd52375017eb96593 /src/util/benchmark.c
parentf9c7588373cb3a047345e68377158965d8e8d08a (diff)
downloadgnunet-adc9f7dc9978dd38d14c925e3e38d658f9300753.tar.gz
gnunet-adc9f7dc9978dd38d14c925e3e38d658f9300753.zip
URL benchmarking
Diffstat (limited to 'src/util/benchmark.c')
-rw-r--r--src/util/benchmark.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/util/benchmark.c b/src/util/benchmark.c
index 4a0c9b7c8..421cafbef 100644
--- a/src/util/benchmark.c
+++ b/src/util/benchmark.c
@@ -71,6 +71,33 @@ write_benchmark_data (struct BenchmarkData *bd)
71 GNUNET_free (s); 71 GNUNET_free (s);
72 72
73 GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh)); 73 GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh));
74
75 GNUNET_asprintf (&s, "gnunet-benchmark-urls-%llu-%llu.txt",
76 (unsigned long long) pid,
77 (unsigned long long) tid);
78
79 fh = GNUNET_DISK_file_open (s,
80 (GNUNET_DISK_OPEN_WRITE |
81 GNUNET_DISK_OPEN_TRUNCATE |
82 GNUNET_DISK_OPEN_CREATE),
83 (GNUNET_DISK_PERM_USER_READ |
84 GNUNET_DISK_PERM_USER_WRITE));
85 GNUNET_assert (NULL != fh);
86 GNUNET_free (s);
87
88 for (unsigned int i = 0; i < bd->urd_len; i++)
89 {
90 struct UrlRequestData *urd = &bd->urd[i];
91 GNUNET_asprintf (&s, "url %s count %lld time_us %lld\n",
92 urd->request_url,
93 (unsigned long long) urd->count,
94 (unsigned long long) urd->time.rel_value_us);
95 GNUNET_assert (GNUNET_SYSERR != GNUNET_DISK_file_write_blocking (fh, s, strlen (s)));
96 GNUNET_free (s);
97 }
98
99
100 GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh));
74} 101}
75 102
76 103
@@ -142,3 +169,43 @@ get_benchmark_data (void)
142 } 169 }
143 return bd; 170 return bd;
144} 171}
172
173
174/**
175 * Get benchmark data for a URL. If the URL is too long, it's truncated
176 * before looking up the correspoding benchmark data.
177 *
178 * @param url url to get request data for
179 */
180struct UrlRequestData *
181get_url_benchmark_data (char *url)
182{
183 char trunc[MAX_BENCHMARK_URL_LEN];
184 struct BenchmarkData *bd;
185
186 memcpy (trunc, url, MAX_BENCHMARK_URL_LEN);
187 trunc[MAX_BENCHMARK_URL_LEN - 1] = 0;
188
189 bd = get_benchmark_data ();
190
191 for (unsigned int i = 0; i < bd->urd_len; i++)
192 {
193 if (0 == strcmp (trunc, bd->urd[i].request_url))
194 return &bd->urd[i];
195 }
196
197 {
198 struct UrlRequestData urd = { 0 };
199
200 memcpy (&urd.request_url, trunc, MAX_BENCHMARK_URL_LEN);
201
202 if (bd->urd_len == bd->urd_capacity)
203 {
204 bd->urd_capacity = 2 * (bd->urd_capacity + 1);
205 bd->urd = GNUNET_realloc (bd->urd, bd->urd_capacity * sizeof (struct UrlRequestData));
206 }
207
208 bd->urd[bd->urd_len++] = urd;
209 return &bd->urd[bd->urd_len - 1];
210 }
211}