Skip to content

Commit daf27d0

Browse files
authored
Merge pull request moby#4042 from thaJeztah/0.12_backport_windows_no_proc
2 parents faa0cc7 + d3f0bf7 commit daf27d0

File tree

4 files changed

+109
-90
lines changed

4 files changed

+109
-90
lines changed

executor/resources/sys.go

Lines changed: 2 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,9 @@
11
package resources
22

3-
import (
4-
"os"
5-
"time"
6-
7-
"github.com/moby/buildkit/executor/resources/types"
8-
"github.com/prometheus/procfs"
9-
)
3+
import "github.com/moby/buildkit/executor/resources/types"
104

115
type SysSampler = Sub[*types.SysSample]
126

137
func NewSysSampler() (*Sampler[*types.SysSample], error) {
14-
procfs, err := procfs.NewDefaultFS()
15-
if err != nil {
16-
return nil, err
17-
}
18-
19-
return NewSampler(2*time.Second, 20, func(tm time.Time) (*types.SysSample, error) {
20-
return sampleSys(procfs, tm)
21-
}), nil
22-
}
23-
24-
func sampleSys(proc procfs.FS, tm time.Time) (*types.SysSample, error) {
25-
stat, err := proc.Stat()
26-
if err != nil {
27-
return nil, err
28-
}
29-
30-
s := &types.SysSample{
31-
Timestamp_: tm,
32-
}
33-
34-
s.CPUStat = &types.SysCPUStat{
35-
User: stat.CPUTotal.User,
36-
Nice: stat.CPUTotal.Nice,
37-
System: stat.CPUTotal.System,
38-
Idle: stat.CPUTotal.Idle,
39-
Iowait: stat.CPUTotal.Iowait,
40-
IRQ: stat.CPUTotal.IRQ,
41-
SoftIRQ: stat.CPUTotal.SoftIRQ,
42-
Steal: stat.CPUTotal.Steal,
43-
Guest: stat.CPUTotal.Guest,
44-
GuestNice: stat.CPUTotal.GuestNice,
45-
}
46-
47-
s.ProcStat = &types.ProcStat{
48-
ContextSwitches: stat.ContextSwitches,
49-
ProcessCreated: stat.ProcessCreated,
50-
ProcessesRunning: stat.ProcessesRunning,
51-
}
52-
53-
mem, err := proc.Meminfo()
54-
if err != nil {
55-
return nil, err
56-
}
57-
58-
s.MemoryStat = &types.SysMemoryStat{
59-
Total: mem.MemTotal,
60-
Free: mem.MemFree,
61-
Buffers: mem.Buffers,
62-
Cached: mem.Cached,
63-
Active: mem.Active,
64-
Inactive: mem.Inactive,
65-
Swap: mem.SwapTotal,
66-
Available: mem.MemAvailable,
67-
Dirty: mem.Dirty,
68-
Writeback: mem.Writeback,
69-
Slab: mem.Slab,
70-
}
71-
72-
if _, err := os.Lstat("/proc/pressure"); err != nil {
73-
return s, nil
74-
}
75-
76-
cp, err := parsePressureFile("/proc/pressure/cpu")
77-
if err != nil {
78-
return nil, err
79-
}
80-
s.CPUPressure = cp
81-
82-
mp, err := parsePressureFile("/proc/pressure/memory")
83-
if err != nil {
84-
return nil, err
85-
}
86-
s.MemoryPressure = mp
87-
88-
ip, err := parsePressureFile("/proc/pressure/io")
89-
if err != nil {
90-
return nil, err
91-
}
92-
s.IOPressure = ip
93-
94-
return s, nil
8+
return newSysSampler()
959
}

executor/resources/sys_linux.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package resources
2+
3+
import (
4+
"os"
5+
"time"
6+
7+
"github.com/moby/buildkit/executor/resources/types"
8+
"github.com/prometheus/procfs"
9+
)
10+
11+
func newSysSampler() (*Sampler[*types.SysSample], error) {
12+
pfs, err := procfs.NewDefaultFS()
13+
if err != nil {
14+
return nil, err
15+
}
16+
17+
return NewSampler(2*time.Second, 20, func(tm time.Time) (*types.SysSample, error) {
18+
return sampleSys(pfs, tm)
19+
}), nil
20+
}
21+
22+
func sampleSys(proc procfs.FS, tm time.Time) (*types.SysSample, error) {
23+
stat, err := proc.Stat()
24+
if err != nil {
25+
return nil, err
26+
}
27+
28+
s := &types.SysSample{
29+
Timestamp_: tm,
30+
}
31+
32+
s.CPUStat = &types.SysCPUStat{
33+
User: stat.CPUTotal.User,
34+
Nice: stat.CPUTotal.Nice,
35+
System: stat.CPUTotal.System,
36+
Idle: stat.CPUTotal.Idle,
37+
Iowait: stat.CPUTotal.Iowait,
38+
IRQ: stat.CPUTotal.IRQ,
39+
SoftIRQ: stat.CPUTotal.SoftIRQ,
40+
Steal: stat.CPUTotal.Steal,
41+
Guest: stat.CPUTotal.Guest,
42+
GuestNice: stat.CPUTotal.GuestNice,
43+
}
44+
45+
s.ProcStat = &types.ProcStat{
46+
ContextSwitches: stat.ContextSwitches,
47+
ProcessCreated: stat.ProcessCreated,
48+
ProcessesRunning: stat.ProcessesRunning,
49+
}
50+
51+
mem, err := proc.Meminfo()
52+
if err != nil {
53+
return nil, err
54+
}
55+
56+
s.MemoryStat = &types.SysMemoryStat{
57+
Total: mem.MemTotal,
58+
Free: mem.MemFree,
59+
Buffers: mem.Buffers,
60+
Cached: mem.Cached,
61+
Active: mem.Active,
62+
Inactive: mem.Inactive,
63+
Swap: mem.SwapTotal,
64+
Available: mem.MemAvailable,
65+
Dirty: mem.Dirty,
66+
Writeback: mem.Writeback,
67+
Slab: mem.Slab,
68+
}
69+
70+
if _, err := os.Lstat("/proc/pressure"); err != nil {
71+
return s, nil
72+
}
73+
74+
cp, err := parsePressureFile("/proc/pressure/cpu")
75+
if err != nil {
76+
return nil, err
77+
}
78+
s.CPUPressure = cp
79+
80+
mp, err := parsePressureFile("/proc/pressure/memory")
81+
if err != nil {
82+
return nil, err
83+
}
84+
s.MemoryPressure = mp
85+
86+
ip, err := parsePressureFile("/proc/pressure/io")
87+
if err != nil {
88+
return nil, err
89+
}
90+
s.IOPressure = ip
91+
92+
return s, nil
93+
}

executor/resources/sys_nolinux.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//go:build !linux
2+
3+
package resources
4+
5+
import "github.com/moby/buildkit/executor/resources/types"
6+
7+
func newSysSampler() (*Sampler[*types.SysSample], error) {
8+
return nil, nil
9+
}

solver/llbsolver/solver.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,8 +416,11 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro
416416

417417
defer j.Discard()
418418

419-
usage := s.sysSampler.Record()
420-
defer usage.Close(false)
419+
var usage *resources.Sub[*resourcetypes.SysSample]
420+
if s.sysSampler != nil {
421+
usage = s.sysSampler.Record()
422+
defer usage.Close(false)
423+
}
421424

422425
var res *frontend.Result
423426
var resProv *Result

0 commit comments

Comments
 (0)