### What happened?

The CPU utilization metrics from Kubelet summary API  [`CPUStats.UsageCoreNanoSeconds`](https://github.com/kubernetes/kubernetes/blob/79470526896f8b6ca744c29109bc3455c1a9d199/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go#L224C2-L224C22) is not accurate on Windows. The value is only 1/10 of the real value which I have other VM level metrics as a proof.

## summary API CPU utilization metric

![image](https://github.com/kubernetes/kubernetes/assets/14968376/f54a5e13-f6f7-4c6f-afc5-8e9704397600)

## VM CPU utilization metric

![image](https://github.com/kubernetes/kubernetes/assets/14968376/ddc08d96-4ef3-4a98-bda5-328ad864ce2e)



### What did you expect to happen?

The `CPUStats.UsageCoreNanoSeconds` should be accurate on Windows too.

### How can we reproduce it (as minimally and precisely as possible)?

```
$ kubectl get --raw "/api/v1/nodes/<NODE>/proxy/stats/summary"
```

T1
```
  "cpu": {
   "time": "2023-12-06T21:23:48Z",
   "usageNanoCores": 8000000,
   "usageCoreNanoSeconds": 20985800000000
  },
```

T2
```
  "cpu": {
   "time": "2023-12-06T21:24:38Z",
   "usageNanoCores": 8000000,
   "usageCoreNanoSeconds": 20986320000000
  },
```

(20986320000000 - 20985800000000)ns / 50s = 0.01 s/s
This matches the magnitude of the metric chart.

### Anything else we need to know?

This problem doesn't exist on Linux.

Call stack
- metric is set here by kubelet - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/winstats.go#L118-L129
- the data collected by using windows perf counters - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/perfcounter_nodestats.go#L206-L212
- query here - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/perfcounters.go#L32

### Kubernetes version

<details>

```console
$ kubectl version
1.27
```

</details>


### Cloud provider

<details>
GKE
</details>


### OS version

<details>

```console
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
```

</details>


### Install tools

<details>

</details>


### Container runtime (CRI) and version (if applicable)

<details>

</details>


### Related plugins (CNI, CSI, ...) and versions (if applicable)

<details>

</details>

CPUStats.UsageCoreNanoSeconds is inaccurate on windows - 1/10 of the real value.
This is a GitHub Issue
repo:kubernetes
owner:kubernetes
Title : CPUStats.UsageCoreNanoSeconds is inaccurate on windows - 1/10 of the real value.
Issue date:

--- start body ---
### What happened?

The CPU utilization metrics from Kubelet summary API  [`CPUStats.UsageCoreNanoSeconds`](https://github.com/kubernetes/kubernetes/blob/79470526896f8b6ca744c29109bc3455c1a9d199/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go#L224C2-L224C22) is not accurate on Windows. The value is only 1/10 of the real value which I have other VM level metrics as a proof.

## summary API CPU utilization metric

![image](https://github.com/kubernetes/kubernetes/assets/14968376/f54a5e13-f6f7-4c6f-afc5-8e9704397600)

## VM CPU utilization metric

![image](https://github.com/kubernetes/kubernetes/assets/14968376/ddc08d96-4ef3-4a98-bda5-328ad864ce2e)



### What did you expect to happen?

The `CPUStats.UsageCoreNanoSeconds` should be accurate on Windows too.

### How can we reproduce it (as minimally and precisely as possible)?

```
$ kubectl get --raw "/api/v1/nodes/<NODE>/proxy/stats/summary"
```

T1
```
  "cpu": {
   "time": "2023-12-06T21:23:48Z",
   "usageNanoCores": 8000000,
   "usageCoreNanoSeconds": 20985800000000
  },
```

T2
```
  "cpu": {
   "time": "2023-12-06T21:24:38Z",
   "usageNanoCores": 8000000,
   "usageCoreNanoSeconds": 20986320000000
  },
```

(20986320000000 - 20985800000000)ns / 50s = 0.01 s/s
This matches the magnitude of the metric chart.

### Anything else we need to know?

This problem doesn't exist on Linux.

Call stack
- metric is set here by kubelet - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/winstats.go#L118-L129
- the data collected by using windows perf counters - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/perfcounter_nodestats.go#L206-L212
- query here - https://github.com/kubernetes/kubernetes/blob/7fe31be11fbe9b44af262d5f5cffb1e73648aa96/pkg/kubelet/winstats/perfcounters.go#L32

### Kubernetes version

<details>

```console
$ kubectl version
1.27
```

</details>


### Cloud provider

<details>
GKE
</details>


### OS version

<details>

```console
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
```

</details>


### Install tools

<details>

</details>


### Container runtime (CRI) and version (if applicable)

<details>

</details>


### Related plugins (CNI, CSI, ...) and versions (if applicable)

<details>

</details>

--- end body ---
