Skip to content

Commit

Permalink
scheduling_group: make allocate_scheduling_group_specific_data internal
Browse files Browse the repository at this point in the history
Move the function allocate_scheduling_group_specific_data from reactor
class to an internal static function.

Change it to handle only the allocation and construction of the data
object, while the caller handles the assignment of it.
  • Loading branch information
mlitvk committed Jan 21, 2025
1 parent c3f33c1 commit 19c266c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
1 change: 0 additions & 1 deletion include/seastar/core/reactor.hh
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,6 @@ private:
task_queue* pop_active_task_queue(sched_clock::time_point now);
void insert_activating_task_queues();
void account_runtime(task_queue& tq, sched_clock::duration runtime);
void allocate_scheduling_group_specific_data(scheduling_group sg, unsigned long key_id);
future<> rename_scheduling_group_specific_data(scheduling_group sg);
future<> init_scheduling_group(scheduling_group sg, sstring name, sstring shortname, float shares);
future<> init_new_scheduling_group_key(scheduling_group_key key, scheduling_group_key_config cfg);
Expand Down
31 changes: 19 additions & 12 deletions src/core/reactor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4895,19 +4895,17 @@ deallocate_scheduling_group_id(unsigned id) noexcept {
s_used_scheduling_group_ids_bitmap.fetch_and(~(1ul << id), std::memory_order_relaxed);
}

void
reactor::allocate_scheduling_group_specific_data(scheduling_group sg, unsigned long key_id) {
auto& sg_data = _scheduling_group_specific_data;
auto& this_sg = sg_data.per_scheduling_group_data[sg._id];
const auto& cfg = sg_data.scheduling_group_key_configs[key_id];
this_sg.specific_vals.resize(std::max<size_t>(this_sg.specific_vals.size(), key_id+1));
this_sg.specific_vals[key_id] = aligned_alloc(cfg.alignment, cfg.allocation_size);
if (!this_sg.specific_vals[key_id]) {
static
void*
allocate_scheduling_group_specific_data(scheduling_group sg, unsigned long key_id, const scheduling_group_key_config& cfg) {
void* val = aligned_alloc(cfg.alignment, cfg.allocation_size);
if (!val) {
std::abort();
}
if (cfg.constructor) {
cfg.constructor(this_sg.specific_vals[key_id]);
cfg.constructor(val);
}
return val;
}

future<>
Expand Down Expand Up @@ -4936,7 +4934,10 @@ reactor::init_scheduling_group(seastar::scheduling_group sg, sstring name, sstri

return with_scheduling_group(sg, [this, sg, &sg_data] () {
for (const auto& [key_id, cfg] : sg_data.scheduling_group_key_configs) {
allocate_scheduling_group_specific_data(sg, key_id);
auto& sg_data = _scheduling_group_specific_data;
auto& this_sg = sg_data.per_scheduling_group_data[sg._id];
this_sg.specific_vals.resize(std::max<size_t>(this_sg.specific_vals.size(), key_id+1));
this_sg.specific_vals[key_id] = allocate_scheduling_group_specific_data(sg, key_id, cfg);
}
});
});
Expand All @@ -4956,10 +4957,16 @@ reactor::init_new_scheduling_group_key(scheduling_group_key key, scheduling_grou
auto curr = current_scheduling_group();
auto cleanup = defer([curr] () noexcept { *internal::current_scheduling_group_ptr() = curr; });
*internal::current_scheduling_group_ptr() = sg;
allocate_scheduling_group_specific_data(sg, key_id);
auto& sg_data = _scheduling_group_specific_data;
auto& this_sg = sg_data.per_scheduling_group_data[sg._id];
this_sg.specific_vals.resize(std::max<size_t>(this_sg.specific_vals.size(), key_id+1));
this_sg.specific_vals[key_id] = allocate_scheduling_group_specific_data(sg, key_id, sg_data.scheduling_group_key_configs[key_id]);
} else {
return with_scheduling_group(sg, [this, key_id, sg] () {
allocate_scheduling_group_specific_data(sg, key_id);
auto& sg_data = _scheduling_group_specific_data;
auto& this_sg = sg_data.per_scheduling_group_data[sg._id];
this_sg.specific_vals.resize(std::max<size_t>(this_sg.specific_vals.size(), key_id+1));
this_sg.specific_vals[key_id] = allocate_scheduling_group_specific_data(sg, key_id, sg_data.scheduling_group_key_configs[key_id]);
});
}
}
Expand Down

0 comments on commit 19c266c

Please sign in to comment.