-
Couldn't load subscription status.
- Fork 36
pthread id support in DXT #1066
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
Hi, @orcunyildiz One of the pydarshan CI tasks failed. The error messages mentioned https://github.com/darshan-hpc/darshan/actions/runs/16977498309/job/48130008025 Could you please take a look? |
|
The reason that some CI tests are failing because those tests are using old DXT records that do not have the extra_info field (hence, the bogus values). Besides deciding on the format of the extra_info field, we would need to bump up the DXT_POSIX_VER and DXT_MPIIO_VER, although these tests will still fail because of the above reason---Darshan DXT logs in the tests being old. |
|
I'll suggest a little bit different data layout for discussion. I think we can modify the DXT records to have two extra integer fields:
If the trailing data size is non-zero, then it indicates that the record also has a variable-length string appended to it (containing data that the user provided via environment variable). We've used variable length records in some other contexts in Darshan. The rationale is that it a) it will keep the record format compact for the common case (no user-provided annotations) and b) when the annotations are provided, they can be relatively large rather than bounded by a fixed-size string) |
|
Here is some data from running the
There are a couple of interesting things here:
We need to figure out what to do about this. This PR is using environment variables to pass additional annotations to the tracer, which is something we may have multiple use cases for. We don't necessarily have to use environment variables to do this, though; that was just a convenient idea for passing information into the wrappers that is runtime/language agnostic without API modifications. Other alternatives we could/should consider? Maybe pthread thread local storage? Anything else that might work? Ideally it would be something with low overhead when annotations are not used. Tagging @GueroudjiAmal and @infispiel (for some context, this is some testing to check the performance of function calls we would use in the merged version of this to capture thread information and user-provided annotations). |
|
Just noting for completion, in a developer meeting this week we talked about the potential to save space used by the annotation strings in the log by using a "symbol lookup" approach, where the log record just stores an integer id that refers to a string stored elsewhere, which would deduplicate strings automatically for cases where the same annotation is used repeatedly. Darshan does this already for file names, but we could generalize the approach. TBD if we do this up front or as a later optimization after we have the basic functionality in place. |
|
'fn_call_cross_object' is right there suggesting we should instead implement something like |
Part of the complication too would be providing bindings for Python etc. as well. |
|
Another idea might be to have a control env variable that's checked at startup (e.g. |


Feature request:
To add pthread ID to DXT to enable exploring the correlation between low-level
Darshan I/O records and tasks in task-based workflows.