コード例 #1
0
ファイル: cgroup.cpp プロジェクト: noxiouz/porto
TError TMemorySubsystem::SetDirtyLimit(TCgroup &cg, uint64_t limit) {
    if (!SupportDirtyLimit())
        return TError::Success();
    if (limit)
        return cg.SetUint64(DIRTY_LIMIT, limit);
    return cg.SetUint64(DIRTY_RATIO, 50);
}
コード例 #2
0
ファイル: cgroup.hpp プロジェクト: dcherednik/porto
 TError SetGuarantee(TCgroup &cg, uint64_t guarantee) const {
     if (!SupportGuarantee())
         return TError::Success();
     return cg.SetUint64(LOW_LIMIT, guarantee);
 }
コード例 #3
0
ファイル: cgroup.hpp プロジェクト: dcherednik/porto
 TError SetSoftLimit(TCgroup &cg, uint64_t limit) const {
     return cg.SetUint64(SOFT_LIMIT, limit);
 }
コード例 #4
0
ファイル: cgroup.cpp プロジェクト: noxiouz/porto
TError TCpuSubsystem::SetCpuPolicy(TCgroup &cg, const std::string &policy,
                                   double guarantee, double limit) {
    TError error;

    if (HasQuota) {
        int64_t quota = std::ceil(limit * BasePeriod);

        if (quota < 1000)
            quota = 1000;

        if (limit >= GetNumCores())
            quota = -1;

        error = cg.Set("cpu.cfs_quota_us", std::to_string(quota));
        if (error)
            return error;
    }

    if (HasReserve) {
        uint64_t reserve = std::floor(guarantee * BasePeriod);
        uint64_t shares = BaseShares, reserve_shares = BaseShares;

        if (policy == "rt") {
            shares *= 16;
            reserve_shares *= 256;
        } else if (policy == "normal") {
            reserve_shares *= 16;
        } else if (policy == "idle") {
            shares /= 16;
        }

        error = cg.SetUint64("cpu.shares", shares);
        if (error)
            return error;

        error = cg.SetUint64("cpu.cfs_reserve_shares", reserve_shares);
        if (error)
            return error;

        error = cg.SetUint64("cpu.cfs_reserve_us", reserve);
        if (error)
            return error;

    } else if (HasShares) {
        uint64_t shares = std::floor((guarantee + 1) * BaseShares);

        if (policy == "rt" && (!HasSmart || !config().container().enable_smart()))
            shares *= 16;
        else if (policy == "idle")
            shares /= 16;

        error = cg.SetUint64("cpu.shares", shares);
        if (error)
            return error;
    }

    if (HasSmart) {
        error = cg.SetUint64("cpu.smart", (policy == "rt" &&
                    config().container().enable_smart()) ? 1 : 0);
        if (error)
            return error;
    }

    return TError::Success();
}
コード例 #5
0
ファイル: cgroup.cpp プロジェクト: noxiouz/porto
TError TMemorySubsystem::SetIopsLimit(TCgroup &cg, uint64_t limit) {
    if (!SupportIoLimit())
        return TError::Success();
    return cg.SetUint64(FS_IOPS_LIMIT, limit);
}