Add support for pinning EventLoops
This can be used to help tune realtime performance.
Change-Id: I88031fe65d298b769742bb638a716d29fc965ffd
diff --git a/aos/events/shm_event_loop.h b/aos/events/shm_event_loop.h
index d3f1295..15759f4 100644
--- a/aos/events/shm_event_loop.h
+++ b/aos/events/shm_event_loop.h
@@ -66,6 +66,7 @@
void OnRun(std::function<void()> on_run) override;
void SetRuntimeRealtimePriority(int priority) override;
+ void SetRuntimeAffinity(const cpu_set_t &cpuset) override;
void set_name(const std::string_view name) override;
const std::string_view name() const override { return name_; }
@@ -94,6 +95,14 @@
friend class internal::ShmSender;
friend class internal::ShmFetcher;
+ static cpu_set_t DefaultAffinity() {
+ cpu_set_t result;
+ for (int i = 0; i < CPU_SETSIZE; ++i) {
+ CPU_SET(i, &result);
+ }
+ return result;
+ }
+
void HandleEvent();
// Returns the TID of the event loop.
@@ -104,6 +113,7 @@
std::vector<std::function<void()>> on_run_;
int priority_ = 0;
+ cpu_set_t affinity_ = DefaultAffinity();
std::string name_;
const Node *const node_;