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 bff44aeec [cgroups2] Introduce the IoControllerProcess
bff44aeec is described below
commit bff44aeecefee54795dfa3fcfe61cb7b929655fd
Author: Jason Zhou <[email protected]>
AuthorDate: Thu Aug 8 18:01:33 2024 -0400
[cgroups2] Introduce the IoControllerProcess
Introduces the IoControllerProcess.
This replaces the blkio controller from cgroups v1.
We currently only use it to helps us work with the cgroups/all isolation
flag.
Review: https://reviews.apache.org/r/75155/
---
src/CMakeLists.txt | 1 +
src/Makefile.am | 2 +
.../mesos/isolators/cgroups2/cgroups2.cpp | 4 +-
.../mesos/isolators/cgroups2/constants.hpp | 1 +
.../mesos/isolators/cgroups2/controllers/io.cpp | 49 ++++++++++++++++++++++
.../cgroups2/{constants.hpp => controllers/io.hpp} | 32 +++++++-------
6 files changed, 71 insertions(+), 18 deletions(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 50684b615..b926be97f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -351,6 +351,7 @@ set(LINUX_SRC
slave/containerizer/mesos/isolators/cgroups2/controllers/memory.cpp
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/device_manager/device_manager.cpp)
if (ENABLE_XFS_DISK_ISOLATOR)
diff --git a/src/Makefile.am b/src/Makefile.am
index 02b9115e5..81ea74744 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1502,6 +1502,8 @@ MESOS_LINUX_FILES =
\
slave/containerizer/mesos/isolators/cgroups2/controllers/perf_event.hpp \
slave/containerizer/mesos/isolators/cgroups2/controllers/devices.cpp \
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/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 a027ee632..4757a8786 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
@@ -23,6 +23,7 @@
#include "slave/containerizer/mesos/isolators/cgroups2/controllers/memory.hpp"
#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 <set>
#include <string>
@@ -82,7 +83,8 @@ Try<Isolator*> Cgroups2IsolatorProcess::create(
{"core", &CoreControllerProcess::create},
{"cpu", &CpuControllerProcess::create},
{"mem", &MemoryControllerProcess::create},
- {"perf_event", &PerfEventControllerProcess::create}
+ {"perf_event", &PerfEventControllerProcess::create},
+ {"io", &IoControllerProcess::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 5e6426694..2c8b3316c 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
@@ -40,6 +40,7 @@ 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";
} // namespace slave {
} // namespace internal {
diff --git
a/src/slave/containerizer/mesos/isolators/cgroups2/controllers/io.cpp
b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/io.cpp
new file mode 100644
index 000000000..1f29a0790
--- /dev/null
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/io.cpp
@@ -0,0 +1,49 @@
+// 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/io.hpp"
+#include "slave/containerizer/mesos/isolators/cgroups2/constants.hpp"
+
+using process::Owned;
+
+using std::string;
+
+namespace mesos {
+namespace internal {
+namespace slave {
+
+Try<Owned<ControllerProcess>> IoControllerProcess::create(const Flags& flags)
+{
+ return Owned<ControllerProcess>(new IoControllerProcess(flags));
+}
+
+
+IoControllerProcess::IoControllerProcess(const Flags& _flags)
+ : ProcessBase(process::ID::generate("cgroups-v2-io-controller")),
+ ControllerProcess(_flags) {}
+
+
+string IoControllerProcess::name() const
+{
+ return CGROUPS2_CONTROLLER_IO_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/io.hpp
similarity index 51%
copy from src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
copy to src/slave/containerizer/mesos/isolators/cgroups2/controllers/io.hpp
index 5e6426694..921e93784 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/constants.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/controllers/io.hpp
@@ -14,35 +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 __IO_HPP__
+#define __IO_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 IoControllerProcess : public ControllerProcess
+{
+public:
+ static Try<process::Owned<ControllerProcess>> create(
+ const Flags& flags);
-// Memory controller constants.
-const Bytes CGROUPS2_MIN_MEMORY = Megabytes(32);
+ ~IoControllerProcess() 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";
+ std::string name() const override;
+
+private:
+ IoControllerProcess(const Flags& flags);
+};
} // namespace slave {
} // namespace internal {
} // namespace mesos {
-#endif // __CGROUPS_V2_ISOLATOR_CONSTANTS_HPP__
+#endif // __IO_HPP__
\ No newline at end of file