diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-08-18 02:29:14 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-08-18 02:29:14 +0200 |
commit | adc9f7dc9978dd38d14c925e3e38d658f9300753 (patch) | |
tree | fe7add757b1221ec4e580cfdd52375017eb96593 /src/util/benchmark.c | |
parent | f9c7588373cb3a047345e68377158965d8e8d08a (diff) | |
download | gnunet-adc9f7dc9978dd38d14c925e3e38d658f9300753.tar.gz gnunet-adc9f7dc9978dd38d14c925e3e38d658f9300753.zip |
URL benchmarking
Diffstat (limited to 'src/util/benchmark.c')
-rw-r--r-- | src/util/benchmark.c | 67 |
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 | */ | ||
180 | struct UrlRequestData * | ||
181 | get_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 | } | ||