FEXCore: Allows disabling telemetry at runtime

This is useful for InstCountCI so you can disable the telemetry
gathering even if enabled so it doesn't affect the CI system.
This commit is contained in:
Ryan Houdek 2023-08-30 12:31:41 -07:00
parent 02b891c0fe
commit 81a32c3998
8 changed files with 55 additions and 22 deletions

View File

@ -64,11 +64,13 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
run: cmake $GITHUB_WORKSPACE -DENABLE_OFFLINE_TELEMETRY=False -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DENABLE_VIXL_SIMULATOR=False -DENABLE_VIXL_DISASSEMBLER=True -DENABLE_LTO=False -DENABLE_ASSERTIONS=True
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DENABLE_VIXL_SIMULATOR=False -DENABLE_VIXL_DISASSEMBLER=True -DENABLE_LTO=False -DENABLE_ASSERTIONS=True
- name: Build
working-directory: ${{runner.workspace}}/build
shell: bash
env:
FEX_DISABLETELEMETRY: 1
# Execute the build. You can specify a specific target with "--target <NAME>"
run: cmake --build . --config $BUILD_TYPE --target CodeSizeValidation instcountci_test_files

View File

@ -329,6 +329,14 @@
"Allows overriding the SVE width in the vixl simulator.",
"Useful as a debugging feature."
]
},
"DisableTelemetry": {
"Type": "bool",
"Default": "false",
"Desc": [
"Disables telemetry at runtime.",
"Useful for CI instcountCI mostly"
]
}
},
"Logging": {

View File

@ -238,6 +238,7 @@ namespace FEXCore::Context {
FEX_CONFIG_OPT(ParanoidTSO, PARANOIDTSO);
FEX_CONFIG_OPT(CacheObjectCodeCompilation, CACHEOBJECTCODECOMPILATION);
FEX_CONFIG_OPT(x87ReducedPrecision, X87REDUCEDPRECISION);
FEX_CONFIG_OPT(DisableTelemetry, DISABLETELEMETRY);
} Config;
FEXCore::HostFeatures HostFeatures;

View File

@ -4858,6 +4858,11 @@ void OpDispatchBuilder::CheckLegacySegmentRead(OrderedNode *NewNode, uint32_t Se
return;
}
if (CTX->Config.DisableTelemetry()) {
// Telemetry disabled at runtime.
return;
}
FEXCore::Telemetry::TelemetryType TelemIndex{};
switch (SegmentReg) {
case FEXCore::X86Tables::DecodeFlags::FLAG_ES_PREFIX:
@ -4892,6 +4897,11 @@ void OpDispatchBuilder::CheckLegacySegmentWrite(OrderedNode *NewNode, uint32_t S
return;
}
if (CTX->Config.DisableTelemetry()) {
// Telemetry disabled at runtime.
return;
}
FEXCore::Telemetry::TelemetryType TelemIndex{};
switch (SegmentReg) {
case FEXCore::X86Tables::DecodeFlags::FLAG_ES_PREFIX:

View File

@ -33,7 +33,15 @@ namespace FEXCore::Telemetry {
"Uses 32-bit Segment CS",
"Uses 32-bit Segment DS",
};
static bool Enabled {true};
void Initialize() {
FEX_CONFIG_OPT(DisableTelemetry, DISABLETELEMETRY);
if (DisableTelemetry) {
Enabled = false;
return;
}
auto DataDirectory = Config::GetDataDirectory();
DataDirectory += "Telemetry/";
@ -45,6 +53,10 @@ namespace FEXCore::Telemetry {
}
void Shutdown(fextl::string const &ApplicationName) {
if (!Enabled) {
return;
}
auto DataDirectory = Config::GetDataDirectory();
DataDirectory += "Telemetry/" + ApplicationName + ".telem";

View File

@ -239,9 +239,7 @@ namespace FEXCore::Core {
uint64_t FallbackHandlerPointers[FallbackHandlerIndex::OPINDEX_MAX];
uint64_t NamedVectorConstantPointers[FEXCore::IR::NamedVectorConstant::NAMED_VECTOR_MAX];
uint64_t IndexedNamedVectorConstantPointers[FEXCore::IR::IndexNamedVectorConstant::INDEXED_NAMED_VECTOR_MAX];
#ifndef FEX_DISABLE_TELEMETRY
uint64_t TelemetryValueAddresses[FEXCore::Telemetry::TYPE_LAST];
#endif
// Thread Specific
/**

View File

@ -9,25 +9,6 @@
#include <filesystem>
namespace FEXCore::Telemetry {
#ifndef FEX_DISABLE_TELEMETRY
class Value;
class Value final {
public:
Value() = default;
Value(uint64_t Default) : Data {Default} {}
uint64_t operator*() const { return Data; }
void operator=(uint64_t Value) { Data = Value; }
void operator|=(uint64_t Value) { Data |= Value; }
void operator++(int) { Data++; }
std::atomic<uint64_t> *GetAddr() { return &Data; }
private:
std::atomic<uint64_t> Data;
};
enum TelemetryType {
TYPE_HAS_SPLIT_LOCKS,
TYPE_16BYTE_SPLIT,
@ -51,6 +32,25 @@ namespace FEXCore::Telemetry {
TYPE_LAST,
};
#ifndef FEX_DISABLE_TELEMETRY
class Value;
class Value final {
public:
Value() = default;
Value(uint64_t Default) : Data {Default} {}
uint64_t operator*() const { return Data; }
void operator=(uint64_t Value) { Data = Value; }
void operator|=(uint64_t Value) { Data |= Value; }
void operator++(int) { Data++; }
std::atomic<uint64_t> *GetAddr() { return &Data; }
private:
std::atomic<uint64_t> Data;
};
FEX_DEFAULT_VISIBILITY Value &GetTelemetryValue(TelemetryType Type);
FEX_DEFAULT_VISIBILITY void Initialize();

View File

@ -377,6 +377,8 @@ int main(int argc, char **argv, char **const envp) {
FEXCore::Config::EraseSet(FEXCore::Config::CONFIG_DISASSEMBLE, fextl::fmt::format("{}", static_cast<uint64_t>(FEXCore::Config::Disassemble::BLOCKS | FEXCore::Config::Disassemble::STATS)));
// Choose bitness.
FEXCore::Config::EraseSet(FEXCore::Config::CONFIG_IS64BIT_MODE, TestHeaderData->Bitness == 64 ? "1" : "0");
// Disable telemetry, it can affect instruction counts.
FEXCore::Config::EraseSet(FEXCore::Config::CONFIG_DISABLETELEMETRY, "1");
// Host feature override. Only supports overriding SVE width.
enum HostFeatures {