// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. #include #include // clang-format off #include #include // clang-format on #include "logger.hpp" template T readEnv(const std::string& envName, const T& defaultValue) { const char* envCstr = getenv(envName.c_str()); if (envCstr == nullptr) return defaultValue; if constexpr (std::is_same_v) { return atoi(envCstr); } else if constexpr (std::is_same_v) { return (std::string(envCstr) != "0"); } else { return T(envCstr); } } template void readAndSetEnv(const std::string& envName, T& env) { const char* envCstr = getenv(envName.c_str()); if (envCstr == nullptr) return; if constexpr (std::is_same_v) { env = atoi(envCstr); } else if constexpr (std::is_same_v) { env = (std::string(envCstr) != "0"); } else { env = std::string(envCstr); } } template void logEnv(const std::string& envName, const T& env) { if (!getenv(envName.c_str())) return; INFO(mscclpp::ENV, envName, "=", env); } namespace mscclpp { Env::Env() : debug(readEnv("MSCCLPP_DEBUG", "")), debugSubsys(readEnv("MSCCLPP_DEBUG_SUBSYS", "")), debugFile(readEnv("MSCCLPP_DEBUG_FILE", "")), logLevel(readEnv("MSCCLPP_LOG_LEVEL", "ERROR")), logSubsys(readEnv("MSCCLPP_LOG_SUBSYS", "ALL")), logFile(readEnv("MSCCLPP_LOG_FILE", "")), hcaDevices(readEnv("MSCCLPP_HCA_DEVICES", "")), ibvSo(readEnv("MSCCLPP_IBV_SO", "")), hostid(readEnv("MSCCLPP_HOSTID", "")), socketFamily(readEnv("MSCCLPP_SOCKET_FAMILY", "")), socketIfname(readEnv("MSCCLPP_SOCKET_IFNAME", "")), commId(readEnv("MSCCLPP_COMM_ID", "")), cacheDir(readEnv("MSCCLPP_CACHE_DIR", readEnv("HOME", "~") + "/.cache/mscclpp")), npkitDumpDir(readEnv("MSCCLPP_NPKIT_DUMP_DIR", "")), cudaIpcUseDefaultStream(readEnv("MSCCLPP_CUDAIPC_USE_DEFAULT_STREAM", false)), ncclSharedLibPath(readEnv("MSCCLPP_NCCL_LIB_PATH", "")), forceNcclFallbackOperation(readEnv("MSCCLPP_FORCE_NCCL_FALLBACK_OPERATION", "")), disableChannelCache(readEnv("MSCCLPP_DISABLE_CHANNEL_CACHE", false)), forceDisableNvls(readEnv("MSCCLPP_FORCE_DISABLE_NVLS", false)) {} std::shared_ptr env() { static std::shared_ptr globalEnv = std::shared_ptr(new Env()); static bool logged = false; if (!logged) { logged = true; // cannot log inside the constructor because of circular dependency logEnv("MSCCLPP_DEBUG", globalEnv->debug); logEnv("MSCCLPP_DEBUG_SUBSYS", globalEnv->debugSubsys); logEnv("MSCCLPP_DEBUG_FILE", globalEnv->debugFile); logEnv("MSCCLPP_LOG_LEVEL", globalEnv->logLevel); logEnv("MSCCLPP_LOG_SUBSYS", globalEnv->logSubsys); logEnv("MSCCLPP_LOG_FILE", globalEnv->logFile); logEnv("MSCCLPP_HCA_DEVICES", globalEnv->hcaDevices); logEnv("MSCCLPP_IBV_SO", globalEnv->ibvSo); logEnv("MSCCLPP_HOSTID", globalEnv->hostid); logEnv("MSCCLPP_SOCKET_FAMILY", globalEnv->socketFamily); logEnv("MSCCLPP_SOCKET_IFNAME", globalEnv->socketIfname); logEnv("MSCCLPP_COMM_ID", globalEnv->commId); logEnv("MSCCLPP_CACHE_DIR", globalEnv->cacheDir); logEnv("MSCCLPP_NPKIT_DUMP_DIR", globalEnv->npkitDumpDir); logEnv("MSCCLPP_CUDAIPC_USE_DEFAULT_STREAM", globalEnv->cudaIpcUseDefaultStream); logEnv("MSCCLPP_NCCL_LIB_PATH", globalEnv->ncclSharedLibPath); logEnv("MSCCLPP_FORCE_NCCL_FALLBACK_OPERATION", globalEnv->forceNcclFallbackOperation); logEnv("MSCCLPP_DISABLE_CHANNEL_CACHE", globalEnv->disableChannelCache); logEnv("MSCCLPP_FORCE_DISABLE_NVLS", globalEnv->forceDisableNvls); } return globalEnv; } } // namespace mscclpp