文件最后提交记录最后更新时间
i#3351: Add drcachesim reader for chunked snappy traces. (#3379) Adds a drcachesim reader for chunked snappy traces. Currently there is no writer upstream but these traces are produced by third-party drcachesim adaptations. Adds a test using a checked-in snappy trace and installs libsnappy on Travis for automated testing. Fixes #33517 年前
i#5843 scheduler: Update checked-in trace (#6038) Updates the checked-in thread sig trace, which is old and small, to a new trace in the zip format and with more threads and more code. This is a better stress test of the scheduler. This trace is already used by the scheduler tests. Augments the scheduler_launcher to add a sanity test running it on the new trace added here, and improves a few other things identified in PR #6039. Issue: #58433 年前
i#4274 kernel pc: Record interrupted PC before drmemtrace kernel events (#4994) For online traces, adds the interrupted PC to kernel event entries. For offline traces, updates the existing module offset stored inside kernel events (and previously used only for raw2trace) to become an absolute PC to help in core simulators and other trace consumers who want to know branch targets prior to kernel events. This is a version change for offline traces, and the version is updated, with a named constant for the old version. The raw offline's module offset is upgraded to become an index;offset pair (for 64-bit), as that format is better suited for raw2trace and it avoids needing an extra entry nearly all of the time. The raw2trace postprocessing converts it to an absolute PC for the final trace. Since the 49 bits can take two raw entries, raw2trace is augmented to handle unreading such a double entry. Adds a new TRACE_MARKER_TYPE_RSEQ_ABORT marker to further identify an rseq abort, in order to roll back the committing store in raw2trace (previously it used the lack of interrupted-PC to identify an rseq abort). Adds support to the view tool for displaying the interrupted PC depending on the version. Updates the drcachesim documentation with the new output of the interrupted PC from the view tool. Fixes an issue in the reader where the first switch to a thread has the prior thread's identity in the two leading marker entries for version and filetype. Adds tests of the interrupted PC to the trace_invariants test for signals, as well as ensuring that raw2trace has rolled back an rseq abort final instruction so that the abort appears to occur at a legitimate place inside the region. Adds a test of the legacy version with just offsets by checking in raw files from a signal_invariants run, with fake libdrmemtrace.so and lidynamorio.so to keep the size down. Fixes #42744 年前
i#4400 DC ZVA correctness: Fix alignment, size and type in offline traces (#4444) Fixes alignment, size and memref type for address range zeroed using DC ZVA operation on AArch64. Adds traced processor's cache line size to header of offline raw traces. Using this, during offline trace post-processing, back-align the memory address in DC ZVA and mark the operation as a cache line sized store. This is a workaround for offline traces, and doesn't help in correctness of DC ZVA representation in online traces. Adds the cache line size as a new marker type in final offline and online traces. For old raw traces without cache line size in header, the present processor's cache line size is used as default during raw2trace. Repurposes burst_flush_aarch64 to test AArch64 SYS operations in general, and renames it to burst_aarch64_sys. Adds an offline trace analyser test to verify DC ZVA fixes and new marker. Adds new check to trace invariant test that verifies presence of cache line size marker in online traces. Updates offline trace for tool.drcacheoff.altbindir test to add cache line size in header. Issue: #44005 年前
i#5843 scheduler: Switch on a blocking syscall (#6163) Adds an input switch on a blocking syscall, without considering the current input even if it is the highest priority. Refactors pick_next_input() to use a helper function pick_next_input_as_previously() to make it easier to read the new wait state code. Adds a unit test with blocking syscalls and priorities to ensure lower-priority inputs are scheduled when a higher-priority input goes into a wait state. Regenerates the checked-in threadsig.x64 trace to contain syscall number and maybe-blocking markers and updates the associated tests' thread ids and expected output. Issue: #58432 年前
i#3048 func-trace: Add "noret" function tracing (#4176) Adds an optional specifier for drcachesim function tracing where "|noret" on a trace request indicates to not record the return value. This can reduce overhead as finding all post-call return points is non-trivial. Changes the funclist.log format to include multiple comma-separated values prior to the symbol: the id, number of args, PC, and optional flags like "noret". Adding the arg count helps simplify func_view code, and it and the PC should be generally useful, although they can technically be extracted from the trace. Adds support to the func_view tool to keep the indentation level the same for a noret function, to properly visualize nesting of other functions. Adds thread prefixes to distinguish different thread subtraces when viewing an interleaving. Renames DRMEMTRACE_FUNCTION_MAP_FILENAME to DRMEMTRACE_FUNCTION_LIST_FILENAME to match all other references which call it the "function list" or "funclist". Adds support for locating the auxiliary files in either the raw/ or trace/ subdirectories to make it easier to persist trace files. Adds a new test with a combination of return-value and noret functions. I wanted to test threads as well, and it is difficult to make a deterministic test like that, so I checked in the trace files themselves. Issue: #30486 年前
i#4370: Fix CMake 3.18 and 3.19 build and test failures (#4582) Fixes multiple problems encountered with CMake 3.18+: 1) Deprecated old version support. Solved by updating our minimums everywhere to 3.7 which was already our top-level minimum. At this point it should be fine to require clients to use 3.7 too. 2) Missing -rdynamic for test executables, where some clients expect to find global symbols in .dynsym. This is related to policy CMP0065. 3) Missing location property in the samples_proj test. The fix is in DynamoRIO_add_rel_rpaths(), instead of only using the per-file-type location property, use the actual path when the library is imported and we know the path at config time. 4) Assembly compilation breakage from two factors: A) The CMake-generated define -Ddynamorio_EXPORTS is being passed as --defsym dynamorio_EXPORTS in <DEFINES> for asm targets, but we pass that to cpp. B) Various compiler flags like --MD are in <FLAGS> and cpp does not like them. My solution for assembly is to: 1) set(CMAKE_ASM_DEFINE_FLAG "-D") 2) Remove <FLAGS> from the cpp command for asm. We do end up needing "-mavx*" to set the built-in defines __AVX__, etc. I put in explicit setting of "-mavx*" using the existing avx support queries, shifted earlier during config. 3) Move all of our preprocessor defines from COMPILE_FLAGS properties with explicit -D to COMPILE_DEFINITIONS properites without -D so we get them in <DEFINES>. This was a little involved: + There were a number of places pasing defines as flags. + COMPILE_FLAGS is a string while COMPILE_DEFINITIONS is a list, necessitating some conversions and changes in handling. + I had to split out a new function DynamoRIO_extra_defines from DynamoRIO_extra_cflags. I maintained the get_DynamoRIO_defines interface. + I had to update several places like in test setup where we remove defines to avoid duplicates from the command line and configure.h. Fixes #4370 Fixes #45815 年前
i#5009: Functionality for counting compulsory misses (#5040) This patch contains implementation of the functionality for counting compulsory misses as a separate metric. In this implementation information about all the already accessed memory regions are stored. If the cache miss happens and block which given address refers to was never accessed we are counting it as a compulsory miss. Issue: #50094 年前
i#5009: Functionality for counting compulsory misses (#5040) This patch contains implementation of the functionality for counting compulsory misses as a separate metric. In this implementation information about all the already accessed memory regions are stored. If the cache miss happens and block which given address refers to was never accessed we are counting it as a compulsory miss. Issue: #50094 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5520 memtrace encodings: Add encoding count to basic_counts (#5673) Although the encoding records are not directly exposed to analysis tools, the encoding_is_new field can be used as a proxy to count them. We do that here for the basic_counts tool. Issue: #55203 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#6289: Add timestamps at buffer end and around syscalls (#6290) Adds a timestamp+cpuid pair at the end of normal buffers, to help separate trace output i/o time. Adds a timestamp+cpuid pair before and after each application syscall. It appears around the syscall marker. The trace buffer is no longer output pre-syscall (this addresses #3113) except for i-filtered traces or small-window traces where we need a frequent trace size check. Adds a timestamp+cpuid pair when a kernel transfer event occurs. The trace buffer is no longer output here. Fixes the existing behavior where the post-syscall-buffer's timestamp contains the pre-syscall time. Bumps the trace version for this change as the contents of post-syscall timestamps are now different. Augments the documentation around timestamps and adds a missing entry on syscall markers. Adds some invariant checks, and improve existing syscall marker checks. Further checks are more difficult as the post-syscall time is not present when there is no post-syscall event, such as with exit or sigreturn. Did some manual testing with the view tool. Applies several auxiliary changes required to get all modes to work with these additional timestamps: + Removes the timestamp+cpuid from the split-pipe header, as that timestamp is delayed by i/o and results in misleading out-of-order timestamps. + Prevents pipe-splitting before a cpuid, to avoid a confusing sequence. + Fixes a bug where a syscall marker is missing when the prior block wrote out its buffer (#6291). + Fixes #6245 by re-instating the footer for non-split window files and removing the template .* from PR #6165 which was hiding the warning (this one could possibly be split into its own PR). + Adjusts the PC discontinuity relaxation for online unfetched instrs (#4915) to check the size now that there's no timestamp. Issue: #4915 Fixes #6289 Fixes #3113 Fixes #6291 Fixes #62452 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5383 mac a64, part 4: Enable tests to build (#6182) Enables BUILD_TESTS to compile for M1: a combination of fixing and disabling tests. Many issues came from assembler and pre-processor differences. Issue: #53832 年前
i#5383 mac a64, part 4: Enable tests to build (#6182) Enables BUILD_TESTS to compile for M1: a combination of fixing and disabling tests. Many issues came from assembler and pre-processor differences. Issue: #53832 年前
i#4014 dr$sim phys: Handle page-spanning accesses (#5536) Adds handling of page-spanning instruction fetch and data accesses. For offline traces these are heuristics as we do not know the precise sizes at tracing time. Since an extra physical page value is not harmful, the heuristics emit a second page if there is any decent chance that it is reached. Adds a data page span test by switching the drcacheoff.phys test to use allasm_repstr and adding such an access there. An instruction cross is more difficult to synthesize. Issue: #40143 年前
i#2985 scatter-gather: Fix spill/restore of scratch xmm reg. (#5252) Fixes spill and restore for the scratch xmm reg. Mov-ing to the lower xmm bits zeroes the upper bits of the corresponding ymm and zmm reg. So we need to spill and restore the entire ymm or zmm reg, whichever is the largest one reg supported by the system, and not just the xmm part of it. Also adjusts the state restoration machine to expect the new spill instrs. Replaces the linear address of spill slot in instrumentation with an address computed online using the TLS reg. Extends the allasm-scattergather test to verify the whole zmm reg after the scatter/gather expansion. On systems without AVX512, we verify ymm. This test fails without the fix. Issue: #29854 年前
i#4343 namespace: Add namespaces to droption (#6193) Places droption under dynamorio::droption. This is a breaking change and users will have to recompile. Updates all uses within the repository. Fixes #43432 年前
i#5539: Split L0_filter into two separate options (#5546) Splits the -L0_filter option into two separate ones, -L0I_filter and -L0D_filter, for instruction and data address filtering respectively. This is to support use-cases where we want to filter only one but not the other. The existing -L0_filter option is still supported, for backward compatibility. We simply sets the -L0I_filter and -L0D_filter flags when we see this for code simplicity. We disable optimizations when either -L0D_filter or -L0I_filter is set. Introduces new file types OFFLINE_FILE_TYPE_IFILTERED and OFFLINE_FILE_TYPE_DFILTERED to denote raw files where instructions or data addresses respectively are filtered. We need OFFLINE_FILE_TYPE_IFILTERED so that we can know whether bb instrs are separate, which happens only with L0I_filter. We could have done without OFFLINE_FILE_TYPE_DFILTERED and set the existing OFFLINE_FILE_TYPE_FILTERED when either instrs or data addresses were filtered. But we want to continue supporting the older trace versions where OFFLINE_FILE_TYPE_FILTERED also means that bb instrs are separate due to instr filtering. For symmetry, we just add the new OFFLINE_FILE_TYPE_DFILTERED type. Also adds a new sub-type for OFFLINE_TYPE_EXTENDED to denote the new header format which has the file type and file version fields swapped. This is required since we are out of bits to store the offline file type in the header. The new enum value is named same as the old one (OFFLINE_EXT_TYPE_HEADER), while the old one is now renamed to (OFFLINE_EXT_TYPE_HEADER_DEPRECATED). Also bumps up the version for offline files to OFFLINE_FILE_VERSION_HEADER_FIELDS_SWAP, since we have the new header entry now. Adds tests for some combinations of these options. Changes the -simulator_type to basic_counts as we really want to look at counts in these tests. Issue: #55393 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#4328 AArch64 prefetch and flush instrs: Add trace types for prefetch instrs (#4341) Adds new architecture agnostic trace types for prefetch instructions. These instructions have multiple variants based on: - prefetch target: this may be the L1, L2 or L3 cache - prefetch policy: either temporal or non-temporal - operation type: prefetch may be for load, instruction or store Uses these trace types for variants of AArch64 prfm and prfum prefetch instructions. Also marks some of the new trace types as aliases for existing x86 specific ones as they have same meaning. Other existing architecture specific trace types have different meaning and cannot be mapped to the new trace types. Also makes changes to account for these new prefetch trace types in drcachesim. Adds a custom analyzer test to verify prefetch operation counts for each variant. Issue: #43285 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#5365: Add AArch64 SVE support to the core (part 1) (#5835) This patch adds Arm AArch64 Scalable Vector Extension (SVE) support to the core including related changes to the codec, IR and relevant clients. SVE and SVE2 are major extensions to Arm's 64 bit architecture. Developers and users should reference the relevant documentation at developer.arm.com, (currently https://developer.arm.com/Architectures/Scalable%20Vector%20Extensions). The architecture allows hardware implementations to support vector lengths from 128 to 2048 bits. This patch supports up to 512 bits due to DynamoRIO's stack size limitation. There is currently no stock SVE hardware with vector lengths greater than 512 bits. The vector length is determined by get_processor_specific_info() at runtime on startup and is available by calling proc_get_vector_length(). For Z registers, reg_get_size() will return the vector size implemented by the hardware rather than OPSZ_SCALABLE. There will be follow up patches for: - SVE scatter/gather emulation - Full SVE signal context support - Complete SVE support in sample clients and drcachesim tracer. Issues: #5365, #3044 --------- Co-authored-by: Cam Mannett <camden.mannett@arm.com>2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
Fix build with GCC 13.1 and Doxygen 1.9.7 (#6194) Adds missing include for stdint.h in one file that relies on math.h, which breaks with GCC 13.1. Also, removes a redundant default-value assignment for DOT_TRANSPARENT, which is deprecated and would abort in the newest Doxygen.2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#5694: Add core-oriented analysis tool support (#6279) Adds a new type of sharding for drmemtrace analysis tools: by core instead of by thread. Introduces a shard_type_t enum (SHARD_BY_THREAD and SHARD_BY_CORE) passed to a new analysis_tool_t::initialize_shard_type() function to inform tools of the shard type (this cannot be easily added to the stream interface as the scheduler is not aware of the shard type). Adds a new memtrace_stream_t::get_output_cpuid() query to get the output cpu ordinal, or for replaying as-traced the original traced cpuid (#6262). Implements this for the scheduler. This addresses #6262. Generalizes analyzer_t to take in scheduler options for SHARD_BY_CORE to support analysis tools using the full range of schedules. In this mode, the core count is the worker count. Updates the shard index to be the core ordinal. Adds time-based scheduling support with analyzer_t using wall-clock time as the current time. Adds a number of options to set sharding mode (-core_sharding, -core_serial (not yet implemented)) and control the schedule (-sched_quantum, -sched_time, sched_order_time, -record_file, -replay_file, -cpu_schedule_file). Updates the basic_counts tool to support core sharding. Adds a new test core_sharded_test which leverages the analyzer_multi and option parsing to test the top-level options within a framework that can capture the output and run multiple tests sequentially in a simpler framework than having a separate test with an output file for each parameter being tested. Left as future work: + Convert scheduler_launcher into a new schedule_stats tool + Add a new record to indicate STATUS_WAIT + Add -core_serial support + Convert drcachesim default and -cpu_scheduling to use get_output_cpuid() Issue: #5694, #6262 Fixes #62622 年前
i#1738 dr$sim perf: Improve tag lookup speed with a hashtable (#4843) Replaces drcachesim's loops over all ways with a hashtable lookup. For larger cache hierarchies and caches with higher associativity this increases performance by 15% in cpu-bound tests on offline traces, when we use a large initial table size to avoid resizes which seem to outweigh the gains. The hashtable unfortunately results in a 15% slowdown on simple cache hierarchies, due to the extra time in erase() and other maintenance operations outweighing the smaller gains in lookup. Thus, we make the default to *not* use a hashtable and use the original linear walk, providing a method to optionally enable the hashtable. The cache simulator enables the hashtables for any 3+-level cache hierarchy with either coherence or many cores. Adds coherence to some existing 3-level-hierarchy tests to ensure we have tests that cover the hashtable path. The TLB simulator will need to tweak these hashtables: but it looks like it is already doing the wrong thing in invalidate() and other simulator_t methods, filed as #4816. Issue: #1738, #48165 年前
i#1715: Integrate the DRCacheSim cache simulator with the config reader. (#3055) Integrates DRCacheSim with the cache hierarchy configuration file reader/parser added previously. Tests that cover inclusive caches and reconfigurable cache hierarchies are also added. Fixes #17157 年前
i#1715: Integrate the DRCacheSim cache simulator with the config reader. (#3055) Integrates DRCacheSim with the cache hierarchy configuration file reader/parser added previously. Tests that cover inclusive caches and reconfigurable cache hierarchies are also added. Fixes #17157 年前
i#5951: Make -only_thread a top-level analyzer option (#5976) Applies -only_thread at the analyzer framework level, setting a thread filter for the scheduler. This results in just one thread file being opened. Removes the only_thread knob from the view tool. Adds a test. Also tested to confirm file reader activity: Before: $ bin64/drrun -t drcachesim -verbose 1 -simulator_type view -indir drmemtrace.*.dir -only_thread 2557808 -sim_refs 20 2>&1 | grep -c 'Opened reader' 9 After: $ bin64/drrun -t drcachesim -verbose 1 -simulator_type view -indir drmemtrace.*.dir -only_thread 2557808 -sim_refs 20 2>&1 | grep -c 'Opened reader' 0 Fixes #59513 年前
i#4462: Add new global memtrace size limit (#4479) Adds a new drcachesim memtrace option -max_global_trace_refs to supply a global trace size limit that does not kill the process. When the maximum is reached, the tracer omits traces for new threads entirely. Adds an online and an offline test for the feature. Adds documentation. Fixes #44625 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
Replace {u,}int_least64_t with {u,}int64_t (#6239) Replaces the {u,}int_least64_t types used throughout the drcachesim code base with the more-precise {u,}int64_t types. We were treating them as 64-bit anyway in our printf codes and other places, and all our supported toolchains have precise 64-bit types. Adds a note to the release docs on the change.2 年前
Revert "i#5490 ind br tgt: Stop skip and switch at target marker (#6241)" (#6248) This reverts commit bd11f79af594e2b3929bc2fc0b9bf961f0dc2837. It fails to apply a -1 to other outputs waiting for an input to reach its start instruction count when the input is at the pre-instr marker. The solution is non-trivial so we revert for now. Issue: #54902 年前
i#5709: Fix cpu scheduling regression (#5745) Fixes a bug where cpu scheduling failed to follow thread migrations due to caching that was added without invalidation on a migration. Adds a test by checking in a simple_app trace with a migration and ensuring we see both recorded cpus. Fixes #57093 年前
i#3230 split traces: refactor readers for interleaving (#3293) Refactors the drcachesim trace file_reader to interleave separate thread files in timestamp order. It also supports a legacy already-interleaved single file. (Until raw2trace is changed to generate separate files, this legacy support is the regular mode.) The new split-file interface will support parallelization in the future. The refactoring involves templatizing file_reader_t for the split into gzFile and std::ifstream. Side improvements include passing -verbose into each class. Adds a cross-platform directory iterator utility. Adds a legacy trace file test with a checked-in trace file. Installs zlib on Travis so we can gzip the checked-in file. Makes file_reader_t::is_complete() work for now but it may have to be removed once the refactoring is complete, due to lack of support for gzFile. Fixes the drmemtrace.small.x64.trace invalid header (my new stricter check complains). Issue: #32307 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#3995 multi-window: Convert delayed tracing to drbbdup (#5393) Converts the existing -trace_after_instrs delayed tracing feature to use the drbbdup multi-instrumentation library with two cases: counting instructions, and full tracing. It also uses the drwrap support for drbbdup via its "control inversion". Removes the #4893 workaround where function tracing via drwrap could not be delayed and the tracer instead discarded the data. Now we have proper delaying. The drbbdup case encoding is a global std::atomic, written to using language features which are lock-free and safe for client use. This will lay the groundwork for the full i#3995 feature of repeatedly swapping between the two cases. Tested the #4893 removal on a small app that calls "malloc": $ bin64/drrun -t drcachesim -record_heap -offline -- ~/dr/test/mprot && bin64/drrun -t drcachesim -indir $(ls -1td drmem*.dir | head -1) -simulator_type basic_counts drmemtrace exiting process 1161557; traced 62158 references. Total counts: 135566 total (fetched) instructions ... 4 total function id markers 2 total function return address markers 2 total function argument markers 2 total function return value markers $ bin64/drrun -t drcachesim -trace_after_instrs 10M -record_heap -offline -- ~/dr/test/mprot && bin64/drrun -t drcachesim -indir $(ls -1td drmem*.dir | head -1) -simulator_type basic_counts drmemtrace exiting process 1161726; traced 1 references. Basic counts tool results: Total counts: 0 total (fetched) instructions ... 0 total function id markers 0 total function return address markers 0 total function argument markers 0 total function return value markers The drstatecmp-fuzz test was overly sensitive to the delay trigger: de-flaked it by removing the "Generate" output so the trigger point does not vary as much based on the build and trigger technique, to avoid failure with this change. Issue: #3995, #48934 年前
i#3048 func-trace: Add "noret" function tracing (#4176) Adds an optional specifier for drcachesim function tracing where "|noret" on a trace request indicates to not record the return value. This can reduce overhead as finding all post-call return points is non-trivial. Changes the funclist.log format to include multiple comma-separated values prior to the symbol: the id, number of args, PC, and optional flags like "noret". Adding the arg count helps simplify func_view code, and it and the PC should be generally useful, although they can technically be extracted from the trace. Adds support to the func_view tool to keep the indentation level the same for a noret function, to properly visualize nesting of other functions. Adds thread prefixes to distinguish different thread subtraces when viewing an interleaving. Renames DRMEMTRACE_FUNCTION_MAP_FILENAME to DRMEMTRACE_FUNCTION_LIST_FILENAME to match all other references which call it the "function list" or "funclist". Adds support for locating the auxiliary files in either the raw/ or trace/ subdirectories to make it easier to persist trace files. Adds a new test with a combination of return-value and noret functions. I wanted to test threads as well, and it is difficult to make a deterministic test like that, so I checked in the trace files themselves. Issue: #30486 年前
Revert "i#5490 ind br tgt: Stop skip and switch at target marker (#6241)" (#6248) This reverts commit bd11f79af594e2b3929bc2fc0b9bf961f0dc2837. It fails to apply a -1 to other outputs waiting for an input to reach its start instruction count when the input is at the pre-instr marker. The solution is non-trivial so we revert for now. Issue: #54902 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#2006 drcachesim generalization: expose iterator from analyzer (#2631) Adds an alternate analyzer_t mode where a single tool controls iteration, by exposing the iterator and making reader.h public. Adds a test case of the external iterator to the histogram_launcher-based tests.8 年前
i#2006 generalize drcachesim: fix locale and other multi-tool issues (#2307) Fixes issues that appear when running multiple trace analysis tools on the same trace: primarily that locale changes for printing must be local. Tweaks the histogram tool's name to "Cache line histogram tool" to clearly distinguish from a reuse distance histogram.9 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#6289: Add timestamps at buffer end and around syscalls (#6290) Adds a timestamp+cpuid pair at the end of normal buffers, to help separate trace output i/o time. Adds a timestamp+cpuid pair before and after each application syscall. It appears around the syscall marker. The trace buffer is no longer output pre-syscall (this addresses #3113) except for i-filtered traces or small-window traces where we need a frequent trace size check. Adds a timestamp+cpuid pair when a kernel transfer event occurs. The trace buffer is no longer output here. Fixes the existing behavior where the post-syscall-buffer's timestamp contains the pre-syscall time. Bumps the trace version for this change as the contents of post-syscall timestamps are now different. Augments the documentation around timestamps and adds a missing entry on syscall markers. Adds some invariant checks, and improve existing syscall marker checks. Further checks are more difficult as the post-syscall time is not present when there is no post-syscall event, such as with exit or sigreturn. Did some manual testing with the view tool. Applies several auxiliary changes required to get all modes to work with these additional timestamps: + Removes the timestamp+cpuid from the split-pipe header, as that timestamp is delayed by i/o and results in misleading out-of-order timestamps. + Prevents pipe-splitting before a cpuid, to avoid a confusing sequence. + Fixes a bug where a syscall marker is missing when the prior block wrote out its buffer (#6291). + Fixes #6245 by re-instating the footer for non-split window files and removing the template .* from PR #6165 which was hiding the warning (this one could possibly be split into its own PR). + Adjusts the PC discontinuity relaxation for online unfetched instrs (#4915) to check the size now that there's no timestamp. Issue: #4915 Fixes #6289 Fixes #3113 Fixes #6291 Fixes #62452 年前
Cleanup drcachesim testing cmake code and names (#2817) Refactors the drcachesim tests to simplify template names (removing the "drcachesim-" prefix from the online tests, and making test names match template names in all cases) and share cmake code among the tests via new macros.8 年前
i#5490 ib targets: Add memref ind branch target field (#6250) Adds a new "indirect_branch_target" field to memref_t.instr. Converts the new TRACE_MARKER_TYPE_BRANCH_TARGET marker to an internal record used by reader_t to fill in the new field. Updates the invariant checker and test. Updates the legacy test's marker counts. Updates the documentation. Issue: #54902 年前
i#3203: Add a microbenchmark to test the cache miss analyzer (#3229) Adds a microbenchmark to test the newly added LLC miss analyzer. Issue #32037 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#2876 clang-format: massive reformat of every file (#3093) Massive clang-format of every C or C++ source file (*.h, *.c, *.cpp), except for: + third_party/ + ext/drsysm/libelftc/include/ + ext/drsyms/demangle.cc This is a single, large commit by design to present a single history disruption point and bring the code base into a consistent format. clang-format version 6.0 was used. Tweaks the clang-format rules to indent 4 after pre-processor hashes, to allow single-line case labels, and align trailing comments. Disables the pp_indent vera style check as we changed the indent rule and clang-format now covers it. Leaves the other checks, even though some are redundant (they found clang-format errors). Moves C++ token defines from globals_shared.h and globals.h to a new header, core/lib/c_defines.h, to avoid a clang-format parsing error where it fails to identify the include guard. Adds genapi.pl removal of extra indentation inside API_EXPORT_ONLY and CLIENT_INTERFACE regions. Adds exclusions around large regions we don't want to format, in these files: + core/win32/syscallx.h + core/arch/x86/decode_table.c + core/arch/arm/table_a32_pred.c + core/arch/arm/table_a32_unpred.c + core/arch/arm/table_t32_16.c + core/arch/arm/table_t32_16_it.c + core/arch/arm/table_t32_base.c + core/arch/arm/table_t32_coproc.c + core/arch/arm/table_encode.c Adds smaller exclusions to work around clang-format bugs: + Several missing break-after-return-type + Several >90-char lines + Misc scattered issues, all listed in #2876 Issue: #28767 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5199 warmup trace: Add a mode for L0_filter (#5717) Add a separate L0_filter mode to enable switching from warmup/L0_filter mode to the unfiltered mode. Added an option (-L0_filter_until_instrs) which specifies the number of instructions for warmup trace In warmup mode, we filter accesses through the -L0{D,I}_filter caches. If neither -L0D_filter nor -L0I_filter are specified then both are assumed to be true. The size of these can be specified using -L0{D,I}_size. The filter instructions come after the -trace_after_instrs count and before the instruction trace. This is intended to be used together with other trace options (e.g., -trace_for_instrs, -exit_after_tracing, -max_trace_size etc.) but with the difference that a filter trace is also collected. The filter trace and full trace are stored in a single file separated by a TRACE_MARKER_TYPE_FILTER_ENDPOINT marker. When used with windows (i.e., -retrace_every_instrs), each window contains a filter trace and a full trace. When we have windows contained in a single-file, the TRACE_MARKER_TYPE_WINDOW_ID markers indicate start of filtered records. The following items are not addressed in this PR - -align_endpoints test is not added - new OFFLINE_FILE_TYPE_BIMODAL type to indicate that the file has both filtered and unfiltered entries (#6164) - items not tested - handling windows with single-file all-in-one traces - online trace - ifilter only or dfilter only - use cases without -trace_after_instrs: tracing always starts in full trace mode, so the tests fail if we use this option; need to understand why this is happening Issue: #51992 年前
i#5520 memtrace encodings: Add encoding count to basic_counts (#5673) Although the encoding records are not directly exposed to analysis tools, the encoding_is_new field can be used as a proxy to count them. We do that here for the basic_counts tool. Issue: #55203 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#6289: Add timestamps at buffer end and around syscalls (#6290) Adds a timestamp+cpuid pair at the end of normal buffers, to help separate trace output i/o time. Adds a timestamp+cpuid pair before and after each application syscall. It appears around the syscall marker. The trace buffer is no longer output pre-syscall (this addresses #3113) except for i-filtered traces or small-window traces where we need a frequent trace size check. Adds a timestamp+cpuid pair when a kernel transfer event occurs. The trace buffer is no longer output here. Fixes the existing behavior where the post-syscall-buffer's timestamp contains the pre-syscall time. Bumps the trace version for this change as the contents of post-syscall timestamps are now different. Augments the documentation around timestamps and adds a missing entry on syscall markers. Adds some invariant checks, and improve existing syscall marker checks. Further checks are more difficult as the post-syscall time is not present when there is no post-syscall event, such as with exit or sigreturn. Did some manual testing with the view tool. Applies several auxiliary changes required to get all modes to work with these additional timestamps: + Removes the timestamp+cpuid from the split-pipe header, as that timestamp is delayed by i/o and results in misleading out-of-order timestamps. + Prevents pipe-splitting before a cpuid, to avoid a confusing sequence. + Fixes a bug where a syscall marker is missing when the prior block wrote out its buffer (#6291). + Fixes #6245 by re-instating the footer for non-split window files and removing the template .* from PR #6165 which was hiding the warning (this one could possibly be split into its own PR). + Adjusts the PC discontinuity relaxation for online unfetched instrs (#4915) to check the size now that there's no timestamp. Issue: #4915 Fixes #6289 Fixes #3113 Fixes #6291 Fixes #62452 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#4400 DC ZVA correctness: Fix alignment, size and type in offline traces (#4444) Fixes alignment, size and memref type for address range zeroed using DC ZVA operation on AArch64. Adds traced processor's cache line size to header of offline raw traces. Using this, during offline trace post-processing, back-align the memory address in DC ZVA and mark the operation as a cache line sized store. This is a workaround for offline traces, and doesn't help in correctness of DC ZVA representation in online traces. Adds the cache line size as a new marker type in final offline and online traces. For old raw traces without cache line size in header, the present processor's cache line size is used as default during raw2trace. Repurposes burst_flush_aarch64 to test AArch64 SYS operations in general, and renames it to burst_aarch64_sys. Adds an offline trace analyser test to verify DC ZVA fixes and new marker. Adds new check to trace invariant test that verifies presence of cache line size marker in online traces. Updates offline trace for tool.drcacheoff.altbindir test to add cache line size in header. Issue: #44005 年前
i#5539: Split L0_filter into two separate options (#5546) Splits the -L0_filter option into two separate ones, -L0I_filter and -L0D_filter, for instruction and data address filtering respectively. This is to support use-cases where we want to filter only one but not the other. The existing -L0_filter option is still supported, for backward compatibility. We simply sets the -L0I_filter and -L0D_filter flags when we see this for code simplicity. We disable optimizations when either -L0D_filter or -L0I_filter is set. Introduces new file types OFFLINE_FILE_TYPE_IFILTERED and OFFLINE_FILE_TYPE_DFILTERED to denote raw files where instructions or data addresses respectively are filtered. We need OFFLINE_FILE_TYPE_IFILTERED so that we can know whether bb instrs are separate, which happens only with L0I_filter. We could have done without OFFLINE_FILE_TYPE_DFILTERED and set the existing OFFLINE_FILE_TYPE_FILTERED when either instrs or data addresses were filtered. But we want to continue supporting the older trace versions where OFFLINE_FILE_TYPE_FILTERED also means that bb instrs are separate due to instr filtering. For symmetry, we just add the new OFFLINE_FILE_TYPE_DFILTERED type. Also adds a new sub-type for OFFLINE_TYPE_EXTENDED to denote the new header format which has the file type and file version fields swapped. This is required since we are out of bits to store the offline file type in the header. The new enum value is named same as the old one (OFFLINE_EXT_TYPE_HEADER), while the old one is now renamed to (OFFLINE_EXT_TYPE_HEADER_DEPRECATED). Also bumps up the version for offline files to OFFLINE_FILE_VERSION_HEADER_FIELDS_SWAP, since we have the new header entry now. Adds tests for some combinations of these options. Changes the -simulator_type to basic_counts as we really want to look at counts in these tests. Issue: #55393 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5843 scheduler: Record futex parameters and maybe-blocking syscalls (#6132) Adds markers that help with scheduling and interleaving our per-software-thread user-mode traces, to identify inter-thread dependencies and kernel wait points: "maybe-blocking" plus kernel locks on Linux (SYS_futex), as further described below: Adds tracing of SYS_futex's parameter values on Linux. This uses the function tracing markers, with an ID equal to a new system call base value plus the system call number so we can add other system calls in the future. For the return value, dr_syscall_result_info_t.succeeded is used to avoid complexities on some platforms (although it has its own downsides). Adds a new marker TRACE_MARKER_TYPE_MAYBE_BLOCKING_SYSCALL and sets it in raw2trace for Linux using a preliminary list of numbers which might block. Other operating systems are not yet supported. Adds a new filetype OFFLINE_FILE_TYPE_BLOCKING_SYSCALLS which indicates whether the futex parameters and blocking syscall markers are present. Adds checks to the invariant_checker tool. Updates test outputs that count markers. Adds a new burst_futex test. The trace markers look like this: 1269 890: 26493 ifetch 2 byte(s) @ 0x00007fdb221005a7 0f 05 syscall 1270 890: 26493 <marker: system call 202> 1271 890: 26493 <marker: maybe-blocking sytem call> 1272 890: 26493 <marker: function==syscall #202> 1273 890: 26493 <marker: function argument 0x55c677a7de38> 1274 890: 26493 <marker: function argument 0x1> 1275 890: 26493 <marker: function argument 0x1> 1276 890: 26493 <marker: function argument 0x0> 1277 890: 26493 <marker: function argument 0x0> 1278 890: 26493 <marker: function argument 0x0> 1279 890: 26493 <marker: timestamp 13330804804062625> 1280 890: 26493 <marker: tid 26493 on core 1> 1281 890: 26493 <marker: function==syscall #202> 1282 890: 26493 <marker: function return value 0x1> 1283 891: 26493 ifetch 6 byte(s) @ 0x00007fdb221005a9 48 3d 01 f0 ff ff cmp %rax, $0xfffff001 Issue: #58432 年前
i#4139: Add method to clear droption values for static re-attach (#5335) The values of droption accumulated options are not reset on detach, causing them to accumulate in a statically-linked client. There is no control point for droption to do this automatically, so we add droption_parser_t::clear_values() that a client can call. Adds a call to clear_values() in drmemtrace. Augments the drmemtrace burst_malloc test to fail when the options are not reset (i.e., fail without this fix). This serves as a test of the new feature, as the existing droption tests do not have static clients nor simple ways to add re-attaches. Adds a section to the droption documentation explaining the new feature. Fixes #41394 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4139: Add method to clear droption values for static re-attach (#5335) The values of droption accumulated options are not reset on detach, causing them to accumulate in a statically-linked client. There is no control point for droption to do this automatically, so we add droption_parser_t::clear_values() that a client can call. Adds a call to clear_values() in drmemtrace. Augments the drmemtrace burst_malloc test to fail when the options are not reset (i.e., fail without this fix). This serves as a test of the new feature, as the existing droption tests do not have static clients nor simple ways to add re-attaches. Adds a section to the droption documentation explaining the new feature. Fixes #41394 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#2039 trace trim, part 2: Add open_file with tid (#5679) Adds drmemtrace_replace_file_ex_ops() with an expanded file opening function which takes in the thread id and window id, to better support the external file opener with delayed opens due to nop mode and windows. The new function takes in a struct to make it easier to extend further in the future. Adds a test of the function to burst_replaceall. Adds additional threads to the test and checks that the tid for each thread was seen, but disables that part on Windows due to #2040. Issue: #20393 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#2039 trace trim, part 3: Add nop mode to drmemtrace (#5700) Adds a new drbbdup mode to drmemtrace which performs zero instrumentation (except drwrap cleanup). This mode is used when attaching for the period prior to full control of all threads and when detaching prior to starting to let threads go native, to avoid uneven thread instrumentation during these incremental staggered processes. The mode is initially under an off-by-default new option -align_endpoints while drbbdup stability is being worked on (i#5686). Threads that did nothing during the trace-mode period are now omitted from the trace. Adds a test by adding 4 idle threads to burst_threads and ensuring they do not show up in the trace. Alignment itself was tested manually by running larger applications and analyzing the timestamp ranges in the trace. Fixes the burst_replace test to work properly with .zip output (the output regex still matched despite a printed error from raw2trace, it seems). Timestamps during detach require further work as they inaccurately imply executing after tracing mode was turned off. The next part will address this issue. Issue: #2039, #56863 年前
i#2001 trace perf: elide rip-rel and same-base addrs (#3977) Reduces drcachesim offline tracing overhead by eliding rip-relative and same-unmodified-base addresses from the recorded trace, reconstructing their values during post-processing. In measurements this is pretty significant, removing 12%-17% of entries that need to be written out during tracing. Adds identification of elidable memory operands to instru_offline_t, exported both to the runtime tracer and the raw2trace post-processor. Changes raw2trace's instruction cache key to a pair <tag,pc> to handle tail-duplicated blocks. Adds elision identification through a constructed instrlist when first encountering a block tag. Adds a new struct memref_summary_t to store elision information with each cached memory operand. Increases the offline file version and adds versioning support for backward compatibility with no-elision traces, as well as to make it easier to keep compatibility when more elision cases are added in the future. Adds a file type to the offline file header to identify filtered traces as a sanity check and to avoid extra work when there are no elided addresses at all. Another file type flag identifies whether any optimizations (this and the existing displacement elision) are present, making it possible to disable them for testing purposes. Adds a -disable_optimizations flag for this. Adds a new test burst_traceopts which runs assembly code sequences covering corner cases twice, once with and once without optimizations. It then postprocesses each, and compares the final trace entries using the external analyzer iterator interface. This found bugs during development and provides confidence that these optimizations are safe. Improves the pre-existing displacement elision optimization by sharing code between the tracer and raw2trace via offline_instru_t::opnd_disp_is_elidable() and by adding test cases to the new test. Also implements displacement elision for ARM and AArch64, which is required for proper address elision without also recording displacements. The new test includes AArch64 and ARM assembly code. The AArch64 was tested by temporarily enabling these static-DR tests (unfortunately i#2007 prevents us from enabling them on Travis for now). The ARM assembly builds but is not testable due to missing start/stop features on ARM> Adds a statistics interface to retrieve raw2trace metrics. The initial metric is the number of elided addresses. Includes a part of PR #3120 (the memset in d_r_config_exit()) plus a '#' option prefix to work around #2661. Fixes a bug revealed by the tighter post-processing constraints with elision: Do not count an artificial jump from a trampoline return as an instruction in the recorded block tag entry. Counting it resulted in a duplicated instruction during post-processing. Issue: #2001, #26616 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#3995 multi-window: Write separate raw files per window (#5450) Adds a drmemtrace feature under a new on-by-default -split_windows option to create a separate subdirectory with a separate set of raw files per traced window. This avoids disk space issues with a single file, and splitting at the raw stage is relatively simple for regular drmemtrace usage (though not as simple for external users of the file i/o redirection). Files in raw/window.NNNN/ subdirectories are mirrored in trace/window.NNNN/ subdirectories upon being post-processed. Post-processing handles just the first window by default; the others must be explicitly passed as input directories in separate post-processing invocations. This changes the non-window behavior to not create an output file until tracing starts, which necessitated changing the tool.drcacheoff.delay-func test to check for no output files as a slightly different type of test. Adds a test of split-file offline windows. Fixes an infinite loop bug in raw2trace hit when a file is truncated: hit while the windows were buggy and missing footers. Issue: #39954 年前
i#5683: Detect bb truncation in drstatecmp (#5684) Checks for block truncation in drstatecmp so it can use the post-app2app ilist instead of incorrectly using the untruncated version in its state comparison. Adds a test of drcachesim offline that fails with a false positive without this fix. Fixes #56833 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#3048 func-trace: Add "noret" function tracing (#4176) Adds an optional specifier for drcachesim function tracing where "|noret" on a trace request indicates to not record the return value. This can reduce overhead as finding all post-call return points is non-trivial. Changes the funclist.log format to include multiple comma-separated values prior to the symbol: the id, number of args, PC, and optional flags like "noret". Adding the arg count helps simplify func_view code, and it and the PC should be generally useful, although they can technically be extracted from the trace. Adds support to the func_view tool to keep the indentation level the same for a noret function, to properly visualize nesting of other functions. Adds thread prefixes to distinguish different thread subtraces when viewing an interleaving. Renames DRMEMTRACE_FUNCTION_MAP_FILENAME to DRMEMTRACE_FUNCTION_LIST_FILENAME to match all other references which call it the "function list" or "funclist". Adds support for locating the auxiliary files in either the raw/ or trace/ subdirectories to make it easier to persist trace files. Adds a new test with a combination of return-value and noret functions. I wanted to test threads as well, and it is difficult to make a deterministic test like that, so I checked in the trace files themselves. Issue: #30486 年前
i#3048 func-trace: Add new+delete to -record_heap (#4178) Adds all 24 global operator new and delete variants to the default -record_heap_value, since in some implementations they do not simply call malloc and free. We include the Itanium ABI manglings only here. MSVC and Windows heap interception is even more complex with more layers and we leave that for future work. Adds a new test which calls each one, though some are only compiled and called if C++17 is available in the compiler. It is not easy to check the output so for now we do not have good automated validation that all operators were caught, only manual checking. Issue: #30486 年前
i#4083 func view: Allow for 7-digit thread id in func_view tests (#4454) After an upgdate, my machine has 7-digit thread id's, causing the func_view tests to fail. Here I widen the printed field and update the expected output for the stored trace. Issue: #40835 年前
i#5520 memtrace encodings: Add encoding_is_new field (#5671) Adds a new field to memref_instr_t: encoding_is_new. This indicates whether the encoding bytes for an instruction fetch are new, either due to changed application code or just the start of a new chunk. This lets tools know when to invalidate any cached decoding information. Updates the opcode_mix and view tools to use this to invalidate their caches. Adds a test of modified code to the tool.drcacheoff.gencode test. Changes the test to use opcode_mix to test its cache invalidation. Adds a new icache_sync() routine to tools.h for help modifying code on AArchXX. I verified that with the bug pointed out at https://github.com/DynamoRIO/dynamorio/pull/5662#discussion_r982816383 the test catches the stale opcodes used by opcode_mix. Issue: #55203 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5076 trace invariants, part 3: Add simulator_type (#5135) Adds a new -simulator_type invariant_checker to support a user launching the checker explicitly on a target trace. Adds documentation on the new top-level tool. Adds a simple sanity test of the new flag. (The -test_mode versions of existing tests are already stressing the actual invariant checks.) Issue: #50764 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#3230 split traces: refactor readers for interleaving (#3293) Refactors the drcachesim trace file_reader to interleave separate thread files in timestamp order. It also supports a legacy already-interleaved single file. (Until raw2trace is changed to generate separate files, this legacy support is the regular mode.) The new split-file interface will support parallelization in the future. The refactoring involves templatizing file_reader_t for the split into gzFile and std::ifstream. Side improvements include passing -verbose into each class. Adds a cross-platform directory iterator utility. Adds a legacy trace file test with a checked-in trace file. Installs zlib on Travis so we can gzip the checked-in file. Makes file_reader_t::is_complete() work for now but it may have to be removed once the refactoring is complete, due to lack of support for gzFile. Fixes the drmemtrace.small.x64.trace invalid header (my new stricter check complains). Issue: #32307 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4462: Add new global memtrace size limit (#4479) Adds a new drcachesim memtrace option -max_global_trace_refs to supply a global trace size limit that does not kill the process. When the maximum is reached, the tracer omits traces for new threads entirely. Adds an online and an offline test for the feature. Adds documentation. Fixes #44625 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#2006 drcachesim: add opcode_mix tool and augmented instr API (#2821) Adds further support for tools that want information beyond just memory addresses by adding an API to leverage the raw2trace code to map in the binaries used during traced execution and examine the instruction bytes. This takes the shape of two new routines: raw2trace_t::do_module_parsing_and_mapping() and raw2trace_t::find_mapped_trace_address(). Adds a new simulator tool "opcode_mix" which uses the new API to decode the opcode for each executed instruction and print out the dynamic count of each opcode. The tool only operates with offline traces and needs access to the modules.log and binaries of the traced execution. Adds a new option -module_file to support running opcode_mix on traces moved out of the raw/ directory structure. Adds documentation and a test. Issue: #20068 年前
i#6289: Add timestamps at buffer end and around syscalls (#6290) Adds a timestamp+cpuid pair at the end of normal buffers, to help separate trace output i/o time. Adds a timestamp+cpuid pair before and after each application syscall. It appears around the syscall marker. The trace buffer is no longer output pre-syscall (this addresses #3113) except for i-filtered traces or small-window traces where we need a frequent trace size check. Adds a timestamp+cpuid pair when a kernel transfer event occurs. The trace buffer is no longer output here. Fixes the existing behavior where the post-syscall-buffer's timestamp contains the pre-syscall time. Bumps the trace version for this change as the contents of post-syscall timestamps are now different. Augments the documentation around timestamps and adds a missing entry on syscall markers. Adds some invariant checks, and improve existing syscall marker checks. Further checks are more difficult as the post-syscall time is not present when there is no post-syscall event, such as with exit or sigreturn. Did some manual testing with the view tool. Applies several auxiliary changes required to get all modes to work with these additional timestamps: + Removes the timestamp+cpuid from the split-pipe header, as that timestamp is delayed by i/o and results in misleading out-of-order timestamps. + Prevents pipe-splitting before a cpuid, to avoid a confusing sequence. + Fixes a bug where a syscall marker is missing when the prior block wrote out its buffer (#6291). + Fixes #6245 by re-instating the footer for non-split window files and removing the template .* from PR #6165 which was hiding the warning (this one could possibly be split into its own PR). + Adjusts the PC discontinuity relaxation for online unfetched instrs (#4915) to check the size now that there's no timestamp. Issue: #4915 Fixes #6289 Fixes #3113 Fixes #6291 Fixes #62452 年前
i#4014 dr$sim phys: Check privileges for pagemap (#5531) Since the kernel lets an unprivileged user read the pagemap file but supplies 0 values for the physical pages (and 0 is a possible legitimate value), we add an explicit check for privileges and fail up front if physical addresses are requested but not available. This is a change in behavior where before execution would continue with a warning. Adds a test of missing privileges. Adds sudo to the online drcachesim -use_physical tests. Only enables RUN_SUDO_TESTS if CI_TRIGGER is set, since Jenkins does not have password-less sudo. Fixes a sentinel issue where a 0 physical page was stored as 1 in the table: but 1 is a possible valid number as well, so -1 is used instead. Issue: #40143 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
Revert "i#5490 ind br tgt: Stop skip and switch at target marker (#6241)" (#6248) This reverts commit bd11f79af594e2b3929bc2fc0b9bf961f0dc2837. It fails to apply a -1 to other outputs waiting for an input to reach its start instruction count when the input is at the pre-instr marker. The solution is non-trivial so we revert for now. Issue: #54902 年前
Revert "i#5490 ind br tgt: Stop skip and switch at target marker (#6241)" (#6248) This reverts commit bd11f79af594e2b3929bc2fc0b9bf961f0dc2837. It fails to apply a -1 to other outputs waiting for an input to reach its start instruction count when the input is at the pre-instr marker. The solution is non-trivial so we revert for now. Issue: #54902 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#3351: Add drcachesim reader for chunked snappy traces. (#3379) Adds a drcachesim reader for chunked snappy traces. Currently there is no writer upstream but these traces are produced by third-party drcachesim adaptations. Adds a test using a checked-in snappy trace and installs libsnappy on Travis for automated testing. Fixes #33517 年前
Add a drmemtrace analysis tool for syscall mix (#6144) Adds a new drmemtrace analysis tool (syscall_mix) that counts the frequency of system calls in the trace. It uses the recently added TRACE_MARKER_TYPE_SYSCALL markers to count system calls. Adds unit tests that invoke syscall_mix in online and offline modes.2 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5841: Remove "T" from tid field in drmemtrace view to make view less confusing (#5853) The values in the tid field in the drmemtrace view had a "T" prefix. This should not be part of the tid value so we are fixing it by removing the "T". Issue #58413 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5843 scheduler: Add syscall marker counts to basic_counts (#6269) Adds the count of system call number markers and blocking system call markers to the basic_counts tool. Updates the output in the docs and key tests. Removes the long marker list from most tests which are not really checking any values anyway, to simplify future additions to the marker types counted. Issue: #58432 年前
i#5199 warmup trace: Add a mode for L0_filter (#5717) Add a separate L0_filter mode to enable switching from warmup/L0_filter mode to the unfiltered mode. Added an option (-L0_filter_until_instrs) which specifies the number of instructions for warmup trace In warmup mode, we filter accesses through the -L0{D,I}_filter caches. If neither -L0D_filter nor -L0I_filter are specified then both are assumed to be true. The size of these can be specified using -L0{D,I}_size. The filter instructions come after the -trace_after_instrs count and before the instruction trace. This is intended to be used together with other trace options (e.g., -trace_for_instrs, -exit_after_tracing, -max_trace_size etc.) but with the difference that a filter trace is also collected. The filter trace and full trace are stored in a single file separated by a TRACE_MARKER_TYPE_FILTER_ENDPOINT marker. When used with windows (i.e., -retrace_every_instrs), each window contains a filter trace and a full trace. When we have windows contained in a single-file, the TRACE_MARKER_TYPE_WINDOW_ID markers indicate start of filtered records. The following items are not addressed in this PR - -align_endpoints test is not added - new OFFLINE_FILE_TYPE_BIMODAL type to indicate that the file has both filtered and unfiltered entries (#6164) - items not tested - handling windows with single-file all-in-one traces - online trace - ifilter only or dfilter only - use cases without -trace_after_instrs: tracing always starts in full trace mode, so the tests fail if we use this option; need to understand why this is happening Issue: #51992 年前
i#6289: Add timestamps at buffer end and around syscalls (#6290) Adds a timestamp+cpuid pair at the end of normal buffers, to help separate trace output i/o time. Adds a timestamp+cpuid pair before and after each application syscall. It appears around the syscall marker. The trace buffer is no longer output pre-syscall (this addresses #3113) except for i-filtered traces or small-window traces where we need a frequent trace size check. Adds a timestamp+cpuid pair when a kernel transfer event occurs. The trace buffer is no longer output here. Fixes the existing behavior where the post-syscall-buffer's timestamp contains the pre-syscall time. Bumps the trace version for this change as the contents of post-syscall timestamps are now different. Augments the documentation around timestamps and adds a missing entry on syscall markers. Adds some invariant checks, and improve existing syscall marker checks. Further checks are more difficult as the post-syscall time is not present when there is no post-syscall event, such as with exit or sigreturn. Did some manual testing with the view tool. Applies several auxiliary changes required to get all modes to work with these additional timestamps: + Removes the timestamp+cpuid from the split-pipe header, as that timestamp is delayed by i/o and results in misleading out-of-order timestamps. + Prevents pipe-splitting before a cpuid, to avoid a confusing sequence. + Fixes a bug where a syscall marker is missing when the prior block wrote out its buffer (#6291). + Fixes #6245 by re-instating the footer for non-split window files and removing the template .* from PR #6165 which was hiding the warning (this one could possibly be split into its own PR). + Adjusts the PC discontinuity relaxation for online unfetched instrs (#4915) to check the size now that there's no timestamp. Issue: #4915 Fixes #6289 Fixes #3113 Fixes #6291 Fixes #62452 年前
i#3995 multi-window: Add repeated tracing window feature (#5402) Adds new options -trace_for_instrs and -retrace_every_instrs to drcachesim for periodic trace bursts of an unmodified application. Implements them by adapting the existing drbbdup cases for switching between -trace_after_instrs and full tracing. Adds documentation on the new options. Adds instru_t::get_instr_count to count instuctions while tracing, to know when a tracing burst window is finished. Uses a local counter only added to the global every 10K instructions to avoid synchronization costs. Adds a new marker with the ordinal of the trace window. This marker is added to each buffer header. This, combined with a new check for the window having changed to ensure a buffer dump at the end of each block, limits the possible window drift to one block's worth of data. Augments raw2trace to avoid delaying a branch across a window change. Augments the view tool to mark window changes and delay timestamp output to group with the proper window (it is difficult to actually reorder timestamp and window entries). Augments the basic_counts tool to track and display per-window global statistics. Augments the invariant_checker tool to not complain on a control-flow gap across a window. Adds a test of this: but disables it temporarily due to more emulation interopability issues which #5390 covers. Adds a simple online test and a simple offline test that just confirm multiple windows are hit on simple_app. Adds an assembly test with precise values for the windows. Issue: #3995, #53904 年前
i#3995 multi-window: Add repeated tracing window feature (#5402) Adds new options -trace_for_instrs and -retrace_every_instrs to drcachesim for periodic trace bursts of an unmodified application. Implements them by adapting the existing drbbdup cases for switching between -trace_after_instrs and full tracing. Adds documentation on the new options. Adds instru_t::get_instr_count to count instuctions while tracing, to know when a tracing burst window is finished. Uses a local counter only added to the global every 10K instructions to avoid synchronization costs. Adds a new marker with the ordinal of the trace window. This marker is added to each buffer header. This, combined with a new check for the window having changed to ensure a buffer dump at the end of each block, limits the possible window drift to one block's worth of data. Augments raw2trace to avoid delaying a branch across a window change. Augments the view tool to mark window changes and delay timestamp output to group with the proper window (it is difficult to actually reorder timestamp and window entries). Augments the basic_counts tool to track and display per-window global statistics. Augments the invariant_checker tool to not complain on a control-flow gap across a window. Adds a test of this: but disables it temporarily due to more emulation interopability issues which #5390 covers. Adds a simple online test and a simple offline test that just confirm multiple windows are hit on simple_app. Adds an assembly test with precise values for the windows. Issue: #3995, #53904 年前
i#3995 multi-window: Fix too-many-files and headers bugs (#5487) Fixes bugs where a huge number of files are opened in the first window of a multi-window drmemtrace run, and extra headers are added as well. Augments the windows-split test to run long enough to reproduce this problem, and adds to its output to detect errors in post-processing. Issue: #39954 年前
i#6104 multi-window: Refresh timestamps in a new window (#6165) Updates the timestamp in the first buffer of a new window in multi-window traces by refreshing the timestamp when re-starting tracing. Previously, the timestamp in the first buffer was coming from the end of a prior window causing low activity at the beginning of a new window. Adds a unit test that fails without the fix in this change but passes with the change. Fixes an issue where multi-window tracing fails to write the last window raw file. Fixes #6104 Fixes #62452 年前
i#5520 memtrace encodings: Add online encodings (#5682) Adds a new option -instr_encodings which enables instruction encoding records for online traces. This is under this off-by-default option as it adds significant overhead to online tracing and is only needed for some tools. Currently we emit the encoding again for every dynamic instance of an instruction. Future work involves recording which we've emitted to avoid duplicate instances (the reader caches prior encodings) but this requires careful consideration of global locks and per-thread invalidation on code changes which is out of the scope of this initial implementation. Updates the launcher and docs. Adds an online opcode_mix test and adds encodings to a basic_counts online test. Manually tested the view tool with and without -instr_encodings: $ bin64/drrun -t drcachesim -instr_encodings -simulator_type view -- suite/tests/bin/allasm_x86_64 ... 166: T1718245 ifetch 4 byte(s) @ 0x0000000000401028 48 83 eb 01 sub $0x0000000000000001 %rbx -> %rbx 167: T1718245 ifetch 4 byte(s) @ 0x000000000040102c 48 83 fb 00 cmp %rbx $0x0000000000000000 168: T1718245 ifetch 2 byte(s) @ 0x0000000000401030 75 d9 jnz $0x000000000040100b ... $ bin64/drrun -t drcachesim -simulator_type view -- suite/tests/bin/allasm_x86_64 ... 126: T1933188 ifetch 4 byte(s) @ 0x0000000000401028 non-branch 127: T1933188 ifetch 4 byte(s) @ 0x000000000040102c non-branch 128: T1933188 ifetch 2 byte(s) @ 0x0000000000401030 conditional jump ... Fixes #55203 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
i#4343 namespace: Add namespaces to droption (#6193) Places droption under dynamorio::droption. This is a breaking change and users will have to recompile. Updates all uses within the repository. Fixes #43432 年前
i#6112: Require a full output match in runmulti (#6113) Brackets the expected outpout with ^$ to require a complete match for tests using runmulti.cmake. This matches what we do for single-command tests for their PASS_REGULAR_EXPRESSION property. Fixes #61122 年前
i#4343 namespace: Add namespaces to droption (#6193) Places droption under dynamorio::droption. This is a breaking change and users will have to recompile. Updates all uses within the repository. Fixes #43432 年前
i#6294: Handle consecutive window-final branches (#6295) Adds a test case for consecutive window-final branches which reproduces a problem where the final is removed but the penultimate is then not marked taken/untaken. Updates raw2trace to correctly mark the penultimate. Also confirmed this fix on the drcacheoff.windows-invar test on aarch64 where it was first observed. Fixes #62942 年前
i#6164: Add new file type for bimodal filtered traces (#6231) Adds OFFLINE_FILE_TYPE_BIMODAL_FILTERED_WARMUP for traces that are filtered before the TRACE_MARKER_TYPE_FILTER_ENDPOINT marker and unfiltered after it. Adds invariant_checker checks to make sure the new file type and the filter end-point marker are always present together, or not at all. Adds a test that the record filter adds the filter end-point marker also for threads that start after the filtering stop_timestamp. Adds a shard_count member to basic_counts_t::counters_t to make it easier to write the new test without hard-coding count of threads in the test. Fixes: #61642 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
Reuse Distance: Add data access histogram to collected stats. (#6079) Adds a separate histogram for non-instruction access histograms. This primary histogram continues to include all accesses. The final output reports instruction and data reference counts, and print_histogram() includes both total and data-only accesses.3 年前
Replace {u,}int_least64_t with {u,}int64_t (#6239) Replaces the {u,}int_least64_t types used throughout the drcachesim code base with the more-precise {u,}int64_t types. We were treating them as 64-bit anyway in our printf codes and other places, and all our supported toolchains have precise 64-bit types. Adds a note to the release docs on the change.2 年前
Reuse Distance: Add data access histogram to collected stats. (#6079) Adds a separate histogram for non-instruction access histograms. This primary histogram continues to include all accesses. The final output reports instruction and data reference counts, and print_histogram() includes both total and data-only accesses.3 年前
i#5843 scheduler: Switch on a blocking syscall (#6163) Adds an input switch on a blocking syscall, without considering the current input even if it is the highest priority. Refactors pick_next_input() to use a helper function pick_next_input_as_previously() to make it easier to read the new wait state code. Adds a unit test with blocking syscalls and priorities to ensure lower-priority inputs are scheduled when a higher-priority input goes into a wait state. Regenerates the checked-in threadsig.x64 trace to contain syscall number and maybe-blocking markers and updates the associated tests' thread ids and expected output. Issue: #58432 年前
i#5843 scheduler: Switch on a blocking syscall (#6163) Adds an input switch on a blocking syscall, without considering the current input even if it is the highest priority. Refactors pick_next_input() to use a helper function pick_next_input_as_previously() to make it easier to read the new wait state code. Adds a unit test with blocking syscalls and priorities to ensure lower-priority inputs are scheduled when a higher-priority input goes into a wait state. Regenerates the checked-in threadsig.x64 trace to contain syscall number and maybe-blocking markers and updates the associated tests' thread ids and expected output. Issue: #58432 年前
i#6298 Use invariant_checker for drcachesim scattergather test (#6305) This should reduce the churn in the test output template files compared to basic_counts which it used before. Issues: #6298, #50362 年前
i#6298 Use invariant_checker for drcachesim scattergather test (#6305) This should reduce the churn in the test output template files compared to basic_counts which it used before. Issues: #6298, #50362 年前
i#5843 scheduler: Add better-diagnostic test and launcher output (#6273) Adds printing '.' for every record and '-' for waiting to the scheduler unit tests and udpates all the expected output. This makes it much easier to understand some of the results as now the lockstep timing all lines up. Adds -print_every to the launcher and switches to printing letters for a better output of what happened on each core (if #inputs<=26). Example: $ clients/bin64/scheduler_launcher -trace_dir drmemtrace.*.dir/trace -num_cores 4 -sched_quantum 60000 -print_every 5000 Core #0: GGGGGGGGG,HH,F,B,G,I,A,CC,G,BB,A,FF,AA,GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG Core #1: D,C,D,B,H,FF,EE,CC,II,AA,C,D,G,HH,D,G,II,G,I,G,I,G,HH,BB,II,BB,C,H,I,AA,C,F,I,H,II,AA,C,H,A,H,F,CC,DD,C,BB,HH,CC,F,BB,C,D,H,BB,D,B,EE,I,E,DD,B,F,H,A,D,C,D,E,B,D,I,D,AA,E,DD,EE,CC,II,C,D,I,AA,DD,B,E,I,D,C,E,FF,E,BB,EE,FF,E,AA,D,E,DD,H,BB,HH,D,H,BB,I,AA,II,H,A,FF,H,I,HH,DD,I,H,F,DD,I,A,HH,AA,CC,BB,CC,BB,D,B,FF,H,F,D,I,DD,FF,C,A,C,AA,F,AA,EE,A,D,E,FF,AA,F,A,E,A,E,DD,EE,F,E,F,A Core #2: F,E,F,C,F,H,I,B,HH,II,FF,CC,G,H,DD,E,A,G,H,G,DD,G,F,D,A,H,I,FF,H,C,A,CC,II,A,FF,C,I,F,CC,B,FF,C,B,H,CC,B,D,B,DD,B,F,I,F,II,D,A,DD,I,D,H,E,H,I,D,HH,FF,BB,II,AA,EE,B,A,BB,E,II,A,BB,A,HH,E,AA,E,F,A,DD,HH,F,H,A,E,I,FF,I,B,F,II,A,FF,D,H,DD,I,AA,F,D,FF,AA,D,A,HH,A,H,F,A,FF,C,F,B,F,C,F,AA,B,FF,D,F,DD,B,C,H,CC,B,C,E,D,EE,C,E,D,EE,F,DD,E,F,D,A,DD,E,D,EE,D,E,D,AA,D,A,DD,F,D,C,D Core #3: E,A,F,A,D,I,DD,BB,AA,BB,DD,G,EE,AA,H,G,D,B,G,B,G,II,F,HH,B,AA,I,B,A,HH,CC,HH,F,A,FF,C,HH,BB,F,D,F,C,FF,H,C,FF,DD,AA,I,B,II,AA,I,A,B,A,F,A,C,I,B,H,A,F,C,A,C,EE,F,D,EE,CC,E,BB,E,DD,E,CC,B,EE,C,EE,B,I,E,D,E,II,H,B,EE,I,EE,B,II,F,EE,A,D,AA,DD,HH,F,A,F,HH,D,A,II,H,F,II,FF,CC,B,AA,F,A,C,FF,D,C,D,CC,B,C,DD,H,I,F,CC,A,F,C,FF,E,A,DD,E,D,A,FF,AA,EE,F,DD,FF,E,F,EE,FF,AA,EEEEEEEEEEEEEEEE Issue: #58432 年前
i#5843 scheduler: Add unread_last_record() (#6302) Adds a new scheduler output stream interface unread_last_record(). This queues the just-read record for reading later. This is meant to aid simulators reading one record ahead to the next instruction, but not yet processing it. The new interface is limited in that it can only be called once at a time and while the output ordinals are fixed up other metrics like the output last timestamp and the input ordinals are not. Adds a new record type TRACE_TYPE_INVALID for use as a sentinel. Adds some sanity tests. Issue: #58432 年前
i#5979 decode: Rename ud2a/ud2b to ud2/ud1 and decode ud1 operands (#6087) The opcodes DR calls ud2a and ud2b are more commonly known (and documented by Intel) as ud2 and ud1, respectively. Rename them, preserving the old operand constants and instruction creation macros through preprocessor defines. Additionally, ud1 actually takes two operands. Fix the decode table for them. Fixes #59793 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: added use_physical option to config file reader (#6051) As the title says, this makes an existing option (use_physical) available in the cache simulator config file reader, so that it can be used when a config file is used to initialise the cache simulator instead of command line options. Adds a test to tests/config_reader_test.cpp and links that test file up to drcachesim_unit_tests: it was added in commit fa4cc4a but was never actually built or run! Now it is built and tested.3 年前
Revert "i#5490 ind br tgt: Stop skip and switch at target marker (#6241)" (#6248) This reverts commit bd11f79af594e2b3929bc2fc0b9bf961f0dc2837. It fails to apply a -1 to other outputs waiting for an input to reach its start instruction count when the input is at the pre-instr marker. The solution is non-trivial so we revert for now. Issue: #54902 年前
Fix spelling errors (#6171) Fixes a bunch of spelling errors identified by an external build lint checker.2 年前
Add a drmemtrace analysis tool for syscall mix (#6144) Adds a new drmemtrace analysis tool (syscall_mix) that counts the frequency of system calls in the trace. It uses the recently added TRACE_MARKER_TYPE_SYSCALL markers to count system calls. Adds unit tests that invoke syscall_mix in online and offline modes.2 年前
i#6131: Properly disable Windows popups (#6282) Adds debug flags to the test_helpers library to actually disable Windows popups as the prior attempt actually only succeeded on a couple of executables. Confirmed by running dumpbin on each binary and ensuring its disable_popups() function calls _CrtSetReportMode. This is rather slow though so it's not clear we want to add this as a build check. Removes test ignore directives listing #6131. (The gencode one is actually most likely properly fixed by PR #6281 as the raw2trace wow64 syscall issue was likely the cause of the popup.) Issue: #6280, #6131 Fixes #61312 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#5694: Add core-oriented analysis tool support (#6279) Adds a new type of sharding for drmemtrace analysis tools: by core instead of by thread. Introduces a shard_type_t enum (SHARD_BY_THREAD and SHARD_BY_CORE) passed to a new analysis_tool_t::initialize_shard_type() function to inform tools of the shard type (this cannot be easily added to the stream interface as the scheduler is not aware of the shard type). Adds a new memtrace_stream_t::get_output_cpuid() query to get the output cpu ordinal, or for replaying as-traced the original traced cpuid (#6262). Implements this for the scheduler. This addresses #6262. Generalizes analyzer_t to take in scheduler options for SHARD_BY_CORE to support analysis tools using the full range of schedules. In this mode, the core count is the worker count. Updates the shard index to be the core ordinal. Adds time-based scheduling support with analyzer_t using wall-clock time as the current time. Adds a number of options to set sharding mode (-core_sharding, -core_serial (not yet implemented)) and control the schedule (-sched_quantum, -sched_time, sched_order_time, -record_file, -replay_file, -cpu_schedule_file). Updates the basic_counts tool to support core sharding. Adds a new test core_sharded_test which leverages the analyzer_multi and option parsing to test the top-level options within a framework that can capture the output and run multiple tests sequentially in a simpler framework than having a separate test with an output file for each parameter being tested. Left as future work: + Convert scheduler_launcher into a new schedule_stats tool + Add a new record to indicate STATUS_WAIT + Add -core_serial support + Convert drcachesim default and -cpu_scheduling to use get_output_cpuid() Issue: #5694, #6262 Fixes #62622 年前
i#4343: Add dynamorio::drmemtrace namespace to all drcachesim/ code (#6169) Adds the dynamorio::drmemtrace namespace to all drcachesim/ code. It was already present on newer code. This breaks compatibility and external code using these files will need to be updated and recompiled. Shifts suite/tests/rseq.c to be C++ code so it can continue to test drmemtrace_client_main() which is now inside the namespace. Fixes #43432 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
drcachesim: add cache name and parameter accessors. (#6200) Adds a name to caching_device, with accessors for the name and other cache parameters. Added a "caching_device" pointer to caching_device_stats, to make it easier for client code to access the cache associated with a stats object. Updated drcachesim output reports to include cache names and a short description of each cache's configuration. Updated tests for the output format changes and new methods.2 年前
i#6104 multi-window: Refresh timestamps in a new window (#6165) Updates the timestamp in the first buffer of a new window in multi-window traces by refreshing the timestamp when re-starting tracing. Previously, the timestamp in the first buffer was coming from the end of a prior window causing low activity at the beginning of a new window. Adds a unit test that fails without the fix in this change but passes with the change. Fixes an issue where multi-window tracing fails to write the last window raw file. Fixes #6104 Fixes #62452 年前
i#3995 multi-window: Add repeated tracing window feature (#5402) Adds new options -trace_for_instrs and -retrace_every_instrs to drcachesim for periodic trace bursts of an unmodified application. Implements them by adapting the existing drbbdup cases for switching between -trace_after_instrs and full tracing. Adds documentation on the new options. Adds instru_t::get_instr_count to count instuctions while tracing, to know when a tracing burst window is finished. Uses a local counter only added to the global every 10K instructions to avoid synchronization costs. Adds a new marker with the ordinal of the trace window. This marker is added to each buffer header. This, combined with a new check for the window having changed to ensure a buffer dump at the end of each block, limits the possible window drift to one block's worth of data. Augments raw2trace to avoid delaying a branch across a window change. Augments the view tool to mark window changes and delay timestamp output to group with the proper window (it is difficult to actually reorder timestamp and window entries). Augments the basic_counts tool to track and display per-window global statistics. Augments the invariant_checker tool to not complain on a control-flow gap across a window. Adds a test of this: but disables it temporarily due to more emulation interopability issues which #5390 covers. Adds a simple online test and a simple offline test that just confirm multiple windows are hit on simple_app. Adds an assembly test with precise values for the windows. Issue: #3995, #53904 年前