-
Notifications
You must be signed in to change notification settings - Fork 28
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
Binary instrumentation: more robust exclusion of functions used internally #238
Merged
jrmadsen
merged 21 commits into
ROCm:main
from
jrmadsen:omnitrace-exe-exclude-internal-libs
Feb 7, 2023
Merged
Binary instrumentation: more robust exclusion of functions used internally #238
jrmadsen
merged 21 commits into
ROCm:main
from
jrmadsen:omnitrace-exe-exclude-internal-libs
Feb 7, 2023
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- join needs to handle nullptr
- get_linked_path returns std::optional<string> - get_binary_info accepts include_undef flag - renamed symbol::read_bfd to symbol::read_bfd_line_info - get_binary_info has param options for reading line info and included undefined symbols
- fixed another instance of resource deadlock during first call to configure_settings
- disable rocprofiler tests when HIP enabled but OMNITRACE_USE_ROCPROFILER=OFF
- added internal-libs.cpp - using binary::get_binary_info on various known libs used by omnitrace - any matching func/file from symbols found in known internal libs are excluded - relaxed restrictions in is_module_constrained - relaxed restrictions in is_routine_constrained - added a few safety checks
- options to change which libs are considered internal libraries
jrmadsen
added
libomnitrace-dl
Involves omnitrace-dl library
omnitrace-instrument
Involves the omnitrace-instrument executable (binary instrumenter)
binary instrumentation
Binary instrumentation
sampling
Statistical sampling via interrupts
testing
Extends/improves/modifies testing
examples
Adds new example or modifies existing example
labels
Feb 5, 2023
- regex option for excluding functions containing specific instructions
- fix compiler error for Ubuntu Jammy + GCC 12 - dlopen + libtbbmalloc_proxy appears to be causing issues on OpenSUSE
- multithread processing internal info - report timing info
- wait until after address space is created
- conflicting versions of libraries for binary analysis causes problems - expanded whole function restrictions - expanded module_function::is_routine_constrained regex
- include memory usage info - option to read libraries linked against internal libs: --internal-library-deps - defer parsing internal libs data to when processing modules
jrmadsen
added
libomnitrace
Involves omnitrace library
libomnitrace-common
common "library" used by multiple libraries
and removed
libomnitrace-dl
Involves omnitrace-dl library
labels
Feb 7, 2023
jrmadsen
added
libomnitrace-binary
Internal library containing binary analysis capabilities
libomnitrace-core
Internal library containing core capabilities
labels
Feb 7, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
binary instrumentation
Binary instrumentation
examples
Adds new example or modifies existing example
libomnitrace
Involves omnitrace library
libomnitrace-binary
Internal library containing binary analysis capabilities
libomnitrace-common
common "library" used by multiple libraries
libomnitrace-core
Internal library containing core capabilities
omnitrace-instrument
Involves the omnitrace-instrument executable (binary instrumenter)
sampling
Statistical sampling via interrupts
testing
Extends/improves/modifies testing
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR attempts to increase the stability of binary rewrite and runtime instrumentation.
Improved protection against self-instrumentation
Using
the binary analysis capabilities added from #229the Dyninst SymtabAPI, OmniTrace now does a much better job of avoiding instrumentation of functions which are internally called by OmniTrace:omnitrace
executable searches for and parses the symbols of various libraries which are known to cause problems when instrumented"libc.so.6"
,"libdl.so.2"
, etc., and thus are outside the scope of the users optimizations efforts"libunwind.so"
,"libgotcha.so"
,"libroctracer64.so"
, etc.module_function
instance when it's membermodule_name
orfunction_name
variable matches the library name, source file, or function name found for that symbol (unless the user explicitly requests that it be eligible for instrumentation)Function filters based on linkage and visibility
Added options to restrict instrumentation to certain linkage types (e.g. avoid instrumenting weak symbols) and visibility types (e.g. avoid instrumenting hidden symbols).
Function filters based on instructions
In the past, after instrumentation, some applications instrumented by Dyninst would fail with a trap signal (e.g. #147). In several cases, it was found that this occurred whenever certain instructions were present in the function so an option was added to exclude functions based on one or more regex patterns was added.
Details
dlopen(<libname>, RTLD_LAZY | RTLD_NOLOAD)
LD_LIBRARY_PATH
OMNITRACE_ROCM_PATH
,ROCM_PATH
/sbin/ldconfig -p
/usr/local/lib
--linkage
command line option to restrict instrumentation to functions with particular type(s) of linkageunknown
,global
,local
,weak
,unique
--visibility
command line option to restrict instrumentation to functions with particular type(s) of visibilityunknown
,default
,hidden
,protected
,internal
--internal-module-include
and--internal-function-include
command line regex options to bypass automatic exclusion from instrumentation--internal-library-append
command line option to specify a library should be considered internal--internal-library-remove
command line option to specify a library should not be considered internal--instruction-exclude
command line regex option to exclude functions which contain matching instructions--internal-library-deps
command line option to treat libraries linked to internal libraries as internal librariesmodule_function::is_module_constrained()
module_function::is_routine_constrained()
Miscellaneous
LD_PRELOAD
+OMNITRACE_DL_VERBOSE=3
issuebinary::get_linked_path
returnsstd::optional<string>
binary::symbol::read_bfd
tobinary::symbol::read_bfd_line_info
binary::get_binary_info
has param options for reading line info and included undefined symbolsomnitrace
(does not print repeated messages)