diff --git a/src/main/cpp/faultinj/faultinj.cu b/src/main/cpp/faultinj/faultinj.cu index 031327a88bd..19902783b86 100644 --- a/src/main/cpp/faultinj/faultinj.cu +++ b/src/main/cpp/faultinj/faultinj.cu @@ -281,7 +281,7 @@ void CUPTIAPI faultInjectionCallbackHandler(void*, if (injectionProbability < 100) { if (injectionProbability <= 0) { return; } - const int rand10000 = rand() % 10000; + const int rand10000 = std::rand() % 10000; const int skipThreshold = injectionProbability * 10000 / 100; spdlog::trace("rand1000={} skipThreshold={}", rand10000, skipThreshold); if (rand10000 >= skipThreshold) { return; } @@ -336,7 +336,7 @@ void CUPTIAPI faultInjectionCallbackHandler(void*, break; } - default: ; + default:; } } @@ -366,6 +366,11 @@ void readFaultInjectorConfig(void) // const std::string dynamicConfigKey = "dynamic"; + // An unsigned int to seed the random number generator to deterministically + // recreate a fault sequence + // + const std::string seedKey = "seed"; + // To retrieve a map of driver/runtime fault configs // "functionName" -> fault config // "CUPT callback id" -> fault config @@ -381,6 +386,11 @@ void readFaultInjectorConfig(void) globalControl.dynamic = globalControl.configRoot.get_optional(dynamicConfigKey).value_or(false); + const unsigned seed = + globalControl.configRoot.get_optional(seedKey).value_or(std::time(0)); + spdlog::info("Seeding std::srand with {}", seed); + std::srand(seed); + const spdlog::level::level_enum logLevelEnum = static_cast(logLevel); spdlog::info("changed log level to {}", logLevelEnum); spdlog::set_level(logLevelEnum); diff --git a/src/test/cpp/faultinj/test_faultinj.json b/src/test/cpp/faultinj/test_faultinj.json index 49b33dd9cb8..95185893325 100644 --- a/src/test/cpp/faultinj/test_faultinj.json +++ b/src/test/cpp/faultinj/test_faultinj.json @@ -1,5 +1,6 @@ { "logLevel": 1, + "seed": 12345, "dynamic": true, "cudaRuntimeFaults": { "cudaLaunchKernel_ptsz": { @@ -12,8 +13,14 @@ "*": { "percent": 0, "injectionType": 2, - "substituteReturnCode": 999, - "interceptionCount": 1 + "substituteReturnCode": 2, + "interceptionCount": 1000 + }, + "cuLaunchKernel_ptsz": { + "percent": 0, + "injectionType": 2, + "substituteReturnCode": 2, + "interceptionCount": 1000 } } }