Skip to content

Commit

Permalink
#2389: trace: fix between-scheduler events when method invoked direct…
Browse files Browse the repository at this point in the history
…ly (without scheduler)
  • Loading branch information
lifflander committed Feb 14, 2025
1 parent 5bee2b8 commit 28e4f97
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 4 deletions.
10 changes: 10 additions & 0 deletions src/vt/context/runnable_context/trace.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ void Trace::start(TimeType time) {
return;
}

// If our scheduler depth is zero, we need to end the between scheduler event
if (theSched()->getSchedulerDepth() == 0) {
at_sched_depth_zero_ = true;
theTrace()->beginSchedulerLoop();
}

auto const trace_id = auto_registry::handlerTraceID(handler_);

if (is_collection_) {
Expand All @@ -93,6 +99,10 @@ void Trace::finish(TimeType time) {
}

theTrace()->endProcessing(processing_tag_, time);

if (at_sched_depth_zero_) {
theTrace()->endSchedulerLoop();
}
}

void Trace::suspend(TimeType time) {
Expand Down
2 changes: 2 additions & 0 deletions src/vt/context/runnable_context/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ struct Trace {
uint64_t idx1_ = 0, idx2_ = 0, idx3_ = 0, idx4_ = 0;
/// The open processing tag
trace::TraceProcessingTag processing_tag_;
/// At scheduler depth zero
bool at_sched_depth_zero_ = false;
};

#else
Expand Down
2 changes: 2 additions & 0 deletions src/vt/registry/auto/auto_registry_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ struct HandlersDispatcher final : BaseHandlersDispatcher {
}
} else if constexpr (std::is_same_v<ObjT, SentinelObject>) {
std::apply(fp, msg->getTuple());
} else if constexpr (std::is_same_v<MsgT, void>) {
// do nothing
} else {
if constexpr (IsColTrait<ObjT>::value and IsWrapMsgTrait<MsgT>::value) {
auto& m = msg->getMsg();
Expand Down
2 changes: 2 additions & 0 deletions src/vt/scheduler/scheduler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -303,11 +303,13 @@ void Scheduler::runSchedulerOnceImpl(bool msg_only) {

Scheduler::SchedulerLoopGuard::SchedulerLoopGuard(Scheduler* scheduler)
: scheduler_{scheduler} {
scheduler_->in_sched_depth_++;
scheduler_->triggerEvent(SchedulerEventType::BeginSchedulerLoop);
}

Scheduler::SchedulerLoopGuard::~SchedulerLoopGuard() {
scheduler_->triggerEvent(SchedulerEventType::EndSchedulerLoop);
scheduler_->in_sched_depth_--;
}

void Scheduler::runSchedulerWhile(std::function<bool()> cond) {
Expand Down
8 changes: 8 additions & 0 deletions src/vt/scheduler/scheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,11 @@ struct Scheduler : runtime::component::Component<Scheduler> {
*/
void setRecentTimeToStale() { is_recent_time_stale_ = true; }

/**
* \brief Get the current recursive scheduler depth
*/
unsigned int getSchedulerDepth() const { return in_sched_depth_; }

#if vt_check_enabled(fcontext)
/**
* \brief Get the thread manager
Expand All @@ -363,6 +368,7 @@ struct Scheduler : runtime::component::Component<Scheduler> {
| is_idle
| is_idle_minus_term
| action_depth_
| in_sched_depth_
| num_term_msgs_
| event_triggers
| event_triggers_once
Expand Down Expand Up @@ -430,6 +436,8 @@ struct Scheduler : runtime::component::Component<Scheduler> {
bool is_idle_minus_term = true;
// The depth of work action currently executing.
unsigned int action_depth_ = 0;
/// In-scheduler depth, zero indicates not in a scheduler
unsigned int in_sched_depth_ = 0;

// The number of termination messages currently in the queue---they weakly
// imply idleness for the stake of termination
Expand Down
9 changes: 5 additions & 4 deletions src/vt/trace/trace.cc
Original file line number Diff line number Diff line change
Expand Up @@ -349,8 +349,9 @@ TraceProcessingTag Trace::beginProcessing(

vt_debug_print(
normal, trace,
"event_start: ep={}, event={}, time={}, from={}, entry chare={}\n",
ep, event, time, from_node, TraceRegistry::getEvent(ep).theEventSeq()
"event_start: ep={}, event={}, time={}, from={}, entry chare={}, name={}\n",
ep, event, time, from_node, TraceRegistry::getEvent(ep).theEventSeq(),
TraceRegistry::getEvent(ep).theEventName()
);

auto const type = TraceConstantsType::BeginProcessing;
Expand Down Expand Up @@ -394,9 +395,9 @@ void Trace::endProcessing(

vt_debug_print(
normal, trace,
"event_stop: ep={}, event={}, time={}, from_node={}, entry chare={}\n",
"event_stop: ep={}, event={}, time={}, from_node={}, entry chare={}, name={}\n",
ep, event, time, open_events_.back().node,
TraceRegistry::getEvent(ep).theEventSeq()
TraceRegistry::getEvent(ep).theEventSeq(), TraceRegistry::getEvent(ep).theEventName()
);

vtAssert(
Expand Down

0 comments on commit 28e4f97

Please sign in to comment.