This is an automated email from the ASF dual-hosted git repository.

bmahler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git


The following commit(s) were added to refs/heads/master by this push:
     new 5ced87849 [cgroups2] Use OomListener in MemoryControllerProcess.
5ced87849 is described below

commit 5ced8784963034364fab2ebb83ed10c46f15b258
Author: Jason Zhou <[email protected]>
AuthorDate: Thu Aug 22 16:20:07 2024 -0400

    [cgroups2] Use OomListener in MemoryControllerProcess.
    
    The MemoryControllerProcess needs an OomListener to ensure that it does
    not need to listen for oom events by polling, which causes race
    conditions with the oom killer.
    
    We spawn an OomListener in the MemoryControllerProcess and use it
    to listen for oom events in any cgroup via oomListen().
    
    Review: https://reviews.apache.org/r/75185/
---
 .../mesos/isolators/cgroups2/controllers/memory.cpp    | 18 ++++++++++++++----
 .../mesos/isolators/cgroups2/controllers/memory.hpp    |  7 ++++++-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git 
a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.cpp
index 361fbb6b9..ff91b5d4a 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.cpp
@@ -35,6 +35,7 @@ using process::PID;
 using process::Owned;
 
 using cgroups2::memory::Stats;
+using cgroups2::memory::OomListener;
 
 using mesos::slave::ContainerConfig;
 using mesos::slave::ContainerLimitation;
@@ -48,13 +49,22 @@ namespace slave {
 
 Try<Owned<ControllerProcess>> MemoryControllerProcess::create(const Flags& 
flags)
 {
-  return Owned<ControllerProcess>(new MemoryControllerProcess(flags));
+  Try<OomListener> listener = OomListener::create();
+  if (listener.isError()) {
+    return Error(
+        "Could not create oom listener for MemoryControllerProcess: "
+        + listener.error());
+  }
+  return Owned<ControllerProcess>(
+      new MemoryControllerProcess(flags, std::move(*listener)));
 }
 
 
-MemoryControllerProcess::MemoryControllerProcess(const Flags& _flags)
+MemoryControllerProcess::MemoryControllerProcess(
+    const Flags& _flags,  OomListener&& _oomListener)
   : ProcessBase(process::ID::generate("cgroups-v2-memory-controller")),
-    ControllerProcess(_flags) {}
+    ControllerProcess(_flags),
+    oomListener(std::move(_oomListener)) {}
 
 
 string MemoryControllerProcess::name() const
@@ -277,7 +287,7 @@ void MemoryControllerProcess::oomListen(
     return;
   }
 
-  infos[containerId].oom = cgroups2::memory::oom(cgroup);
+  infos[containerId].oom = oomListener.listen(cgroup);
 
   LOG(INFO) << "Listening for OOM events for container "
             << containerId;
diff --git 
a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.hpp
index 4a80717e6..1c4429c13 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/memory.hpp
@@ -25,6 +25,7 @@
 
 #include "slave/flags.hpp"
 #include "slave/containerizer/mesos/isolators/cgroups2/controller.hpp"
+#include "linux/cgroups2.hpp"
 
 namespace mesos {
 namespace internal {
@@ -85,7 +86,9 @@ private:
     bool hardLimitUpdated = false;
   };
 
-  MemoryControllerProcess(const Flags& flags);
+  MemoryControllerProcess(
+      const Flags& flags,
+      cgroups2::memory::OomListener&& oomListener);
 
   void oomListen(
       const ContainerID& containerId,
@@ -97,6 +100,8 @@ private:
       const process::Future<Nothing>& oomFuture);
 
   hashmap<ContainerID, Info> infos;
+
+  cgroups2::memory::OomListener oomListener;
 };
 
 } // namespace slave {

Reply via email to