[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101
From: |
Admin |
Subject: |
[libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101 MiB |
Date: |
Fri, 13 Jun 2025 23:38:29 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd2.
commit a71f9dbb60b135bfb3d4950681b89b78e1b8f0db
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
AuthorDate: Fri Jun 13 23:36:03 2025 +0200
perf_replies: added response sizes 8 MiB and 101 MiB
---
src/tools/perf_replies.c | 216 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 207 insertions(+), 9 deletions(-)
diff --git a/src/tools/perf_replies.c b/src/tools/perf_replies.c
index a57e401..2d1a7bd 100644
--- a/src/tools/perf_replies.c
+++ b/src/tools/perf_replies.c
@@ -341,8 +341,10 @@ show_help (void)
printf ("Response body size options (mutually exclusive):\n");
printf (" -E, --empty empty response, 0 bytes\n");
printf (" -T, --tiny tiny response, 3 bytes (default)\n");
- printf (" -M, --medium medium response, 8 KB\n");
- printf (" -L, --large large response, 1 MB\n");
+ printf (" -M, --medium medium response, 8 KiB\n");
+ printf (" -L, --large large response, 1 MiB\n");
+ printf (" -X, --xlarge extra large response, 8 MiB\n");
+ printf (" -J, --jumbo jumbo response, 101 MiB\n");
printf ("\n");
printf ("Response use options (mutually exclusive):\n");
printf (" -S, --shared pool of pre-generated shared response\n"
@@ -384,6 +386,8 @@ struct PerfRepl_parameters
int tiny;
int medium;
int large;
+ int xlarge;
+ int jumbo;
int shared;
int single;
int unique;
@@ -413,6 +417,8 @@ static struct PerfRepl_parameters tool_params = {
0,
0,
0,
+ 0,
+ 0,
0
};
@@ -591,6 +597,18 @@ process_param__empty (const char *param_name)
"with '-L' or '--large'.\n", param_name);
return PERF_RPL_PARAM_ERROR;
}
+ if (tool_params.xlarge)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-X' or '--xlarge'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.jumbo)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-J' or '--jumbo'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
tool_params.empty = ! 0;
return '-' == param_name[1] ?
PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
@@ -618,6 +636,18 @@ process_param__tiny (const char *param_name)
"with '-L' or '--large'.\n", param_name);
return PERF_RPL_PARAM_ERROR;
}
+ if (tool_params.xlarge)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-X' or '--xlarge'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.jumbo)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-J' or '--jumbo'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
tool_params.tiny = ! 0;
return '-' == param_name[1] ?
PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
@@ -645,6 +675,18 @@ process_param__medium (const char *param_name)
"with '-L' or '--large'.\n", param_name);
return PERF_RPL_PARAM_ERROR;
}
+ if (tool_params.xlarge)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-X' or '--xlarge'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.jumbo)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-J' or '--jumbo'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
tool_params.medium = ! 0;
return '-' == param_name[1] ?
PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
@@ -672,12 +714,102 @@ process_param__large (const char *param_name)
"with '-M' or '--medium'.\n", param_name);
return PERF_RPL_PARAM_ERROR;
}
+ if (tool_params.xlarge)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-X' or '--xlarge'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.jumbo)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-J' or '--jumbo'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
tool_params.large = ! 0;
return '-' == param_name[1] ?
PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
}
+static enum PerfRepl_param_result
+process_param__xlarge (const char *param_name)
+{
+ if (tool_params.empty)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-E' or '--empty'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.tiny)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-T' or '--tiny'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.medium)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-M' or '--medium'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.large)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-L' or '--large'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.jumbo)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-J' or '--jumbo'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ tool_params.xlarge = ! 0;
+ return '-' == param_name[1] ?
+ PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
+}
+
+
+static enum PerfRepl_param_result
+process_param__jumbo (const char *param_name)
+{
+ if (tool_params.empty)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-E' or '--empty'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.tiny)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-T' or '--tiny'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.medium)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-M' or '--medium'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.large)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-L' or '--large'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ if (tool_params.xlarge)
+ {
+ fprintf (stderr, "Parameter '%s' cannot be used together "
+ "with '-X' or '--xlarge'.\n", param_name);
+ return PERF_RPL_PARAM_ERROR;
+ }
+ tool_params.jumbo = ! 0;
+ return '-' == param_name[1] ?
+ PERF_RPL_PARAM_FULL_STR :PERF_RPL_PARAM_ONE_CHAR;
+}
+
+
static enum PerfRepl_param_result
process_param__shared (const char *param_name)
{
@@ -864,6 +996,10 @@ process_short_param (const char *param, const char
*next_param)
return process_param__medium ("-M");
else if ('L' == param_chr)
return process_param__large ("-L");
+ else if ('X' == param_chr)
+ return process_param__xlarge ("-X");
+ else if ('J' == param_chr)
+ return process_param__jumbo ("-J");
else if ('S' == param_chr)
return process_param__shared ("-S");
else if ('I' == param_chr)
@@ -956,6 +1092,12 @@ process_long_param (const char *param, const char
*next_param)
else if ((mhd_SSTR_LEN ("large") == param_len) &&
(0 == memcmp (param, "large", mhd_SSTR_LEN ("large"))))
return process_param__large ("--large");
+ else if ((mhd_SSTR_LEN ("xlarge") == param_len) &&
+ (0 == memcmp (param, "xlarge", mhd_SSTR_LEN ("xlarge"))))
+ return process_param__xlarge ("--xlarge");
+ else if ((mhd_SSTR_LEN ("jumbo") == param_len) &&
+ (0 == memcmp (param, "jumbo", mhd_SSTR_LEN ("jumbo"))))
+ return process_param__jumbo ("--jumbo");
else if ((mhd_SSTR_LEN ("shared") == param_len) &&
(0 == memcmp (param, "shared", mhd_SSTR_LEN ("shared"))))
return process_param__shared ("--shared");
@@ -1217,10 +1359,10 @@ check_param__select (void)
static void
-check_param__empty_tiny_medium_large (void)
+check_param__empty_tiny_medium_large_xlarge_jumbo (void)
{
if (0 == (tool_params.empty | tool_params.tiny | tool_params.medium
- | tool_params.large))
+ | tool_params.large | tool_params.xlarge | tool_params.jumbo))
tool_params.tiny = ! 0;
}
@@ -1283,7 +1425,7 @@ check_apply_params (void)
return PERF_RPL_ERR_CODE_BAD_PARAM;
if (! check_param__select ())
return PERF_RPL_ERR_CODE_BAD_PARAM;
- check_param__empty_tiny_medium_large ();
+ check_param__empty_tiny_medium_large_xlarge_jumbo ();
check_param__shared_single_unique ();
if (! check_param__connections ())
return PERF_RPL_ERR_CODE_BAD_PARAM;
@@ -1291,6 +1433,29 @@ check_apply_params (void)
}
+static uint_fast64_t
+mini_rnd (void)
+{
+ /* Simple xoshiro256+ implementation */
+ static uint_fast64_t s[4] = {
+ 0x76e15d3efefdcbbfuLL, 0xc5004e441c522fb3uLL,
+ 0x77710069854ee241uLL, 0x39109bb02acbe635uLL
+ }; /* Good enough for static initialisation */
+
+ const uint_fast64_t ret = (s[0] + s[3]) & 0xFFFFFFFFFFFFFFFFuLL;
+ const uint_fast64_t t = (s[1] << 17) & 0xFFFFFFFFFFFFFFFFuLL;
+
+ s[2] ^= s[0];
+ s[3] ^= s[1];
+ s[1] ^= s[2];
+ s[0] ^= s[3];
+ s[2] ^= t;
+ s[3] = ((s[3] << 45u) | (s[3] << (64u - 45u))) & 0xFFFFFFFFFFFFFFFFuLL;
+
+ return ret;
+}
+
+
/* The pool of shared responses */
static struct MHD_Response **resps = NULL;
static unsigned int num_resps = 0;
@@ -1315,7 +1480,7 @@ init_response_body_data (void)
fprintf (stderr, "Failed to allocate memory.\n");
return 0;
}
- if (tool_params.medium)
+ if (16u * 1024u >= body_dyn_size)
{
/* Fill the body with HTML-like content */
size_t pos;
@@ -1343,13 +1508,38 @@ init_response_body_data (void)
pos += filler_pos;
memcpy (body_dyn + pos, body_footer, mhd_SSTR_LEN (body_footer));
}
- else
+ else if (2u * 1024u * 1024u >= body_dyn_size)
{
/* Fill the body with binary-like content */
size_t pos;
for (pos = 0; pos < body_dyn_size; ++pos)
body_dyn[pos] = (char) (unsigned char) (255U - pos % 256U);
}
+ else
+ {
+ /* Fill the body with pseudo-random binary-like content */
+ size_t pos;
+ uint_fast64_t rnd_data;
+ for (pos = 0; pos < body_dyn_size - body_dyn_size % 8;
+ pos += 8)
+ {
+ rnd_data = mini_rnd ();
+ body_dyn[pos + 0] = (char) (unsigned char) (rnd_data >> 0);
+ body_dyn[pos + 1] = (char) (unsigned char) (rnd_data >> 8);
+ body_dyn[pos + 2] = (char) (unsigned char) (rnd_data >> 16);
+ body_dyn[pos + 3] = (char) (unsigned char) (rnd_data >> 24);
+ body_dyn[pos + 4] = (char) (unsigned char) (rnd_data >> 32);
+ body_dyn[pos + 5] = (char) (unsigned char) (rnd_data >> 40);
+ body_dyn[pos + 6] = (char) (unsigned char) (rnd_data >> 48);
+ body_dyn[pos + 7] = (char) (unsigned char) (rnd_data >> 54);
+ }
+ rnd_data = mini_rnd ();
+ for ((void) pos; pos < body_dyn_size; ++pos)
+ {
+ body_dyn[pos] = (char) (unsigned char) (rnd_data);
+ rnd_data >>= 8u;
+ }
+ }
}
return ! 0;
}
@@ -1392,6 +1582,10 @@ init_data (void)
body_dyn_size = 8U * 1024U;
else if (tool_params.large)
body_dyn_size = 1024U * 1024U;
+ else if (tool_params.xlarge)
+ body_dyn_size = 8U * 1024U * 1024U;
+ else if (tool_params.jumbo)
+ body_dyn_size = 101U * 1024U * 1024U;
else
body_dyn_size = 0;
@@ -1736,9 +1930,13 @@ get_mhd_response_size (void)
else if (tool_params.tiny)
return "3 bytes (tiny)";
else if (tool_params.medium)
- return "8 KB (medium)";
+ return "8 KiB (medium)";
else if (tool_params.large)
- return "1 MB (large)";
+ return "1 MiB (large)";
+ else if (tool_params.xlarge)
+ return "8 MiB (xlarge)";
+ else if (tool_params.jumbo)
+ return "101 MiB (jumbo)";
return "!!internal error!!";
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [libmicrohttpd2] branch master updated (cdd4c1f -> a71f9db), Admin, 2025/06/13
- [libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encoding, Admin, 2025/06/13
- [libmicrohttpd2] 11/21: mhd_str: optimised caseless comparisons and case transformations, Admin, 2025/06/13
- [libmicrohttpd2] 13/21: parse_http_std_method(): optimised, Admin, 2025/06/13
- [libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101 MiB,
Admin <=
- [libmicrohttpd2] 02/21: bootstrap: make sure that pre-commit hook really used, Admin, 2025/06/13
- [libmicrohttpd2] 01/21: conn_data_send.c: fixed large sending, added some asserts, Admin, 2025/06/13
- [libmicrohttpd2] 04/21: xdigittovalue(): optimised., Admin, 2025/06/13
- [libmicrohttpd2] 18/21: Renamed test_postprocessor -> test_postparser to match API naming, Admin, 2025/06/13
- [libmicrohttpd2] 16/21: configure: minor check improvement, Admin, 2025/06/13
- [libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW locks (and minor improvements), Admin, 2025/06/13
- [libmicrohttpd2] 10/21: configure: added release build linker flags, Admin, 2025/06/13
- [libmicrohttpd2] 15/21: POST parser: improved parsing performance by storing complete delimiter instead of boundary, Admin, 2025/06/13
- [libmicrohttpd2] 14/21: POST parser: optimised large upload processing, Admin, 2025/06/13
- [libmicrohttpd2] 07/21: daemon_start: cosmetics, fixed code style, Admin, 2025/06/13