From 25b4a07b1628381bf46f8aea4d122fbe84aa82f6 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 2 Jun 2021 14:10:07 +0200 Subject: [PATCH 1/2] Update github.com/tklauser/go-sysconf to v0.3.6 List of changes: https://github.com/tklauser/go-sysconf/compare/v0.3.4...v0.3.6 --- Gopkg.lock | 6 +++--- Gopkg.toml | 2 +- v3/go.mod | 4 ++-- v3/go.sum | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 6bae7891..440aa707 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -48,12 +48,12 @@ version = "v1.6.0" [[projects]] - digest = "1:935df8a10a215392af270f19b14ef39efd151d598cf96e4851e73ba678cdf290" + digest = "1:75b5c63e0eae3f1b290c91ff3084b80c9a51066c6dff1a6aca31ccbdab4aeee4" name = "github.com/tklauser/go-sysconf" packages = ["."] pruneopts = "UT" - revision = "6c733a705a84e0dfcaf092758e3cef627dc03034" - version = "v0.3.4" + revision = "bf420f795f20e170808c4d27a6b083f08725911f" + version = "v0.3.6" [[projects]] digest = "1:e7bf47a37e6d0fb2f4bd0f65f574f8a92922f048cab3f106b0a7a413cbb14714" diff --git a/Gopkg.toml b/Gopkg.toml index af7b47f2..891682fd 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -35,7 +35,7 @@ [[constraint]] name = "github.com/tklauser/go-sysconf" - version = "0.3.4" + version = "0.3.6" [[constraint]] branch = "master" diff --git a/v3/go.mod b/v3/go.mod index 5a189dd7..1ffe6c97 100644 --- a/v3/go.mod +++ b/v3/go.mod @@ -6,6 +6,6 @@ require ( github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d github.com/go-ole/go-ole v1.2.4 // indirect github.com/stretchr/testify v1.6.1 - github.com/tklauser/go-sysconf v0.3.4 - golang.org/x/sys v0.0.0-20210217105451-b926d437f341 + github.com/tklauser/go-sysconf v0.3.6 + golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa ) diff --git a/v3/go.sum b/v3/go.sum index 792e78c0..1dda03dc 100644 --- a/v3/go.sum +++ b/v3/go.sum @@ -9,12 +9,12 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tklauser/go-sysconf v0.3.4 h1:HT8SVixZd3IzLdfs/xlpq0jeSfTX57g1v6wB1EuzV7M= -github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= -github.com/tklauser/numcpus v0.2.1 h1:ct88eFm+Q7m2ZfXJdan1xYoXKlmwsfP+k88q05KvlZc= -github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= -golang.org/x/sys v0.0.0-20210217105451-b926d437f341 h1:2/QtM1mL37YmcsT8HaDNHDgTqqFVw+zr8UzMiBVLzYU= -golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +github.com/tklauser/go-sysconf v0.3.6 h1:oc1sJWvKkmvIxhDHeKWvZS4f6AW+YcoguSfRF2/Hmo4= +github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa h1:ZYxPR6aca/uhfRJyaOAtflSHjJYiktO7QnJC5ut7iY4= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= From 611c8b576e8451735fb103f83ccb2da6bbaa913e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 2 Jun 2021 14:11:11 +0200 Subject: [PATCH 2/2] process, v3/process: use SC_CLK_TCK sysconf value instead of hard-coding clock ticks The github.com/tklauser/go-sysconf package is already a dependency used in the cpu and v3/cpu packages to determine clock ticks using `sysconf.Sysconf(sysconf.SC_CLK_TCK)`, see #1036. Use the same in packages process and v3/process as well instead of hard-coding clock ticks to 100. --- process/process_darwin.go | 15 +++++++++++---- process/process_linux.go | 22 +++++++++++++++------- v3/process/process_darwin.go | 15 +++++++++++---- v3/process/process_linux.go | 22 +++++++++++++++------- 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/process/process_darwin.go b/process/process_darwin.go index dc75526c..383e0994 100644 --- a/process/process_darwin.go +++ b/process/process_darwin.go @@ -14,6 +14,7 @@ import ( "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/internal/common" "github.com/shirou/gopsutil/net" + "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" ) @@ -27,9 +28,15 @@ const ( KernProcPathname = 12 // path to executable ) -const ( - ClockTicks = 100 // C.sysconf(C._SC_CLK_TCK) -) +var ClockTicks = 100 // default value + +func init() { + clkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK) + // ignore errors + if err == nil { + ClockTicks = int(clkTck) + } +} type _Ctype_struct___0 struct { Pad uint64 @@ -314,7 +321,7 @@ func convertCPUTimes(s string) (ret float64, err error) { t += h * ClockTicks h, err = strconv.Atoi(_t[1]) t += h - return float64(t) / ClockTicks, nil + return float64(t) / float64(ClockTicks), nil } func (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) { diff --git a/process/process_linux.go b/process/process_linux.go index c9edf808..a5dc6020 100644 --- a/process/process_linux.go +++ b/process/process_linux.go @@ -18,15 +18,23 @@ import ( "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/internal/common" "github.com/shirou/gopsutil/net" + "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" ) var PageSize = uint64(os.Getpagesize()) -const ( - PrioProcess = 0 // linux/resource.h - ClockTicks = 100 // C.sysconf(C._SC_CLK_TCK) -) +const PrioProcess = 0 // linux/resource.h + +var ClockTicks = 100 // default value + +func init() { + clkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK) + // ignore errors + if err == nil { + ClockTicks = int(clkTck) + } +} // MemoryInfoExStat is different between OSes type MemoryInfoExStat struct { @@ -1031,9 +1039,9 @@ func (p *Process) fillFromTIDStatWithContext(ctx context.Context, tid int32) (ui cpuTimes := &cpu.TimesStat{ CPU: "cpu", - User: float64(utime / ClockTicks), - System: float64(stime / ClockTicks), - Iowait: float64(iotime / ClockTicks), + User: utime / float64(ClockTicks), + System: stime / float64(ClockTicks), + Iowait: iotime / float64(ClockTicks), } bootTime, _ := common.BootTimeWithContext(ctx) diff --git a/v3/process/process_darwin.go b/v3/process/process_darwin.go index 2b2b2429..5a575dc8 100644 --- a/v3/process/process_darwin.go +++ b/v3/process/process_darwin.go @@ -14,6 +14,7 @@ import ( "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/internal/common" "github.com/shirou/gopsutil/v3/net" + "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" ) @@ -27,9 +28,15 @@ const ( KernProcPathname = 12 // path to executable ) -const ( - clockTicks = 100 // C.sysconf(C._SC_CLK_TCK) -) +var clockTicks = 100 // default value + +func init() { + clkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK) + // ignore errors + if err == nil { + clockTicks = int(clkTck) + } +} type _Ctype_struct___0 struct { Pad uint64 @@ -314,7 +321,7 @@ func convertCPUTimes(s string) (ret float64, err error) { t += h * clockTicks h, err = strconv.Atoi(_t[1]) t += h - return float64(t) / clockTicks, nil + return float64(t) / float64(clockTicks), nil } func (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) { diff --git a/v3/process/process_linux.go b/v3/process/process_linux.go index 302dc9fc..74549b1a 100644 --- a/v3/process/process_linux.go +++ b/v3/process/process_linux.go @@ -18,15 +18,23 @@ import ( "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/internal/common" "github.com/shirou/gopsutil/v3/net" + "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" ) var pageSize = uint64(os.Getpagesize()) -const ( - prioProcess = 0 // linux/resource.h - clockTicks = 100 // C.sysconf(C._SC_CLK_TCK) -) +const prioProcess = 0 // linux/resource.h + +var clockTicks = 100 // default value + +func init() { + clkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK) + // ignore errors + if err == nil { + clockTicks = int(clkTck) + } +} // MemoryInfoExStat is different between OSes type MemoryInfoExStat struct { @@ -1026,9 +1034,9 @@ func (p *Process) fillFromTIDStatWithContext(ctx context.Context, tid int32) (ui cpuTimes := &cpu.TimesStat{ CPU: "cpu", - User: float64(utime / clockTicks), - System: float64(stime / clockTicks), - Iowait: float64(iotime / clockTicks), + User: utime / float64(clockTicks), + System: stime / float64(clockTicks), + Iowait: iotime / float64(clockTicks), } bootTime, _ := common.BootTimeWithContext(ctx)