Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dd8b0b8 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add support for memcg v2 attributes" am: 1f34b283 am: 7b172376

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1990494

Change-Id: I744a1c76ea82a2400c492a59f31de731a62cbfeb
parents f39356b3 7b172376
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -15,21 +15,48 @@
      "Controller": "cpuset",
      "File": "top-app/cpus"
    },
    {
      "Name": "MemStats",
      "Controller": "memory",
      "File": "memory.stat"
    },
    {
      "Name": "MemLimit",
      "Controller": "memory",
      "File": "memory.limit_in_bytes"
      "File": "memory.limit_in_bytes",
      "FileV2": "memory.max"
    },
    {
      "Name": "MemSoftLimit",
      "Controller": "memory",
      "File": "memory.soft_limit_in_bytes"
      "File": "memory.soft_limit_in_bytes",
      "FileV2": "memory.low"
    },
    {
      "Name": "MemSwappiness",
      "Controller": "memory",
      "File": "memory.swappiness"
    },
    {
      "Name": "MemUsage",
      "Controller": "memory",
      "File": "memory.usage_in_bytes"
    },
    {
      "Name": "MemAndSwapUsage",
      "Controller": "memory",
      "File": "memory.memsw.usage_in_bytes"
    },
    {
      "Name": "MemPressureLevel",
      "Controller": "memory",
      "File": "memory.pressure_level"
    },
    {
      "Name": "MemCgroupEventControl",
      "Controller": "memory",
      "File": "cgroup.event_control"
    },
    {
      "Name": "UClampMin",
      "Controller": "cpu",
+3 −2
Original line number Diff line number Diff line
@@ -25,12 +25,13 @@ message TaskProfiles {
    repeated AggregateProfiles aggregateprofiles = 3 [json_name = "AggregateProfiles"];
}

// Next: 5
// Next: 6
message Attribute {
    string name = 1 [json_name = "Name"];
    string controller = 2 [json_name = "Controller"];
    string file = 3 [json_name = "File"];
    string optional = 4 [json_name = "Optional"];
    string filev2 = 4 [json_name = "FileV2"];
    string optional = 5 [json_name = "Optional"];
}

// Next: 3
+12 −4
Original line number Diff line number Diff line
@@ -129,11 +129,12 @@ bool ProfileAttribute::GetPathForTask(int tid, std::string* path) const {
        return true;
    }

    const std::string& file_name =
            controller()->version() == 2 && !file_v2_name_.empty() ? file_v2_name_ : file_name_;
    if (subgroup.empty()) {
        *path = StringPrintf("%s/%s", controller()->path(), file_name_.c_str());
        *path = StringPrintf("%s/%s", controller()->path(), file_name.c_str());
    } else {
        *path = StringPrintf("%s/%s/%s", controller()->path(), subgroup.c_str(),
                             file_name_.c_str());
        *path = StringPrintf("%s/%s/%s", controller()->path(), subgroup.c_str(), file_name.c_str());
    }
    return true;
}
@@ -633,12 +634,19 @@ bool TaskProfiles::Load(const CgroupMap& cg_map, const std::string& file_name) {
        std::string name = attr[i]["Name"].asString();
        std::string controller_name = attr[i]["Controller"].asString();
        std::string file_attr = attr[i]["File"].asString();
        std::string file_v2_attr = attr[i]["FileV2"].asString();

        if (!file_v2_attr.empty() && file_attr.empty()) {
            LOG(ERROR) << "Attribute " << name << " has FileV2 but no File property";
            return false;
        }

        auto controller = cg_map.FindController(controller_name);
        if (controller.HasValue()) {
            auto iter = attributes_.find(name);
            if (iter == attributes_.end()) {
                attributes_[name] = std::make_unique<ProfileAttribute>(controller, file_attr);
                attributes_[name] =
                        std::make_unique<ProfileAttribute>(controller, file_attr, file_v2_attr);
            } else {
                iter->second->Reset(controller, file_attr);
            }
+7 −2
Original line number Diff line number Diff line
@@ -37,8 +37,12 @@ class IProfileAttribute {

class ProfileAttribute : public IProfileAttribute {
  public:
    ProfileAttribute(const CgroupController& controller, const std::string& file_name)
        : controller_(controller), file_name_(file_name) {}
    // Cgroup attributes may have different names in the v1 and v2 hierarchies. If `file_v2_name` is
    // not empty, `file_name` is the name for the v1 hierarchy and `file_v2_name` is the name for
    // the v2 hierarchy. If `file_v2_name` is empty, `file_name` is used for both hierarchies.
    ProfileAttribute(const CgroupController& controller, const std::string& file_name,
                     const std::string& file_v2_name)
        : controller_(controller), file_name_(file_name), file_v2_name_(file_v2_name) {}
    ~ProfileAttribute() = default;

    const CgroupController* controller() const override { return &controller_; }
@@ -50,6 +54,7 @@ class ProfileAttribute : public IProfileAttribute {
  private:
    CgroupController controller_;
    std::string file_name_;
    std::string file_v2_name_;
};

// Abstract profile element