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

commit 22f63e4fde7f670c09f3d97c4233ef8ce7b90024
Author: Jason Zhou <[email protected]>
AuthorDate: Mon Jul 22 11:11:25 2024 -0400

    [hugetlb] Introduce the HugeTLBControllerProcess
    
    Introduces the `HugeTLBControllerProcess`.
    Hosts correctly configured for cgroups v2 and provide `cgroups/hugetlb`
    in the `isolation` flag and `hugetlb` in the `agent_subsystems` flag
    will use this controller.
    
    Review: https://reviews.apache.org/r/75152
---
 src/CMakeLists.txt                                 |  1 +
 src/Makefile.am                                    |  2 +
 .../mesos/isolators/cgroups2/cgroups2.cpp          |  2 +
 .../mesos/isolators/cgroups2/constants.hpp         |  1 +
 .../isolators/cgroups2/controllers/hugetlb.cpp     | 50 ++++++++++++++++++++++
 .../{constants.hpp => controllers/hugetlb.hpp}     | 33 +++++++-------
 6 files changed, 71 insertions(+), 18 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b926be97f..e753ddd21 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -352,6 +352,7 @@ set(LINUX_SRC
   slave/containerizer/mesos/isolators/cgroups2/controllers/devices.cpp
   slave/containerizer/mesos/isolators/cgroups2/controllers/perf_event.cpp
   slave/containerizer/mesos/isolators/cgroups2/controllers/io.cpp
+  slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.cpp
   slave/containerizer/device_manager/device_manager.cpp)
 
 if (ENABLE_XFS_DISK_ISOLATOR)
diff --git a/src/Makefile.am b/src/Makefile.am
index 81ea74744..497a89add 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1504,6 +1504,8 @@ MESOS_LINUX_FILES =                                       
                                \
   slave/containerizer/mesos/isolators/cgroups2/controllers/devices.hpp    \
   slave/containerizer/mesos/isolators/cgroups2/controllers/io.cpp    \
   slave/containerizer/mesos/isolators/cgroups2/controllers/io.hpp    \
+  slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.cpp    \
+  slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp    \
   slave/containerizer/device_manager/device_manager.cpp    \
   slave/containerizer/device_manager/device_manager.hpp    \
   slave/containerizer/device_manager/state.hpp
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
index 4757a8786..71c80a23b 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
@@ -24,6 +24,7 @@
 #include 
"slave/containerizer/mesos/isolators/cgroups2/controllers/perf_event.hpp"
 #include "slave/containerizer/mesos/isolators/cgroups2/controllers/devices.hpp"
 #include "slave/containerizer/mesos/isolators/cgroups2/controllers/io.hpp"
+#include "slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp"
 
 #include <set>
 #include <string>
@@ -85,6 +86,7 @@ Try<Isolator*> Cgroups2IsolatorProcess::create(
     {"mem", &MemoryControllerProcess::create},
     {"perf_event", &PerfEventControllerProcess::create},
     {"io", &IoControllerProcess::create}
+    {"hugetlb", &HugetlbControllerProcess::create}
   };
 
   hashmap<string, Try<Owned<ControllerProcess>>(*)(
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
index 2c8b3316c..dcd82fd5f 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
@@ -41,6 +41,7 @@ const std::string CGROUPS2_CONTROLLER_MEMORY_NAME = "memory";
 const std::string CGROUPS2_CONTROLLER_PERF_EVENT_NAME = "perf_event";
 const std::string CGROUPS2_CONTROLLER_DEVICES_NAME = "devices";
 const std::string CGROUPS2_CONTROLLER_IO_NAME = "io";
+const std::string CGROUPS2_CONTROLLER_HUGETLB_NAME = "hugetlb";
 
 } // namespace slave {
 } // namespace internal {
diff --git 
a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.cpp
new file mode 100644
index 000000000..16799b143
--- /dev/null
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.cpp
@@ -0,0 +1,50 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <process/id.hpp>
+
+#include "slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp"
+#include "slave/containerizer/mesos/isolators/cgroups2/constants.hpp"
+
+using process::Owned;
+
+using std::string;
+
+namespace mesos {
+namespace internal {
+namespace slave {
+
+Try<Owned<ControllerProcess>> HugetlbControllerProcess::create(
+    const Flags& flags)
+{
+  return Owned<ControllerProcess>(new HugetlbControllerProcess(flags));
+}
+
+
+HugetlbControllerProcess::HugetlbControllerProcess(const Flags& _flags)
+  : ProcessBase(process::ID::generate("cgroups-v2-hugetlb-controller")),
+    ControllerProcess(_flags) {}
+
+
+string HugetlbControllerProcess::name() const
+{
+  return CGROUPS2_CONTROLLER_HUGETLB_NAME;
+}
+
+
+} // namespace slave {
+} // namespace internal {
+} // namespace mesos {
\ No newline at end of file
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp
similarity index 50%
copy from src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
copy to src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp
index 2c8b3316c..8aa333f31 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/hugetlb.hpp
@@ -14,36 +14,33 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef __CGROUPS_V2_ISOLATOR_CONSTANTS_HPP__
-#define __CGROUPS_V2_ISOLATOR_CONSTANTS_HPP__
+#ifndef __HUGETLB_HPP__
+#define __HUGETLB_HPP__
 
 #include <string>
 
-#include <stout/duration.hpp>
+#include "slave/containerizer/mesos/isolators/cgroups2/controller.hpp"
 
 namespace mesos {
 namespace internal {
 namespace slave {
 
-// CPU controller constants.
-const uint64_t CGROUPS2_CPU_WEIGHT_PER_CPU = 100;
-const uint64_t CGROUPS2_CPU_WEIGHT_PER_CPU_REVOCABLE = 1;
-const uint64_t CGROUPS2_MIN_CPU_WEIGHT = 1; // Linux constant.
-const Duration CGROUPS2_CPU_CFS_PERIOD = Milliseconds(100); // Linux default.
-const Duration CGROUPS2_MIN_CPU_CFS_QUOTA = Milliseconds(1);
+class HugetlbControllerProcess : public ControllerProcess
+{
+public:
+  static Try<process::Owned<ControllerProcess>> create(
+      const Flags& flags);
 
-// Memory controller constants.
-const Bytes CGROUPS2_MIN_MEMORY = Megabytes(32);
+  ~HugetlbControllerProcess() override = default;
 
-const std::string CGROUPS2_CONTROLLER_CORE_NAME = "core";
-const std::string CGROUPS2_CONTROLLER_CPU_NAME = "cpu";
-const std::string CGROUPS2_CONTROLLER_MEMORY_NAME = "memory";
-const std::string CGROUPS2_CONTROLLER_PERF_EVENT_NAME = "perf_event";
-const std::string CGROUPS2_CONTROLLER_DEVICES_NAME = "devices";
-const std::string CGROUPS2_CONTROLLER_IO_NAME = "io";
+  std::string name() const override;
+
+private:
+  HugetlbControllerProcess(const Flags& flags);
+};
 
 } // namespace slave {
 } // namespace internal {
 } // namespace mesos {
 
-#endif // __CGROUPS_V2_ISOLATOR_CONSTANTS_HPP__
+#endif // __HUGETLB_HPP__

Reply via email to