mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
Some checks are pending
Build / Goreleaser (push) Waiting to run
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, darwin) (push) Blocked by required conditions
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, linux) (push) Blocked by required conditions
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, windows) (push) Blocked by required conditions
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, darwin) (push) Blocked by required conditions
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, linux) (push) Blocked by required conditions
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, windows) (push) Blocked by required conditions
criyle/go-sandbox#13
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package linuxcontainer
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/criyle/go-judge/envexec"
|
|
"github.com/criyle/go-sandbox/pkg/cgroup"
|
|
)
|
|
|
|
var (
|
|
_ Cgroup = &wCgroup{}
|
|
)
|
|
|
|
type wCgroup struct {
|
|
cg cgroup.Cgroup
|
|
cfsPeriod time.Duration
|
|
}
|
|
|
|
func (c *wCgroup) SetCPURate(s uint64) error {
|
|
quota := time.Duration(uint64(c.cfsPeriod) * s / 1000)
|
|
return c.cg.SetCPUBandwidth(uint64(quota.Microseconds()), uint64(c.cfsPeriod.Microseconds()))
|
|
}
|
|
|
|
func (c *wCgroup) SetCpuset(s string) error {
|
|
return c.cg.SetCPUSet([]byte(s))
|
|
}
|
|
|
|
func (c *wCgroup) SetMemoryLimit(s envexec.Size) error {
|
|
return c.cg.SetMemoryLimit(uint64(s))
|
|
}
|
|
|
|
func (c *wCgroup) SetProcLimit(l uint64) error {
|
|
return c.cg.SetProcLimit(l)
|
|
}
|
|
|
|
func (c *wCgroup) CPUUsage() (time.Duration, error) {
|
|
t, err := c.cg.CPUUsage()
|
|
return time.Duration(t), err
|
|
}
|
|
|
|
func (c *wCgroup) CurrentMemory() (envexec.Size, error) {
|
|
s, err := c.cg.MemoryUsage()
|
|
return envexec.Size(s), err
|
|
}
|
|
|
|
func (c *wCgroup) MaxMemory() (envexec.Size, error) {
|
|
s, err := c.cg.MemoryMaxUsage()
|
|
return envexec.Size(s), err
|
|
}
|
|
|
|
func (c *wCgroup) ProcPeak() (uint64, error) {
|
|
return c.cg.ProcessPeak()
|
|
}
|
|
|
|
func (c *wCgroup) AddProc(pid int) error {
|
|
return c.cg.AddProc(pid)
|
|
}
|
|
|
|
func (c *wCgroup) Reset() error {
|
|
return nil
|
|
}
|
|
|
|
func (c *wCgroup) Destroy() error {
|
|
return c.cg.Destroy()
|
|
}
|
|
|
|
func (c *wCgroup) Open() (*os.File, error) {
|
|
return c.cg.Open()
|
|
}
|