mirror of
https://github.com/vale981/ray
synced 2025-03-09 04:46:38 -04:00
[xray] Fix valgrind crash when memory profiling raylet (#2583)
* use different random number generator to be compatible with older valgrind versions * seed from time * style * fix * remove more random devices * also remove random_device from global scheduler * rename mutex * linting
This commit is contained in:
parent
f093ed1fc6
commit
143a118fbf
4 changed files with 31 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
|||
#ifndef GLOBAL_SCHEDULER_ALGORITHM_H
|
||||
#define GLOBAL_SCHEDULER_ALGORITHM_H
|
||||
|
||||
#include <chrono>
|
||||
#include <random>
|
||||
|
||||
#include "common.h"
|
||||
|
@ -25,9 +26,16 @@ enum class GlobalSchedulerAlgorithm {
|
|||
class GlobalSchedulerPolicyState {
|
||||
public:
|
||||
GlobalSchedulerPolicyState(int64_t round_robin_index)
|
||||
: round_robin_index_(round_robin_index), gen_(rd_()) {}
|
||||
: round_robin_index_(round_robin_index),
|
||||
gen_(std::chrono::high_resolution_clock::now()
|
||||
.time_since_epoch()
|
||||
.count()) {}
|
||||
|
||||
GlobalSchedulerPolicyState() : round_robin_index_(0), gen_(rd_()) {}
|
||||
GlobalSchedulerPolicyState()
|
||||
: round_robin_index_(0),
|
||||
gen_(std::chrono::high_resolution_clock::now()
|
||||
.time_since_epoch()
|
||||
.count()) {}
|
||||
|
||||
/// Return the policy's random number generator.
|
||||
///
|
||||
|
@ -42,8 +50,6 @@ class GlobalSchedulerPolicyState {
|
|||
private:
|
||||
/// The index of the next local scheduler to assign a task to.
|
||||
int64_t round_robin_index_;
|
||||
/// Internally maintained random number engine device.
|
||||
std::random_device rd_;
|
||||
/// Internally maintained random number generator.
|
||||
std::mt19937_64 gen_;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#include "ray/id.h"
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#include <chrono>
|
||||
#include <mutex>
|
||||
#include <random>
|
||||
|
||||
#include "ray/constants.h"
|
||||
|
@ -8,6 +11,12 @@
|
|||
|
||||
namespace ray {
|
||||
|
||||
std::mt19937 RandomlySeededMersenneTwister() {
|
||||
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
|
||||
std::mt19937 seeded_engine(seed);
|
||||
return seeded_engine;
|
||||
}
|
||||
|
||||
UniqueID::UniqueID(const plasma::UniqueID &from) {
|
||||
std::memcpy(&id_, from.data(), kUniqueIDSize);
|
||||
}
|
||||
|
@ -15,9 +24,15 @@ UniqueID::UniqueID(const plasma::UniqueID &from) {
|
|||
UniqueID UniqueID::from_random() {
|
||||
UniqueID id;
|
||||
uint8_t *data = id.mutable_data();
|
||||
std::random_device engine;
|
||||
// NOTE(pcm): The right way to do this is to have one std::mt19937 per
|
||||
// thread (using the thread_local keyword), but that's not supported on
|
||||
// older versions of macOS (see https://stackoverflow.com/a/29929949)
|
||||
static std::mutex random_engine_mutex;
|
||||
std::lock_guard<std::mutex> lock(random_engine_mutex);
|
||||
static std::mt19937 generator = RandomlySeededMersenneTwister();
|
||||
std::uniform_int_distribution<uint32_t> dist(0, std::numeric_limits<uint8_t>::max());
|
||||
for (int i = 0; i < kUniqueIDSize; i++) {
|
||||
data[i] = static_cast<uint8_t>(engine());
|
||||
data[i] = static_cast<uint8_t>(dist(generator));
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "scheduling_policy.h"
|
||||
|
||||
#include <chrono>
|
||||
|
||||
#include "ray/util/logging.h"
|
||||
|
||||
namespace ray {
|
||||
|
@ -7,7 +9,8 @@ namespace ray {
|
|||
namespace raylet {
|
||||
|
||||
SchedulingPolicy::SchedulingPolicy(const SchedulingQueue &scheduling_queue)
|
||||
: scheduling_queue_(scheduling_queue), gen_(rd_()) {}
|
||||
: scheduling_queue_(scheduling_queue),
|
||||
gen_(std::chrono::high_resolution_clock::now().time_since_epoch().count()) {}
|
||||
|
||||
std::unordered_map<TaskID, ClientID> SchedulingPolicy::Schedule(
|
||||
const std::unordered_map<ClientID, SchedulingResources> &cluster_resources,
|
||||
|
|
|
@ -38,8 +38,6 @@ class SchedulingPolicy {
|
|||
private:
|
||||
/// An immutable reference to the scheduling task queues.
|
||||
const SchedulingQueue &scheduling_queue_;
|
||||
/// Internally maintained random number engine device.
|
||||
std::random_device rd_;
|
||||
/// Internally maintained random number generator.
|
||||
std::mt19937_64 gen_;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue