DynamoRIO
|
#include <scheduler.h>
Public Member Functions | |
input_thread_info_t (std::vector< range_t > regions) | |
input_thread_info_t (memref_tid_t tid, std::vector< range_t > regions) | |
input_thread_info_t (memref_tid_t tid, int priority) | |
input_thread_info_t (std::set< output_ordinal_t > output_binding) | |
input_thread_info_t (memref_tid_t tid, std::set< output_ordinal_t > output_binding) | |
Data Fields | |
size_t | struct_size = sizeof(input_thread_info_t) |
std::vector< memref_tid_t > | tids |
std::vector< int > | shards |
std::set< output_ordinal_t > | output_binding |
int | priority = 0 |
std::vector< range_t > | regions_of_interest |
Detailed Description
template<typename RecordType, typename ReaderType>
struct dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t
Specifies details about one set of input trace files from one workload. Each input file typically represents either one software thread ("thread-sharded") or one hardware thread ("core-sharded"). The details in this struct apply to the inputs listed in the 'tids' (for thread-sharded, if identifying by tid) or 'shards' (for any sharding, if identifying by ordinal). When using 'tids' it is assumed that there is no thread id duplication within one workload.
Constructor & Destructor Documentation
◆ input_thread_info_t() [1/5]
|
inlineexplicit |
Convenience constructor for common usage.
◆ input_thread_info_t() [2/5]
|
inline |
Convenience constructor for common usage.
◆ input_thread_info_t() [3/5]
|
inline |
Convenience constructor for common usage.
◆ input_thread_info_t() [4/5]
|
inline |
Convenience constructor for placing all threads for one workload on a set of cores for a static partitioning.
◆ input_thread_info_t() [5/5]
|
inline |
Convenience constructor for placing one thread on a set of cores.
Field Documentation
◆ output_binding
std::set<output_ordinal_t> dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::output_binding |
Limits these threads to this set of output streams, which are specified by ordinal 0 through the output count minus oner. They will not be scheduled on any other output streams.
◆ priority
int dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::priority = 0 |
Relative priority for scheduling. The default is 0. Higher values have higher priorities and will starve lower-priority inputs. Higher priorities out-weigh dependencies such as DEPENDENCY_TIMESTAMPS.
◆ regions_of_interest
std::vector<range_t> dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::regions_of_interest |
If non-empty, all input records outside of these ranges are skipped: it is as though the input were constructed by concatenating these ranges together. A TRACE_MARKER_TYPE_WINDOW_ID marker is inserted between ranges (with a value equal to the range ordinal) to notify the client of the discontinuity. This marker is inserted between back-to-back regions with no separation, but it is not inserted prior to the first range. A dynamorio::drmemtrace::TRACE_TYPE_THREAD_EXIT record is inserted after the final range. These ranges must be non-overlapping and in increasing order.
Be aware that selecting a subset of code can remove inter-input communication steps that could be required for forward progress. For example, if selected subsets include TRACE_MARKER_TYPE_SYSCALL_UNSCHEDULE with no timeout but do not include a corresponding TRACE_MARKER_TYPE_SYSCALL_SCHEDULE for wakeup, an input could remain unscheduled.
Also beware that this can skip over trace header entries (like TRACE_MARKER_TYPE_FILETYPE), which should ideally be obtained from the dynamorio::drmemtrace::memtrace_stream_t API instead.
◆ shards
std::vector<int> dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::shards |
Which inputs the details in this structure apply to, expressed as 0-based ordinals in the 'readers' vector or in the files opened at 'path' (which are sorted lexicographically by path) in the containing dynamorio::drmemtrace::scheduler_tmpl_t::input_workload_t. Only one of 'tids' and 'shards' can be non-empty. If 'tids' is empty and 'shards' is empty, the details apply to all not-yet-mentioned (by other 'tids' or 'shards' vectors in prior entries for this workload) inputs in the dynamorio::drmemtrace::scheduler_tmpl_t::input_workload_t. If multiple entries list the same shard ordinal, only the last one is honored.
◆ struct_size
size_t dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::struct_size = sizeof(input_thread_info_t) |
Size of the struct. Not used as this structure cannot support binary-compatible additions due to limits of C++ offsetof support with some implementations of std::set where it is not a standard-layout class: thus, changes here require recompiling tools using this code.
◆ tids
std::vector<memref_tid_t> dynamorio::drmemtrace::scheduler_tmpl_t< RecordType, ReaderType >::input_thread_info_t::tids |
Which input threads the details in this structure apply to. Only one of 'tids' and 'shards' can be non-empty. If 'tids' is empty and 'shards' is empty, the details apply to all unmentioned (by other 'tids' or 'shards' vectors in other entries for this workload) inputs in the dynamorio::drmemtrace::scheduler_tmpl_t::input_workload_t. When using 'tids' it is assumed that there is no thread id duplication within one workload. If multiple entries list the same tid, only the last one is honored.
The documentation for this struct was generated from the following file:
- /home/runner/work/dynamorio/dynamorio/build_release-64/clients/include/drmemtrace/scheduler.h