5

I am using the Windows Subsystem for Linux (WSL), and I am unexperimented in the capabilites of linux. Recently, I've been wanting to get better insight in the CPU usage of processes, but I am getting well confused. I am on a computer with 2 cores and 4 logical cores.

In the example of CPU usage that I want to discuss, I launched 2 independant serial calculations from a DFT code (physics stuff) from 2 terminals. I have other smaller processes opened in my Windows system ( internet tabs, Thunderbird...).

if I check the CPU usage from windows' task manager, it tells me that I am using ~70% of CPU, wich seem evenly spread over the 4 logical processors.

When I use top command on Linux, it shows me two "pw.x" processes (the calculations I was referring to) using ~100% of CPU each (!). I do not understand what those "100%" values refer to; 100% of what ? I thought it was the average over all cores being displayed. My computer is still running very smoothly, so the CPU units can not all be used up by the DFT code

If I look it up with mpstat -P ALL, I get yet other results: it tells me that each of the 4 processors are used to ~20%-30%... How is that consistent with the Windows diagnostic ? Or with the top command ?

Cf Screenshot below for a summary (sorry for the french language on Windows):

Screenshot of conflicting (?) CPU reports

Basically my questions are the following:

  • Are these different diagnostics coherent with each other ?

  • can someone point me out to a reference for beginners clearly explaining the use of those monitoring commands, and what the reported quantities refer to exactly ?

  • Is there a command that would allow me to know which core is doing what ? I am running serial calculations (non-parallelized), and it was my understanding that the calculations are therefore processed on a single core each, but I might be wrong. If it is the case, I would like to know which core each of the calculation goes to, and how much it uses

Thank you very much in advance and apologies for the beginner questions

1
  • For anyone else who ends up here like I did, searching for top WSL and multi-core: the top %CPU column can add up to more that 100% (eg. 4 cores up to 400%), and pressing 1 shows %Cpu per core.
    – Jason
    Oct 8, 2020 at 23:20

2 Answers 2

0

I believe Top lists the percentage per thread (logical core), so on your computer you could have up to 4 processes each listed as 100% CPU. Unless you write a program to be idle and wait for hardware interrupts anything you run will take 100% of the thread it is running on as long as it runs. A processes you run will only be on a single thread unless you explicitly program them to be multithreaded, although you may call a multithreaded function without knowing it (some FFT algorithms are multi-threaded).

In WSL top only shows Linux processes, so WSL is using 200%/4=50% of your total, but Windows shows everything together so it is taking up the other 20% to get up to 70% of the total CPU time. "mpstat -P all" seems to be picking up on the Windows processes (perhaps it's a lower level hardware call) and reporting as a percentage of total CPU time, so max would be 25% per thread, but within a couple percent may be as close as it actually gets. The only thing I'm not sure about is why Windows isn't showing 2 threads pegged at 100%.

0

As far as I understand, The Windows Subsystem for Linux is running inside Windows as a process. The Windows operating system is dividing the load between all cores and logical processors. Secondly, Windows has reserved some resources and the WSL can not utilize 100% processor. WSL only has limited access to the processor as much as Windows has allowed it. The reason behind WSL is showing 100% processor usage is that it is utilizing 100% processor resources that are available to it. On the other hand, Windows can truly utilize 100% processor but it isn't.

How to find out which process is using which processor core in Windows:

  1. Open the Task Manager.
  2. In Processes Tab > Right Click any Process and select details. The process thread will be highlighted in the details tab.
  3. Right-click on the thread and click on Set Affinity. A popup box will display the number of cores this specific thread is using. You can also increase or decrease the number of allowed cores to this thread by checking or unchecking the checkboxes.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.