mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Merge pull request #78515 from klueska/upstream-socketmask-updates
Updates to the SocketMask abstraction for the TopologyManager
This commit is contained in:
commit
9ac58bae56
@ -31,6 +31,7 @@ type SocketMask interface {
|
|||||||
IsEqual(mask SocketMask) bool
|
IsEqual(mask SocketMask) bool
|
||||||
IsEmpty() bool
|
IsEmpty() bool
|
||||||
IsSet(socket int) bool
|
IsSet(socket int) bool
|
||||||
|
IsNarrowerThan(mask SocketMask) bool
|
||||||
String() string
|
String() string
|
||||||
Count() int
|
Count() int
|
||||||
GetSockets() []int
|
GetSockets() []int
|
||||||
@ -116,6 +117,20 @@ func (s *socketMask) IsEqual(mask SocketMask) bool {
|
|||||||
return *s == *mask.(*socketMask)
|
return *s == *mask.(*socketMask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsNarrowerThan checks if one mask is narrower than another.
|
||||||
|
//
|
||||||
|
// A mask is said to be "narrower" than another if it has lets bits set. If the
|
||||||
|
// same number of bits are set in both masks, then the mask with more
|
||||||
|
// lower-numbered bits set wins out.
|
||||||
|
func (s *socketMask) IsNarrowerThan(mask SocketMask) bool {
|
||||||
|
if s.Count() == mask.Count() {
|
||||||
|
if *s < *mask.(*socketMask) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s.Count() < mask.Count()
|
||||||
|
}
|
||||||
|
|
||||||
//String converts mask to string
|
//String converts mask to string
|
||||||
func (s *socketMask) String() string {
|
func (s *socketMask) String() string {
|
||||||
str := ""
|
str := ""
|
||||||
|
@ -49,7 +49,7 @@ func TestAdd(t *testing.T) {
|
|||||||
expectedMask string
|
expectedMask string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Reset bit 1 SocketMask to 0",
|
name: "New SocketMask with sockets 0 and 1 set",
|
||||||
firstSocket: 0,
|
firstSocket: 0,
|
||||||
secondSocket: 1,
|
secondSocket: 1,
|
||||||
expectedMask: "1100000000000000000000000000000000000000000000000000000000000000",
|
expectedMask: "1100000000000000000000000000000000000000000000000000000000000000",
|
||||||
@ -229,7 +229,7 @@ func TestIsEqual(t *testing.T) {
|
|||||||
isEqual bool
|
isEqual bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "And socket masks",
|
name: "Check if two socket masks are equal",
|
||||||
firstMaskBit: int(0),
|
firstMaskBit: int(0),
|
||||||
secondMaskBit: int(0),
|
secondMaskBit: int(0),
|
||||||
isEqual: true,
|
isEqual: true,
|
||||||
@ -288,3 +288,45 @@ func TestGetSockets(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsNarrowerThan(t *testing.T) {
|
||||||
|
tcases := []struct {
|
||||||
|
name string
|
||||||
|
firstMask []int
|
||||||
|
secondMask []int
|
||||||
|
expectedFirstNarrower bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Check narrowness of masks with unequal bits set 1/2",
|
||||||
|
firstMask: []int{0},
|
||||||
|
secondMask: []int{0, 1},
|
||||||
|
expectedFirstNarrower: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Check narrowness of masks with unequal bits set 2/2",
|
||||||
|
firstMask: []int{0, 1},
|
||||||
|
secondMask: []int{0},
|
||||||
|
expectedFirstNarrower: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Check narrowness of masks with equal bits set 1/2",
|
||||||
|
firstMask: []int{0},
|
||||||
|
secondMask: []int{1},
|
||||||
|
expectedFirstNarrower: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Check narrowness of masks with equal bits set 2/2",
|
||||||
|
firstMask: []int{1},
|
||||||
|
secondMask: []int{0},
|
||||||
|
expectedFirstNarrower: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tcases {
|
||||||
|
firstMask, _ := NewSocketMask(tc.firstMask...)
|
||||||
|
secondMask, _ := NewSocketMask(tc.secondMask...)
|
||||||
|
expectedFirstNarrower := firstMask.IsNarrowerThan(secondMask)
|
||||||
|
if expectedFirstNarrower != tc.expectedFirstNarrower {
|
||||||
|
t.Errorf("Expected value to be %v, got %v", tc.expectedFirstNarrower, expectedFirstNarrower)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user