Skip to content

Commit

Permalink
MINOR: stream/stats: Expose the total number of streams ever created …
Browse files Browse the repository at this point in the history
…in stats

A shared counter is added in the thread context to track the total number of
streams created on the thread. This number is then reported in stats. It
will be a useful information to diagnose some bugs.
  • Loading branch information
capflam committed Sep 30, 2024
1 parent 18ee22f commit 273d322
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 3 deletions.
1 change: 1 addition & 0 deletions include/haproxy/stats-t.h
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ enum stat_idx_info {
ST_I_INF_BOOTTIME_MS,
ST_I_INF_NICED_TASKS,
ST_I_INF_CURR_STRM,
ST_I_INF_CUM_STRM,

/* must always be the last one */
ST_I_INF_MAX
Expand Down
3 changes: 2 additions & 1 deletion include/haproxy/tinfo-t.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,10 @@ struct thread_ctx {
unsigned long long out_bytes; /* total #of bytes emitted */
unsigned long long spliced_out_bytes; /* total #of bytes emitted though a kernel pipe */
struct buffer *thread_dump_buffer; /* NULL out of dump, valid during a dump, 0x01 once done */
unsigned long long total_streams; /* Total number of streams created on this thread */
unsigned int stream_cnt; /* Number of streams attached to this thread */

// around 52 bytes here for shared variables
// around 44 bytes here for shared variables

ALWAYS_ALIGN(128);
};
Expand Down
7 changes: 5 additions & 2 deletions src/stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ const struct name_desc stat_cols_info[ST_I_INF_MAX] = {
[ST_I_INF_BOOTTIME_MS] = { .name = "BootTime_ms", .desc = "How long ago it took to parse and process the config before being ready (milliseconds)" },
[ST_I_INF_NICED_TASKS] = { .name = "Niced_tasks", .desc = "Total number of active tasks+tasklets in the current worker process (Run_queue) that are niced" },
[ST_I_INF_CURR_STRM] = { .name = "CurrStreams", .desc = "Current number of streams on this worker process" },
[ST_I_INF_CUM_STRM] = { .name = "CurrStreams", .desc = "Total number of streams created on this worker process since started" },
};

/* one line of info */
Expand Down Expand Up @@ -692,7 +693,7 @@ static int stats_dump_typed_info_fields(struct buffer *out,
int stats_fill_info(struct field *line, int len, uint flags)
{
struct buffer *out = get_trash_chunk();
uint64_t glob_out_bytes, glob_spl_bytes, glob_out_b32, glob_curr_strms;
uint64_t glob_out_bytes, glob_spl_bytes, glob_out_b32, glob_curr_strms, glob_cum_strms;
uint up_sec, up_usec;
ullong up;
ulong boot;
Expand All @@ -708,12 +709,13 @@ int stats_fill_info(struct field *line, int len, uint flags)
#endif

/* sum certain per-thread totals (mostly byte counts) */
glob_out_bytes = glob_spl_bytes = glob_out_b32 = glob_curr_strms = 0;
glob_out_bytes = glob_spl_bytes = glob_out_b32 = glob_curr_strms = glob_cum_strms = 0;
for (thr = 0; thr < global.nbthread; thr++) {
glob_out_bytes += HA_ATOMIC_LOAD(&ha_thread_ctx[thr].out_bytes);
glob_spl_bytes += HA_ATOMIC_LOAD(&ha_thread_ctx[thr].spliced_out_bytes);
glob_out_b32 += read_freq_ctr(&ha_thread_ctx[thr].out_32bps);
glob_curr_strms+= HA_ATOMIC_LOAD(&ha_thread_ctx[thr].stream_cnt);
glob_cum_strms += HA_ATOMIC_LOAD(&ha_thread_ctx[thr].total_streams);
}
glob_out_b32 *= 32; // values are 32-byte units

Expand Down Expand Up @@ -820,6 +822,7 @@ int stats_fill_info(struct field *line, int len, uint flags)
line[ST_I_INF_BOOTTIME_MS] = mkf_u32(FN_DURATION, boot);
line[ST_I_INF_NICED_TASKS] = mkf_u32(0, total_niced_running_tasks());
line[ST_I_INF_CURR_STRM] = mkf_u64(0, glob_curr_strms);
line[ST_I_INF_CUM_STRM] = mkf_u64(0, glob_cum_strms);

return 1;
}
Expand Down
1 change: 1 addition & 0 deletions src/stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,7 @@ struct stream *stream_new(struct session *sess, struct stconn *sc, struct buffer
s->tunnel_timeout = TICK_ETERNITY;

LIST_APPEND(&th_ctx->streams, &s->list);
_HA_ATOMIC_INC(&th_ctx->total_streams);
_HA_ATOMIC_INC(&th_ctx->stream_cnt);

if (flt_stream_init(s) < 0 || flt_stream_start(s) < 0)
Expand Down

0 comments on commit 273d322

Please sign in to comment.