Skip to content

Commit

Permalink
uintptr working for 1
Browse files Browse the repository at this point in the history
Signed-off-by: Kirtana Ashok <[email protected]>
  • Loading branch information
kiashok committed Jun 25, 2024
1 parent dd98a4a commit 28ca109
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 60 deletions.
27 changes: 6 additions & 21 deletions internal/hcsoci/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,32 +351,17 @@ func setCPUAffinityOnJobObject(ctx context.Context, spec *specs.Spec, computeSys
}
}

/*
info := make([]winapi.JOBOBJECT_CPU_GROUP_AFFINITY, len(spec.Windows.Resources.CPU.AffinityCPUs))
for i, cpu := range spec.Windows.Resources.CPU.AffinityCPUs {
info[i].CpuMask = cpu.CPUMask
//cpu.CPUMask
//(uintptr)(unsafe.Pointer(&cpu.CPUMask))
//cpu.CPUMask
info[i].CpuGroup = (uint16)(cpu.CPUGroup)
info[i].Reserved = [3]uint16{0, 0, 0}
}
*/
info := winapi.JOBOBJECT_CPU_GROUP_AFFINITY{}
for _, cpu := range spec.Windows.Resources.CPU.AffinityCPUs {
info.CpuMask = cpu.CPUMask
info := make([]winapi.JOBOBJECT_CPU_GROUP_AFFINITY, len(spec.Windows.Resources.CPU.AffinityCPUs))
for i, cpu := range spec.Windows.Resources.CPU.AffinityCPUs {
info[i].CpuMask = (uintptr)(cpu.CPUMask)
//cpu.CPUMask
//(uintptr)(unsafe.Pointer(&cpu.CPUMask))
//cpu.CPUMask
info.CpuGroup = (uint16)(cpu.CPUGroup)
info.Reserved = [3]uint16{0, 0, 0}
info[i].CpuGroup = (uint16)(cpu.CPUGroup)
info[i].Reserved = [3]uint16{0, 0, 0}
}

retValue := job.SetInformationJobObject(info)

return retValue
//return job.GetInformationJobObject()
return job.SetInformationJobObject(info)
}

// isV2Xenon returns true if the create options are for a HCS schema V2 xenon container
Expand Down
50 changes: 12 additions & 38 deletions internal/jobobject/jobobject.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"path/filepath"
"sync"
"sync/atomic"
"syscall"
"unsafe"

"github.com/Microsoft/hcsshim/internal/queue"
Expand Down Expand Up @@ -543,46 +542,21 @@ func isJobSilo(h windows.Handle) bool {
return err == nil
}

func (job *JobObject) SetInformationJobObject(affinityCPUs winapi.JOBOBJECT_CPU_GROUP_AFFINITY) error {
/*
len := len(affinityCPUs)
sizeOfGroupAffinity := unsafe.Sizeof(winapi.JOBOBJECT_CPU_GROUP_AFFINITY{})
_, err := windows.SetInformationJobObject(
job.handle,
winapi.JobObjectGroupInformationEx,
//uintptr(unsafe.Pointer(affinityCPUs)),
uintptr(unsafe.Pointer(&affinityCPUs[0])),
uint32(uintptr(len)*sizeOfGroupAffinity),
)
if err != nil {
return fmt.Errorf("failed to set CPU affinities: %w", err)
}
*/
//len := len(affinityCPUs)
func (job *JobObject) SetInformationJobObject(affinityCPUs []winapi.JOBOBJECT_CPU_GROUP_AFFINITY) error {
len := len(affinityCPUs)
sizeOfGroupAffinity := unsafe.Sizeof(winapi.JOBOBJECT_CPU_GROUP_AFFINITY{})

k32 := syscall.NewLazyDLL("kernel32.dll")
setInfromationJO := k32.NewProc("SetInformationJobObject")

// means the length was not enough. Len will have the new value try again
//var len uint32 = 0
// pass invalid info to get the actual length needed
r1, r2, err := setInfromationJO.Call(
uintptr(job.handle),
uintptr(winapi.JobObjectGroupInformationEx),
_, err := windows.SetInformationJobObject(
job.handle,
winapi.JobObjectGroupInformationEx,
//uintptr(unsafe.Pointer(affinityCPUs)),
uintptr(unsafe.Pointer(&affinityCPUs)),
// (uintptr(len) * sizeOfGroupAffinity))
(sizeOfGroupAffinity))
uintptr(unsafe.Pointer(&affinityCPUs[0])),
uint32(uintptr(len)*sizeOfGroupAffinity),
)
if err != nil {
return fmt.Errorf("failed to set CPU affinities: %w", err)
}

fmt.Printf("Failed to Set information JO, err %v, r1 %v, r2 %v, JO %v", err, r1, r2, job.handle)
/*
if err != nil {
return fmt.Errorf("Failed to Set information JO, err %v, r1 %v, r2 %v, JO %v", err, r1, r2, job.handle)
}
*/
//return nil
return err
return nil
}

func (job *JobObject) GetInformationJobObject() error {
Expand Down
2 changes: 1 addition & 1 deletion internal/winapi/jobobject.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ type JOBOBJECT_ASSOCIATE_COMPLETION_PORT struct {

// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-group_affinity
type JOBOBJECT_CPU_GROUP_AFFINITY struct {
CpuMask uint64
CpuMask uintptr
CpuGroup uint16
Reserved [3]uint16
}
Expand Down

0 comments on commit 28ca109

Please sign in to comment.