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__
