Missing io_handles
recorder2otf2 fails with e.g. the following trace: ior-hard-write
Traceback (most recent call last):
File "/home/soeste/projects/recorder2otf2/./recorder_to_otf2.py", line 136, in <module>
main()
File "/home/soeste/projects/recorder2otf2/./recorder_to_otf2.py", line 132, in main
write_otf2_trace(fp_in, fp_out, timer_res)
File "/home/soeste/projects/recorder2otf2/./recorder_to_otf2.py", line 82, in write_otf2_trace
raise ValueError(f"No io_handle for file {event.path_name} in {io_handles}")
ValueError: No io_handle for file /beegfs/.global0/ws/soeste-io-recorder/datafiles/ior-hard/file in {'/sys/devices/system/node/node0/meminfo': IoHandle [0] '/sys/devices/system/node/node0/meminfo', '/beegfs/ws/0/soeste-io-recorder/datafiles/ior-hard/file': IoHandle [1] '/beegfs/ws/0/soeste-io-recorder/datafiles/ior-hard/file'}
The Exception fired in the traceback was introduced by myself for demonstration purposes.
Running with the version from the main branch results in an exception from the python otf2 layer because None
is passed as io_handle
to the otf2 writer routines.
The basic problem is that there is no io_handle in your dict for /beegfs/.global0/ws/soeste-io-recorder/datafiles/ior-hard/file
but there is one for /beegfs/ws/0/soeste-io-recorder/datafiles/ior-hard/file
which is actually the same file.
/beegfs/ws/0/
is simply a symlink to /beegfs/.global0/ws
.
But it seems that recorder store both types of arguments in its traces, so we need some way to handle this.
Please investigate possible strategies for that.