From 163e2523d746cab452f053d31c8e739aaccc0c1f Mon Sep 17 00:00:00 2001 From: Shengjing Zhu Date: Sun, 19 Sep 2021 23:31:54 +0800 Subject: [PATCH] libct/cg: replace bitset with std math/big library Cut down third party dependency. Signed-off-by: Shengjing Zhu --- go.mod | 1 - go.sum | 3 +-- libcontainer/cgroups/systemd/cpuset.go | 26 +++++-------------- .../bits-and-blooms/bitset/bitset.go | 4 +-- vendor/modules.txt | 3 +-- 5 files changed, 10 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 6dbd0847d..43b5b730d 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/opencontainers/runc go 1.15 require ( - github.com/bits-and-blooms/bitset v1.2.1 github.com/checkpoint-restore/go-criu/v5 v5.0.0 github.com/cilium/ebpf v0.6.2 github.com/containerd/console v1.0.3 diff --git a/go.sum b/go.sum index 92fb2a987..f7b9c91d2 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.2.1 h1:M+/hrU9xlMp7t4TyTDQW97d3tRPVuKFC6zBEK16QnXY= -github.com/bits-and-blooms/bitset v1.2.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/checkpoint-restore/go-criu/v5 v5.0.0 h1:TW8f/UvntYoVDMN1K2HlT82qH1rb0sOjpGw3m6Ym+i4= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/cilium/ebpf v0.6.2 h1:iHsfF/t4aW4heW2YKfeHrVPGdtYTL4C4KocpM8KTSnI= diff --git a/libcontainer/cgroups/systemd/cpuset.go b/libcontainer/cgroups/systemd/cpuset.go index fce4f049d..83d10dd70 100644 --- a/libcontainer/cgroups/systemd/cpuset.go +++ b/libcontainer/cgroups/systemd/cpuset.go @@ -1,12 +1,10 @@ package systemd import ( - "encoding/binary" "errors" + "math/big" "strconv" "strings" - - "github.com/bits-and-blooms/bitset" ) // RangeToBits converts a text representation of a CPU mask (as written to @@ -14,7 +12,7 @@ import ( // with the corresponding bits set (as consumed by systemd over dbus as // AllowedCPUs/AllowedMemoryNodes unit property value). func RangeToBits(str string) ([]byte, error) { - bits := &bitset.BitSet{} + bits := new(big.Int) for _, r := range strings.Split(str, ",") { // allow extra spaces around @@ -36,32 +34,22 @@ func RangeToBits(str string) ([]byte, error) { if start > end { return nil, errors.New("invalid range: " + r) } - for i := uint(start); i <= uint(end); i++ { - bits.Set(i) + for i := start; i <= end; i++ { + bits.SetBit(bits, int(i), 1) } } else { val, err := strconv.ParseUint(ranges[0], 10, 32) if err != nil { return nil, err } - bits.Set(uint(val)) + bits.SetBit(bits, int(val), 1) } } - val := bits.Bytes() - if len(val) == 0 { + ret := bits.Bytes() + if len(ret) == 0 { // do not allow empty values return nil, errors.New("empty value") } - ret := make([]byte, len(val)*8) - for i := range val { - // bitset uses BigEndian internally - binary.BigEndian.PutUint64(ret[i*8:], val[len(val)-1-i]) - } - // remove upper all-zero bytes - for ret[0] == 0 { - ret = ret[1:] - } - return ret, nil } diff --git a/vendor/github.com/bits-and-blooms/bitset/bitset.go b/vendor/github.com/bits-and-blooms/bitset/bitset.go index 271ccdbd0..d688806a5 100644 --- a/vendor/github.com/bits-and-blooms/bitset/bitset.go +++ b/vendor/github.com/bits-and-blooms/bitset/bitset.go @@ -254,9 +254,7 @@ func (b *BitSet) Shrink(lastbitindex uint) *BitSet { copy(shrunk, b.set[:idx]) b.set = shrunk b.length = length - if length < 64 { - b.set[idx-1] &= (allBits >> (uint64(64) - uint64(length&(wordSize-1)))) - } + b.set[idx-1] &= (allBits >> (uint64(64) - uint64(length&(wordSize-1)))) return b } diff --git a/vendor/modules.txt b/vendor/modules.txt index dd688adc6..c0749d2f3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,5 +1,4 @@ -# github.com/bits-and-blooms/bitset v1.2.1 -## explicit +# github.com/bits-and-blooms/bitset v1.2.0 github.com/bits-and-blooms/bitset # github.com/checkpoint-restore/go-criu/v5 v5.0.0 ## explicit