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

When run in Docker psutil returns threads as physical cores #1326

Closed
rightisleft opened this issue Aug 16, 2018 · 4 comments
Closed

When run in Docker psutil returns threads as physical cores #1326

rightisleft opened this issue Aug 16, 2018 · 4 comments
Labels

Comments

@rightisleft
Copy link

rightisleft commented Aug 16, 2018

Problem:
Given that i am running inside a docker container,
When i run psutil.cpu_count(logical=False),
Then it should only return the number of cores AND exclude threads

What i'm seeing
I'm running docker on OS X. When i test psutil.cpu_count(logical=False) on my macbook, i get the following:

OS X

$ python                                                                                                                                                                                                                                                               
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> psutil.cpu_count(logical=False)
4

DOCKER VIA OS X

$docker run -it --rm python:2.7.15-jessie bash
root@314fa2429746:/# pip install psutil
root@314fa2429746:/# python
>>> import psutil
>>> psutil.cpu_count(logical=False)
8
>>>

Actual Hardware:
https://ark.intel.com/products/65524/Intel-Core-i7-3770S-Processor-8M-Cache-up-to-3_90-GHz

@rightisleft rightisleft changed the title Docker returns threads as core When run in Docker psutil returns threads as physical cores Aug 16, 2018
@giampaolo
Copy link
Owner

You can check what the kernel says with the following commands:

osx:psutil vagrant$ sysctl -a | grep physicalcpu
osx:psutil vagrant$ sysctl -a | grep logicalcpu

That's basically what psutil does (in C).

@rightisleft
Copy link
Author

rightisleft commented Aug 28, 2018

Odd response:

root$ sysctl -a | grep logicalcpu
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.ip6tnl0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
$ sysctl -a | grep physicalcpu
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.ip6tnl0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

Simplifying to grep cpu returns:

$ sysctl -a | grep cpu
kernel.hardlockup_all_cpu_backtrace = 0
kernel.perf_cpu_time_max_percent = 25
kernel.sched_domain.cpu0.domain0.busy_factor = 32
kernel.sched_domain.cpu0.domain0.busy_idx = 2
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = 4143
kernel.sched_domain.cpu0.domain0.forkexec_idx = 0
kernel.sched_domain.cpu0.domain0.idle_idx = 1
kernel.sched_domain.cpu0.domain0.imbalance_pct = 125
kernel.sched_domain.cpu0.domain0.max_interval = 16
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 83084
kernel.sched_domain.cpu0.domain0.min_interval = 8
kernel.sched_domain.cpu0.domain0.name = DIE
kernel.sched_domain.cpu0.domain0.newidle_idx = 0
kernel.sched_domain.cpu0.domain0.wake_idx = 0
kernel.sched_domain.cpu1.domain0.busy_factor = 32
kernel.sched_domain.cpu1.domain0.busy_idx = 2
kernel.sched_domain.cpu1.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu1.domain0.flags = 4143
kernel.sched_domain.cpu1.domain0.forkexec_idx = 0
kernel.sched_domain.cpu1.domain0.idle_idx = 1
kernel.sched_domain.cpu1.domain0.imbalance_pct = 125
kernel.sched_domain.cpu1.domain0.max_interval = 16
kernel.sched_domain.cpu1.domain0.max_newidle_lb_cost = 75211
kernel.sched_domain.cpu1.domain0.min_interval = 8
kernel.sched_domain.cpu1.domain0.name = DIE
kernel.sched_domain.cpu1.domain0.newidle_idx = 0
kernel.sched_domain.cpu1.domain0.wake_idx = 0
kernel.sched_domain.cpu2.domain0.busy_factor = 32
kernel.sched_domain.cpu2.domain0.busy_idx = 2
kernel.sched_domain.cpu2.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu2.domain0.flags = 4143
kernel.sched_domain.cpu2.domain0.forkexec_idx = 0
kernel.sched_domain.cpu2.domain0.idle_idx = 1
kernel.sched_domain.cpu2.domain0.imbalance_pct = 125
kernel.sched_domain.cpu2.domain0.max_interval = 16
kernel.sched_domain.cpu2.domain0.max_newidle_lb_cost = 162222
kernel.sched_domain.cpu2.domain0.min_interval = 8
kernel.sched_domain.cpu2.domain0.name = DIE
kernel.sched_domain.cpu2.domain0.newidle_idx = 0
kernel.sched_domain.cpu2.domain0.wake_idx = 0
kernel.sched_domain.cpu3.domain0.busy_factor = 32
kernel.sched_domain.cpu3.domain0.busy_idx = 2
kernel.sched_domain.cpu3.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu3.domain0.flags = 4143
kernel.sched_domain.cpu3.domain0.forkexec_idx = 0
kernel.sched_domain.cpu3.domain0.idle_idx = 1
kernel.sched_domain.cpu3.domain0.imbalance_pct = 125
kernel.sched_domain.cpu3.domain0.max_interval = 16
kernel.sched_domain.cpu3.domain0.max_newidle_lb_cost = 77418
kernel.sched_domain.cpu3.domain0.min_interval = 8
kernel.sched_domain.cpu3.domain0.name = DIE
kernel.sched_domain.cpu3.domain0.newidle_idx = 0
kernel.sched_domain.cpu3.domain0.wake_idx = 0
kernel.sched_domain.cpu4.domain0.busy_factor = 32
kernel.sched_domain.cpu4.domain0.busy_idx = 2
kernel.sched_domain.cpu4.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu4.domain0.flags = 4143
kernel.sched_domain.cpu4.domain0.forkexec_idx = 0
kernel.sched_domain.cpu4.domain0.idle_idx = 1
kernel.sched_domain.cpu4.domain0.imbalance_pct = 125
kernel.sched_domain.cpu4.domain0.max_interval = 16
kernel.sched_domain.cpu4.domain0.max_newidle_lb_cost = 503799
kernel.sched_domain.cpu4.domain0.min_interval = 8
kernel.sched_domain.cpu4.domain0.name = DIE
kernel.sched_domain.cpu4.domain0.newidle_idx = 0
kernel.sched_domain.cpu4.domain0.wake_idx = 0
kernel.sched_domain.cpu5.domain0.busy_factor = 32
kernel.sched_domain.cpu5.domain0.busy_idx = 2
kernel.sched_domain.cpu5.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu5.domain0.flags = 4143
kernel.sched_domain.cpu5.domain0.forkexec_idx = 0
kernel.sched_domain.cpu5.domain0.idle_idx = 1
kernel.sched_domain.cpu5.domain0.imbalance_pct = 125
kernel.sched_domain.cpu5.domain0.max_interval = 16
kernel.sched_domain.cpu5.domain0.max_newidle_lb_cost = 81770
kernel.sched_domain.cpu5.domain0.min_interval = 8
kernel.sched_domain.cpu5.domain0.name = DIE
kernel.sched_domain.cpu5.domain0.newidle_idx = 0
kernel.sched_domain.cpu5.domain0.wake_idx = 0
kernel.sched_domain.cpu6.domain0.busy_factor = 32
kernel.sched_domain.cpu6.domain0.busy_idx = 2
kernel.sched_domain.cpu6.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu6.domain0.flags = 4143
kernel.sched_domain.cpu6.domain0.forkexec_idx = 0
kernel.sched_domain.cpu6.domain0.idle_idx = 1
kernel.sched_domain.cpu6.domain0.imbalance_pct = 125
kernel.sched_domain.cpu6.domain0.max_interval = 16
kernel.sched_domain.cpu6.domain0.max_newidle_lb_cost = 502189
kernel.sched_domain.cpu6.domain0.min_interval = 8
kernel.sched_domain.cpu6.domain0.name = DIE
kernel.sched_domain.cpu6.domain0.newidle_idx = 0
kernel.sched_domain.cpu6.domain0.wake_idx = 0
kernel.sched_domain.cpu7.domain0.busy_factor = 32
kernel.sched_domain.cpu7.domain0.busy_idx = 2
kernel.sched_domain.cpu7.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu7.domain0.flags = 4143
kernel.sched_domain.cpu7.domain0.forkexec_idx = 0
kernel.sched_domain.cpu7.domain0.idle_idx = 1
kernel.sched_domain.cpu7.domain0.imbalance_pct = 125
kernel.sched_domain.cpu7.domain0.max_interval = 16
kernel.sched_domain.cpu7.domain0.max_newidle_lb_cost = 126056
kernel.sched_domain.cpu7.domain0.min_interval = 8
kernel.sched_domain.cpu7.domain0.name = DIE
kernel.sched_domain.cpu7.domain0.newidle_idx = 0
kernel.sched_domain.cpu7.domain0.wake_idx = 0
kernel.softlockup_all_cpu_backtrace = 0
kernel.watchdog_cpumask = 0-7
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.ip6tnl0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
vm.percpu_pagelist_fraction = 0

@giampaolo
Copy link
Owner

You basically don't have physicalcpu and logicalcpu values. Weird... Not sure what to suggest as psutil takes those values directly from the kernel so technically they are not debatable. :-\

@giampaolo giampaolo added the doc label Nov 15, 2020
@giampaolo
Copy link
Owner

Closing as it seems a problem with docker.

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

No branches or pull requests

2 participants