Skip to content

Commit d1bb322

Browse files
committed
fix off-by-10 error
1 parent 305675f commit d1bb322

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

cli/clistat/cgroup.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"bytes"
66
"strconv"
77
"strings"
8-
"time"
98

109
"github.com/spf13/afero"
1110
"golang.org/x/xerrors"
@@ -105,7 +104,12 @@ func (s *Statter) cGroupV2CPUUsed() (used float64, err error) {
105104
if err != nil {
106105
return 0, xerrors.Errorf("get cgroupv2 cpu used: %w", err)
107106
}
108-
return (time.Duration(usageUs) * time.Microsecond).Seconds(), nil
107+
periodUs, err := readInt64SepIdx(s.fs, cgroupV2CPUMax, " ", 1)
108+
if err != nil {
109+
return 0, xerrors.Errorf("get cpu period: %w", err)
110+
}
111+
112+
return float64(usageUs) / float64(periodUs), nil
109113
}
110114

111115
func (s *Statter) cGroupV2CPUTotal() (total float64, err error) {
@@ -153,7 +157,14 @@ func (s *Statter) cGroupV1CPUUsed() (float64, error) {
153157
}
154158
}
155159

156-
return time.Duration(usageNs).Seconds(), nil
160+
// usage is in ns, convert to us
161+
usageNs /= 1000
162+
periodUs, err := readInt64(s.fs, cgroupV1CFSPeriodUs)
163+
if err != nil {
164+
return 0, xerrors.Errorf("get cpu period: %w", err)
165+
}
166+
167+
return float64(usageNs) / float64(periodUs), nil
157168
}
158169

159170
// ContainerMemory returns the memory usage of the container cgroup.

cli/clistat/stat_internal_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func TestStatter(t *testing.T) {
108108
fs := initFS(t, fsContainerCgroupV1)
109109
fakeWait := func(time.Duration) {
110110
// Fake 1 second in ns of usage
111-
mungeFS(t, fs, cgroupV1CPUAcctUsage, "1000000000")
111+
mungeFS(t, fs, cgroupV1CPUAcctUsage, "100000000")
112112
}
113113
s, err := New(WithFS(fs), withWait(fakeWait))
114114
require.NoError(t, err)
@@ -126,7 +126,7 @@ func TestStatter(t *testing.T) {
126126
fs := initFS(t, fsContainerCgroupV1NoLimit)
127127
fakeWait := func(time.Duration) {
128128
// Fake 1 second in ns of usage
129-
mungeFS(t, fs, cgroupV1CPUAcctUsage, "1000000000")
129+
mungeFS(t, fs, cgroupV1CPUAcctUsage, "100000000")
130130
}
131131
s, err := New(WithFS(fs), withNproc(2), withWait(fakeWait))
132132
require.NoError(t, err)
@@ -160,8 +160,7 @@ func TestStatter(t *testing.T) {
160160
t.Parallel()
161161
fs := initFS(t, fsContainerCgroupV2)
162162
fakeWait := func(time.Duration) {
163-
// Fake 1 second in ns of usage
164-
mungeFS(t, fs, cgroupV2CPUStat, "usage_usec 1000000")
163+
mungeFS(t, fs, cgroupV2CPUStat, "usage_usec 100000")
165164
}
166165
s, err := New(WithFS(fs), withWait(fakeWait))
167166
require.NoError(t, err)
@@ -178,8 +177,7 @@ func TestStatter(t *testing.T) {
178177
t.Parallel()
179178
fs := initFS(t, fsContainerCgroupV2NoLimit)
180179
fakeWait := func(time.Duration) {
181-
// Fake 1 second in ns of usage
182-
mungeFS(t, fs, cgroupV2CPUStat, "usage_usec 1000000")
180+
mungeFS(t, fs, cgroupV2CPUStat, "usage_usec 100000")
183181
}
184182
s, err := New(WithFS(fs), withNproc(2), withWait(fakeWait))
185183
require.NoError(t, err)

0 commit comments

Comments
 (0)