janestreet / janestreet/memtrace_viewer

monitor.ml.Error malformed trace when opening trace files

Open
#16 1 comment 1 reaction 0 assignees View on GitHub
forwarded-to-js-devs
Dominant language
OCaml
Stars
35
Forks
9
PR merge metrics
No merged PRs in 30d

Description

Hi, I created trace files for my own OCaml application, but am unable to open the larger trace files in `memtrace-viewer` due to the following error:
```
$ memtrace-viewer malformed_trace_Monotone_packet_timestamps.ctf
Processing malformed_trace_Monotone_packet_timestamps.ctf...
(monitor.ml.Error ("malformed trace: Monotone packet timestamps")
("Raised at Memtrace__Trace.bad_format in file \"src/trace.ml\", line 22, characters 34-55"
"Called from Memtrace__Trace.check_fmt in file \"src/trace.ml\" (inlined), line 24, characters 34-46"
"Called from Memtrace__Trace.get_ctf_header in file \"src/trace.ml\", line 142, characters 2-65"
"Called from Memtrace__Trace.iter.iter_packets in file \"src/trace.ml\", line 726, characters 6-75"
"Called from Memtrace_viewer_native__Raw_trace.iter in file \"server/src/raw_trace.ml\", line 89, characters 2-217"
"Called from Memtrace_viewer_native__Filtered_trace.iter_and_return_interpreter in file \"server/src/filtered_trace.ml\", line 762, characters 2-117"
"Called from Memtrace_viewer_native__Filtered_trace.iter in file \"server/src/filtered_trace.ml\" (inlined), line 768, characters 20-82"
"Called from Memtrace_viewer_native__Graph.full_graph_and_max_time in file \"server/src/graph.ml\", line 12, characters 2-521"
"Called from Memtrace_viewer_native__Graph.build in file \"server/src/graph.ml\", line 57, characters 29-59"
"Called from Memtrace_viewer_native__User_state.Env.of_trace in file \"server/src/user_state.ml\", line 38, characters 16-66"
"Called from Memtrace_viewer_native.main in file \"server/src/memtrace_viewer_native.ml\", line 66, characters 12-41"))
```
The application of which the above trace was created for ran for 58s and peaked at 600MB of live memory according to `time`.

I ran the same application but modified, which ran for 76s and peaked at 11GB of live memory and had a different error when trying to open it in `memtrace-viewer`:
```
$ memtrace-viewer malformed_trace_time_in_packet_bounds.ctf
Processing malformed_trace_time_in_packet_bounds.ctf...
(monitor.ml.Error ("malformed trace: time in packet bounds")
("Raised at Memtrace__Trace.bad_format in file \"src/trace.ml\", line 22, characters 34-55"
"Called from Memtrace__Trace.check_fmt in file \"src/trace.ml\" (inlined), line 24, characters 34-46"
"Called from Memtrace__Trace.get_event_header in file \"src/trace.ml\" (inlined), line 215, characters 2-90"
"Called from Memtrace__Trace.iter.iter_events_of_packet in file \"src/trace.ml\", line 686, characters 23-55"
"Called from Memtrace__Trace.iter.iter_packets in file \"src/trace.ml\", line 738, characters 8-50"
"Called from Memtrace_viewer_native__Raw_trace.iter in file \"server/src/raw_trace.ml\", line 89, characters 2-217"
"Called from Memtrace_viewer_native__Filtered_trace.iter_and_return_interpreter in file \"server/src/filtered_trace.ml\", line 762, characters 2-117"
"Called from Memtrace_viewer_native__Filtered_trace.iter in file \"server/src/filtered_trace.ml\" (inlined), line 768, characters 20-82"
"Called from Memtrace_viewer_native__Graph.full_graph_and_max_time in file \"server/src/graph.ml\", line 12, characters 2-521"
"Called from Memtrace_viewer_native__Graph.build in file \"server/src/graph.ml\", line 57, characters 29-59"
"Called from Memtrace_viewer_native__User_state.Env.of_trace in file \"server/src/user_state.ml\", line 38, characters 16-66"
"Called from Memtrace_viewer_native.main in file \"server/src/memtrace_viewer_native.ml\", line 66, characters 12-41"))
```

I provide the trace files in [traces.tar.gz](https://github.com/user-attachments/files/19978268/traces.tar.gz)

I also include `smaller.ctf` that I could view in `memtrace-viewer`, created for the same application but when run on a smaller input dataset, running in 15s and peaking with 1.2GB live memory.

For reference, I created the trace files using https://github.com/tmcgilchrist/memtrace.git#5_1_statmemprof

Contributor guide

Open the contributing guide

Research direction

Start with the format checks in src/trace.ml, especially bad_format and the checks reported at lines 142 and 215. Reproduce the failures with the attached traces and compare them with smaller.ctf, then trace the callers through server/src/raw_trace.ml. Done means the supplied larger traces can be opened, or the malformed-input behavior is clearly diagnosed and covered.

Written by the indexing model from the issue text.

Assessment

Tech stack
ocaml
Domain
observability-sre, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.