Skip to content

Commit 1e2a6ed

Browse files
committed
lightningd: use static buffer for common log path.
This speeds logging slightly, but most of the time is actually spent in fflush() (which we need). Result (10 runs, eatmydata): FAILED tests/test_connection.py::test_bench - assert 24.086638-25.347475(24.6901+/-0.4) == 0 This is an 8% performance improvement (over the entire series), which is not bad. Signed-off-by: Rusty Russell <[email protected]>
1 parent bd0f333 commit 1e2a6ed

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

lightningd/log.c

+17-6
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,13 @@ static void log_to_files(const char *log_prefix,
208208
{
209209
char tstamp[sizeof("YYYY-mm-ddTHH:MM:SS.nnnZ ")];
210210
char *entry, nodestr[hex_str_size(PUBKEY_CMPR_LEN)];
211+
char buf[sizeof("%s%s%s %s-%s: %s\n")
212+
+ strlen(log_prefix)
213+
+ sizeof(tstamp)
214+
+ strlen(level_prefix(level))
215+
+ sizeof(nodestr)
216+
+ strlen(entry_prefix)
217+
+ strlen(str)];
211218
bool filtered;
212219

213220
if (print_timestamps) {
@@ -235,14 +242,18 @@ static void log_to_files(const char *log_prefix,
235242
entry_prefix, str, dir, hex);
236243
tal_free(hex);
237244
} else {
245+
size_t len;
246+
entry = buf;
238247
if (!node_id)
239-
entry = tal_fmt(tmpctx, "%s%s%s %s: %s\n",
240-
log_prefix, tstamp, level_prefix(level), entry_prefix, str);
248+
len = snprintf(buf, sizeof(buf),
249+
"%s%s%s %s: %s\n",
250+
log_prefix, tstamp, level_prefix(level), entry_prefix, str);
241251
else
242-
entry = tal_fmt(tmpctx, "%s%s%s %s-%s: %s\n",
243-
log_prefix, tstamp, level_prefix(level),
244-
nodestr,
245-
entry_prefix, str);
252+
len = snprintf(buf, sizeof(buf), "%s%s%s %s-%s: %s\n",
253+
log_prefix, tstamp, level_prefix(level),
254+
nodestr,
255+
entry_prefix, str);
256+
assert(len < sizeof(buf));
246257
}
247258

248259
/* In complex configurations, we tell loggers to overshare: then we

0 commit comments

Comments
 (0)