authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-09-20 19:30:52 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-09-20 19:30:52 -07:00
loga07c38b8d06036616030520e3839b9052e6332cf
treee83bd7a9537ae9f7ffcd0382c6c096d94f65e5bd
parentef56eae6262d4a1e6c866c47be418755ef2b9108

spall: use a buffered writer for the log


1 files changed, 8 insertions(+), 4 deletions(-)

src/spall.zig+8-4
...@@ -9,6 +9,7 @@ var pid: std.os.linux.pid_t = undefined;...@@ -9,6 +9,7 @@ var pid: std.os.linux.pid_t = undefined;
9threadlocal var tid: std.os.linux.pid_t = undefined;9threadlocal var tid: std.os.linux.pid_t = undefined;
10threadlocal var path: []const u8 = undefined;10threadlocal var path: []const u8 = undefined;
11threadlocal var file: std.fs.File = undefined;11threadlocal var file: std.fs.File = undefined;
12threadlocal var buffered_writer: std.io.BufferedWriter(4096, std.fs.File.Writer) = undefined;
1213
13pub fn init() !void {14pub fn init() !void {
14 pid = std.os.linux.getpid();15 pid = std.os.linux.getpid();
...@@ -23,19 +24,22 @@ pub fn init2() !void {...@@ -23,19 +24,22 @@ pub fn init2() !void {
2324
24 path = try std.fmt.allocPrint(alloc, "/data/trace.{d}.{d}.spall.jsonl", .{ pid, tid });25 path = try std.fmt.allocPrint(alloc, "/data/trace.{d}.{d}.spall.jsonl", .{ pid, tid });
25 file = try std.fs.cwd().createFile(path, .{});26 file = try std.fs.cwd().createFile(path, .{});
26 try file.writer().writeAll("[\n");27 buffered_writer = std.io.bufferedWriter(file.writer());
28
29 try buffered_writer.writer().writeAll("[\n");
27}30}
2831
29pub fn deinit2() void {32pub fn deinit2() void {
30 defer alloc.free(path);33 defer alloc.free(path);
31 defer file.close();34 defer file.close();
3235
33 file.writer().writeAll("]\n") catch {};36 buffered_writer.writer().writeAll("]\n") catch {};
37 buffered_writer.flush() catch {};
34 log.debug("{s}", .{path});38 log.debug("{s}", .{path});
35}39}
3640
37pub inline fn trace_begin(ctx: tracer.Ctx) void {41pub inline fn trace_begin(ctx: tracer.Ctx) void {
38 file.writer().print(42 buffered_writer.writer().print(
39 \\{{"cat":"function", "name":"{s}:{d}:{d} ({s})", "ph": "B", "pid": {d}, "tid": {d}, "ts": {d}}},43 \\{{"cat":"function", "name":"{s}:{d}:{d} ({s})", "ph": "B", "pid": {d}, "tid": {d}, "ts": {d}}},
40 \\44 \\
41 ,45 ,
...@@ -53,7 +57,7 @@ pub inline fn trace_begin(ctx: tracer.Ctx) void {...@@ -53,7 +57,7 @@ pub inline fn trace_begin(ctx: tracer.Ctx) void {
5357
54pub inline fn trace_end(ctx: tracer.Ctx) void {58pub inline fn trace_end(ctx: tracer.Ctx) void {
55 _ = ctx;59 _ = ctx;
56 file.writer().print(60 buffered_writer.writer().print(
57 \\{{"cat":"function", "ph": "E", "pid": {d}, "tid": {d}, "ts": {d}}},61 \\{{"cat":"function", "ph": "E", "pid": {d}, "tid": {d}, "ts": {d}}},
58 \\62 \\
59 ,63 ,