add bytes recv/sent to URL request benchmarking
authorFlorian Dold <florian.dold@gmail.com>
Thu, 28 Feb 2019 17:13:49 +0000 (18:13 +0100)
committerFlorian Dold <florian.dold@gmail.com>
Thu, 28 Feb 2019 17:13:58 +0000 (18:13 +0100)
src/curl/curl.c
src/util/benchmark.c
src/util/benchmark.h

index e413d1cf560835092e7cf3450710c8e4c0353b9d..10475fe2e74c91f5d0da62fc2a6bc74bfd98a21c 100644 (file)
@@ -489,15 +489,60 @@ GNUNET_CURL_perform2 (struct GNUNET_CURL_Context *ctx,
     double total_as_double = 0;
     struct GNUNET_TIME_Relative total;
     struct UrlRequestData *urd;
-    CURLcode res;
-    res = curl_easy_getinfo (cmsg->easy_handle, CURLINFO_TOTAL_TIME, &total_as_double);
-    GNUNET_break (CURLE_OK == res);
-    curl_easy_getinfo (cmsg->easy_handle, CURLINFO_EFFECTIVE_URL, &url);
+    /* Some care required, as curl is using data types (long vs curl_off_t vs
+     * double) inconsistently to store byte count. */
+    curl_off_t size_curl = 0;
+    long size_long = 0;
+    uint64_t bytes_sent = 0;
+    uint64_t bytes_received = 0;
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_TOTAL_TIME,
+                                     &total_as_double));
     total.rel_value_us = total_as_double * 1000 * 1000;
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_EFFECTIVE_URL,
+                                     &url));
+
+    /* HEADER_SIZE + SIZE_DOWNLOAD_T is hopefully the total
+       number of bytes received, not clear from curl docs. */
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_HEADER_SIZE,
+                                     &size_long));
+    bytes_received += size_long;
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_SIZE_DOWNLOAD_T,
+                                     &size_curl));
+    bytes_received += size_curl;
+
+    /* REQUEST_SIZE + SIZE_UPLOAD_T is hopefully the total number of bytes
+       sent, again docs are not completely clear. */
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_REQUEST_SIZE,
+                                     &size_long));
+    bytes_sent += size_long;
+
+    GNUNET_break (CURLE_OK ==
+                  curl_easy_getinfo (cmsg->easy_handle,
+                                     CURLINFO_SIZE_UPLOAD_T,
+                                     &size_curl));
+    bytes_sent += size_curl;
+
     urd = get_url_benchmark_data (url, (unsigned int) response_code);
     urd->count++;
     urd->time = GNUNET_TIME_relative_add (urd->time, total);
     urd->time_max = GNUNET_TIME_relative_max (total, urd->time_max);
+    urd->bytes_sent = bytes_sent;
+    urd->bytes_received = bytes_received;
   }
 #endif
     job->jcc (job->jcc_cls,
index bb1c3c79af1e1f57f769249fbcf8b0c36d14c7f4..caf6cd64a45f97757985846484b70249e7b2e75a 100644 (file)
@@ -137,12 +137,14 @@ write_benchmark_data (struct BenchmarkData *bd)
   for (unsigned int i = 0; i < bd->urd_len; i++)
   {
     struct UrlRequestData *urd = &bd->urd[i];
-    GNUNET_asprintf (&s, "url %s status %u count %llu time_us %llu time_us_max %llu\n",
+    GNUNET_asprintf (&s, "url %s status %u count %llu time_us %llu time_us_max %llu bytes_sent %llu bytes_received %llu\n",
                      urd->request_url,
                      urd->status,
                      (unsigned long long) urd->count,
                      (unsigned long long) urd->time.rel_value_us,
-                     (unsigned long long) urd->time_max.rel_value_us);
+                     (unsigned long long) urd->time_max.rel_value_us,
+                     (unsigned long long) urd->bytes_sent,
+                     (unsigned long long) urd->bytes_received);
     GNUNET_assert (GNUNET_SYSERR != GNUNET_DISK_file_write_blocking (fh, s, strlen (s)));
     GNUNET_free (s);
   }
index 36f57febe33e551136f33694e1a8df320f08e5e2..4148ac6555b521f9c1cd00ef74fe1608aa2197f8 100644 (file)
@@ -75,6 +75,16 @@ struct UrlRequestData
    */
   uint64_t count;
 
+  /**
+   * How many bytes were sent in total to request the URL.
+   */
+  uint64_t bytes_sent;
+
+  /**
+   * How many bytes were received in total as response to requesting this URL.
+   */
+  uint64_t bytes_received;
+
   /**
    * Total time spent requesting this URL.
    */