Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/sys: Incorrect results in VirtualBox #49496

Open
mixmind opened this issue Nov 10, 2021 · 1 comment
Open

x/sys: Incorrect results in VirtualBox #49496

mixmind opened this issue Nov 10, 2021 · 1 comment
Labels
NeedsInvestigation
Milestone

Comments

@mixmind
Copy link

@mixmind mixmind commented Nov 10, 2021

What version of Go are you using (go version)?

$ go version
go version go1.16.9 linux/amd64

Does this issue reproduce with the latest release?

Didn't checked

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
 GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/dba/.cache/go-build"
GOENV="/home/dba/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/dba/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/dba/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.16.9"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/mnt/projects/test/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2403385863=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I'm tryint to figure out why IO count not working on virtual machine like VirtualBox or VMWare. On Dedicated Windows server it works as expected.

Code example
// +build windows

package main

import (
"fmt"
"syscall"
"unsafe"

"golang.org/x/sys/windows"

)

type diskPerformance struct {
BytesRead int64
BytesWritten int64
ReadTime int64
WriteTime int64
IdleTime int64
ReadCount uint32
WriteCount uint32
QueueDepth uint32
SplitCount uint32
QueryTime int64
StorageDeviceNumber uint32
StorageManagerName [8]uint16
alignmentPadding uint32 // necessary for 32bit support, see elastic/beats#16553
}

func main() {
maps()
}
func maps() {
var diskPerformance diskPerformance
lpBuffer := make([]uint16, 254)
lpBufferLen, err := windows.GetLogicalDriveStrings(uint32(len(lpBuffer)), &lpBuffer[0])
if err != nil {
fmt.Println("1", err)
return
}
for _, v := range lpBuffer[:lpBufferLen] {
if 'A' <= v && v <= 'Z' {
path := string(rune(v)) + ":"
typepath, _ := windows.UTF16PtrFromString(path)
typeret := windows.GetDriveType(typepath)
if typeret == 0 {
fmt.Println("2", windows.GetLastError())
return
}
if typeret != windows.DRIVE_FIXED {
continue
}
szDevice := fmt.Sprintf(\\.\%s, path)
const IOCTL_DISK_PERFORMANCE = 0x70020
h, err := windows.CreateFile(syscall.StringToUTF16Ptr(szDevice), 0, windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE, nil, windows.OPEN_EXISTING, 0, 0)
if err != nil {
fmt.Println("3", err)
if err == windows.ERROR_FILE_NOT_FOUND {
continue
}
return
}
defer windows.CloseHandle(h)
var diskPerformanceSize uint32
err = windows.DeviceIoControl(h, IOCTL_DISK_PERFORMANCE, nil, 0, (*byte)(unsafe.Pointer(&diskPerformance)), uint32(unsafe.Sizeof(diskPerformance)), &diskPerformanceSize, nil)
if err != nil {
fmt.Println("4", err)
return
}
fmt.Println(diskPerformanceSize)
}
}
return
}

What did you expect to see?

Execution without errors

What did you see instead?

Error in windows.DeviceIoControl

@gopherbot gopherbot added this to the Unreleased milestone Nov 10, 2021
@cagedmantis cagedmantis added the NeedsInvestigation label Nov 11, 2021
@cagedmantis
Copy link
Contributor

@cagedmantis cagedmantis commented Nov 11, 2021

/cc @hyangah

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsInvestigation
Projects
None yet
Development

No branches or pull requests

3 participants