কমান্ড লাইন থেকে লিনাক্সে সিপিইউ / কোরের সংখ্যা কীভাবে পাবেন?


539

আমার কাছে এই স্ক্রিপ্টটি আছে তবে আমি কীভাবে প্রিন্টআউটে শেষ উপাদানটি পেতে পারি তা জানি না:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

সর্বশেষ উপাদানটি হতে হবে সিপিইউগুলির সংখ্যা, বিয়োগ 1।


9
আপনি প্রয়োজন হবে না catসামনে awk, যাহাই হউক না কেন: শুধু awk '<script>' /proc/cpuinfo, যে ভালো: awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo। এবং আপনি "মাইনাস ওয়ান" ছাড়াই প্রবেশ করুন।
টমাসজ গ্যান্ডর

প্রশ্নের সরাসরি উত্তর দিতে, পাইপটি tail -n 1যা শেষ লাইনটি নেয় এবং এটি মুদ্রণ করে।
ফ্যাবিও

এছাড়াও unix.stackexchange.com/q/564494/5132 দেখুন ।
জেডিবিপি

উত্তর:


658
grep -c ^processor /proc/cpuinfo     

"প্রসেসর" দিয়ে শুরু হওয়া রেখার সংখ্যা গণনা করবে /proc/cpuinfo

হাইপার-থ্রেডিং সহ সিস্টেমগুলির জন্য, আপনি ব্যবহার করতে পারেন

grep ^cpu\\scores /proc/cpuinfo | uniq |  awk '{print $4}' 

যা ফিরে আসবে (উদাহরণস্বরূপ) 8(যেখানে উপরের কমান্ডটি ফিরে আসবে 16)


42
মনে রাখবেন যে আপনি হাইপারথ্রেডিং (যেমন, পি 4, বা কোর আই 7) সহ কোনও সিস্টেমে থাকলে এই দু'টিই প্রকৃত অর্থে দ্বিগুণ কোর গণনা শেষ করবে।
ডাস্কউফ-অ্যাক্টিভটিভ-

24
@ ডুসকুফ: যা বেশিরভাগ ক্ষেত্রে আপনি যা চান ঠিক তা হয়।
ফ্র্যাঙ্ক কুষ্টার্স

8
grep -c '^processor' /proc/cpuinfozsh এ
স্টিভেন লু

40
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1সিপিইউ সংখ্যা 0-ভিত্তিক হলে ভুল নম্বরও ফিরে আসবে।
ফাজোর

3
প্রথম লাইনে 1 কোর কম তার পরে বিদ্যমান রয়েছে। আরও ভাল বিড়াল / প্রক / সিপুইনফো | awk '/ ^ প্রসেসর / {মুদ্রণ $ 3}' | ডাব্লুসি-এল
মিরকো এবার্ট

649

বিষয়বস্তু প্রক্রিয়াকরণ /proc/cpuinfoঅযথা ব্যারোক হয়। এনপ্রোক ব্যবহার করুন যা কোর্টিলের অংশ, তাই এটি বেশিরভাগ লিনাক্স ইনস্টলগুলিতে পাওয়া উচিত।

কমান্ড nprocবর্তমান প্রসেসে উপলব্ধ প্রসেসিং ইউনিটগুলির সংখ্যা মুদ্রণ করে, যা অনলাইন প্রসেসরের সংখ্যার চেয়ে কম হতে পারে।

ব্যবহার করা সমস্ত ইনস্টলড কোর / প্রসেসরের সংখ্যা সন্ধান করতে nproc --all

আমার 8-কোর মেশিনে:

$ nproc --all
8

8
এটি ভার্চুয়াল কোর এবং ফিজিকাল কোরের মধ্যে পার্থক্য করে
রিচার্ড

12
আমার যদি শারীরিক কোরের সংখ্যা প্রয়োজন হয় তবে এটি হাইপারথ্রেডিংয়ের সাথে কাজ করে না। আমার কোয়াড কোর আই 7 বাক্সে 8 ফেরত আসে।
প্রটন্নাল

1
@ প্রটন্নালা - টিমবব-এর উত্তর আপনাকে শারীরিক কোরের সংখ্যা দেওয়ার জন্য জালিয়াতি করে
নিক চ্যামাস

1
আমার পুরানো উবুন্টুতে (10.10) এনপ্রোক পাওয়া যায় না। এটি অবশ্যই একটি নতুন additionশ সংযোজন হবে।
বুকজোর

3
দুর্ভাগ্যক্রমে, nprocবুট 2 ডকারের অংশ নয়
কেগাডেক

269

সবচেয়ে পোর্টেবল সমাধান আমি খুঁজে পেয়েছি হ'ল getconfকমান্ড:

getconf _NPROCESSORS_ONLN

এটি লিনাক্স এবং ম্যাক ওএস এক্স উভয়ের ক্ষেত্রেই কাজ করে the পুরোনো লিনাক্স মেশিনে কিছু আমি না গঠন করতে হবে nprocবা lscpuপ্রাপ্তিসাধ্য কমান্ড, কিন্তু তারা আছে getconf

সম্পাদক এর নোট: যদিও ইউটিলিটি POSIX অনুসারে বাধ্যতামূলক করা হয় , নির্দিষ্ট এবং মান নয়। যা বলেছিল, যেমন তারা লিনাক্স প্ল্যাটফর্মের পাশাপাশি ম্যাকোএসেও কাজ করে; ফ্রিবিএসডি / পিসি-বিএসডি-তে আপনাকে অবশ্যই অগ্রণী তালিকা বাদ দিতে হবে ।getconf _NPROCESSORS_ONLN_NPROCESSORS_CONF _


11
এটি আমার জন্য রেড হ্যাট এন্টারপ্রাইজ লিনাক্স 5.4, সেন্টোস 6.5 এবং 7 এবং ম্যাক ওএসএক্স 10.9 (ম্যাভেরিক্স) এ কাজ করেছে। এটি এটিকে সর্বাধিক বহনযোগ্য বলে মনে হয়, কারণ lscpu এই সিস্টেমে ডিফল্টরূপে ইনস্টল করা হয় না। ধন্যবাদ!
বিগ_জি

1
আমি রাজী. এটি বেশ বহনযোগ্য।
বুকজর


1
@ বিক্রান আমি পসিক্সে খুঁজে পাইনি _NPROCESSORS_ONLN। আপনি কি এটি লিঙ্ক করতে পারেন?
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

3
@CiroSantilli 六四 事件 法轮功 纳米比亚 威 g github.com/gstrauss/plasma/blob/master/plasma_sysconf.c থেকে মনে হচ্ছে আমি ভুল ছিলাম: এটি কেবল alচ্ছিক । "সিসকনফ_এসসি_এনপিআরসিএসসিএসসিএলএনএন এবং _SC_NPROCESSORS_CONF মানক দ্বারা প্রয়োজনীয় নয়, তবে অসংখ্য ইউনিক্স প্ল্যাটফর্মগুলিতে সরবরাহ করা হয় এবং ওপেন গ্রুপের দ্বারা byচ্ছিক হিসাবে নথিভুক্ত করা হয়।"
বিসিআরান

100

মুখবন্ধ:

  • সঙ্গে সমস্যা /proc/cpuinfoভিত্তিক উত্তর যে তারা পার্স তথ্য জন্য বোঝানো হয় মানুষের খরচ এবং এইভাবে অভাব আছে একটি স্থিতিশীল বিন্যাস মেশিন পার্সিং জন্য ডিজাইন করা : আউটপুট ফরম্যাট প্ল্যাটফর্ম এবং রানটাইম অবস্থার জুড়ে পৃথক হতে পারে; লিনাক্সে (এবং ম্যাকোএসে) ব্যবহার lscpu -pকরে sysctlসেই সমস্যাটিকে বাইপাস করে

  • getconf _NPROCESSORS_ONLN/ লজিকাল এবং শারীরিক সিপিইউগুলির getconf NPROCESSORS_ONLNমধ্যে পার্থক্য করে না ।


লিনাক্স এবং ম্যাকোস - - অনলাইন - লজিকাল বা শারীরিক সিপিইউগুলির সংখ্যা নির্ধারণের জন্য shকাজ করে এমন একটি (পসিক্স-কমপ্লায়েন্ট) স্নিপেট এখানে রয়েছে ; বিশদ জন্য মন্তব্য দেখুন।

lscpuলিনাক্স এবং sysctlম্যাকোসের জন্য ব্যবহার করে ।

পরিভাষা নোট : সিপিইউ ওএস দ্বারা দেখা হিসাবে ক্ষুদ্রতম প্রক্রিয়াকরণ ইউনিট বোঝায়। নন-হাইপার-থ্রেডিং কোরগুলি প্রতিটি 1 টি সিপিইউ এর সাথে সম্পর্কিত, যেখানে হাইপার-থ্রেডিং কোরগুলিতে 1 এর বেশি থাকে (সাধারণত: 2) - যৌক্তিক - সিপিইউ।
লিনাক্স সর্বনিম্ন ইউনিট দিয়ে শুরু করে নিম্নলিখিত শ্রেণীবিন্যাস [1] ব্যবহার করে :
সিপিইউ < কোর < সকেট < বুক < নোড
প্রতিটি স্তরের সাথে পরবর্তী নিম্ন স্তরের 1 বা ততোধিক উদাহরণ অন্তর্ভুক্ত।

#!/bin/sh

# macOS:           Use `sysctl -n hw.*cpu_max`, which returns the values of 
#                  interest directly.
#                  CAVEAT: Using the "_max" key suffixes means that the *maximum*
#                          available number of CPUs is reported, whereas the
#                          current power-management mode could make *fewer* CPUs 
#                          available; dropping the "_max" suffix would report the
#                          number of *currently* available ones; see [1] below.
#
# Linux:           Parse output from `lscpu -p`, where each output line represents
#                  a distinct (logical) CPU.
#                  Note: Newer versions of `lscpu` support more flexible output
#                        formats, but we stick with the parseable legacy format 
#                        generated by `-p` to support older distros, too.
#                        `-p` reports *online* CPUs only - i.e., on hot-pluggable 
#                        systems, currently disabled (offline) CPUs are NOT
#                        reported.

# Number of LOGICAL CPUs (includes those reported by hyper-threading cores)
  # Linux: Simply count the number of (non-comment) output lines from `lscpu -p`, 
  # which tells us the number of *logical* CPUs.
logicalCpuCount=$([ $(uname) = 'Darwin' ] && 
                       sysctl -n hw.logicalcpu_max || 
                       lscpu -p | egrep -v '^#' | wc -l)

# Number of PHYSICAL CPUs (cores).
  # Linux: The 2nd column contains the core ID, with each core ID having 1 or
  #        - in the case of hyperthreading - more logical CPUs.
  #        Counting the *unique* cores across lines tells us the
  #        number of *physical* CPUs (cores).
physicalCpuCount=$([ $(uname) = 'Darwin' ] && 
                       sysctl -n hw.physicalcpu_max ||
                       lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l)

# Print the values.
cat <<EOF
# of logical CPUs:  $logicalCpuCount
# of physical CPUS: $physicalCpuCount
EOF

[1] ম্যাকোস sysctl (3)ডকুমেন্টেশন

মনে রাখবেন যে ম্যাকোস ব্যতীত বিএসডি-উত্পন্ন সিস্টেমগুলি - যেমন, ফ্রিবিএসডি - কেবলমাত্র ম্যাকস-এর জন্য ছাঁটাই করা hw.ncpuচাবি সমর্থন করে sysctl; আমি স্পষ্ট নই নতুন কি যার উপর hw.npuঅনুরূপ: hw.(logical|physical)cpu_[max]

শারীরিক-সিপিইউ-কাউন্ট lscpuকমান্ডটি সংশোধন করতে সহায়তা করার জন্য @teambob এ টুপিটির টিপস ।

ক্যাভেট : lscpu -pআউটপুটটিতে "বই" কলামটি অন্তর্ভুক্ত করা হয় না ( manপৃষ্ঠাতে "বইগুলি" ট্যাক্সোনমিক হায়ারার্কিতে সকেট এবং নোডের মধ্যে একটি সত্তা হিসাবে উল্লেখ করা হয়)। "বই" একটি প্রদত্ত Linux সিস্টেমে খেলার মধ্যে হন তাহলে ( কেহ কি জানে কখন এবং কিভাবে? ), শারীরিক-CPU- র গোনা কমান্ড পারে অধীনে -report (এই ধৃষ্টতা উপর ভিত্তি করে তৈরি যে lscpuরিপোর্ট ID- র অ-অনন্য উচ্চতর জুড়ে লেভেল সত্তা ; উদাহরণস্বরূপ: 2 বিভিন্ন সকেটের 2 টি পৃথক কোর একই আইডি থাকতে পারে)।


যদি আপনি উপরের কোডটি শেল স্ক্রিপ্ট হিসাবে, সংরক্ষণ করুনcpus , এটিকে সম্পাদনযোগ্য করে তুলুন chmod +x cpusএবং এটি আপনার ফোল্ডারে রাখুন $PATH, আপনি নীচের মতো আউটপুট দেখতে পাবেন:

$ cpus
logical  4
physical 4

[১] জায়েকাই বইটি কী তা নিয়ে আলোকপাত করেছেন : "একটি বই এমন একটি মডিউল যা সিপিইউ সকেট, র‌্যাম সকেট, প্রান্তে আইও সংযোগ এবং কুলিং সিস্টেমের সংহতকরণের জন্য একটি হুক রয়েছে houses এগুলি আইবিএম মেইনফ্রেমে ব্যবহৃত হয় । আরও তথ্য: http://ewh.ieee.org/soc/cpmt/preferencesations/cpmt0810a.pdf "


1
হ্যাঁ দুঃখিত আপনি বাছাই আদেশটি সম্পর্কে সঠিক। আমি lscpu ম্যানুয়াল ছাড়াও বই সম্পর্কে কোনও তথ্য খুঁজে পাচ্ছি না। আমার মনে হয় এটা ফলে NUMA সঙ্গে সম্পর্কযুক্ত en.wikipedia.org/wiki/Non-uniform_memory_access
teambob

2
আমি মনে করি যে এখানে বেশিরভাগ সমাধানগুলি একাধিক সকেট মেশিনকে অগ্রাহ্য করে unlike ধন্যবাদ!
ডিভাইডবিজারো

1
লিনাক্সের ক্ষেত্রে, অনেকগুলি প্রসঙ্গ রয়েছে যেখানে lscpu পাওয়া যায় না, যেমন ইনস্টলার ইমেজ। আমি এটি পছন্দ করি .. যদি এটি সর্বব্যাপী হয়।
ব্রায়ান ক্রিসম্যান

43

lscpu সিপিইউ আর্কিটেকচার তথ্য ফর্ম / proc / cpuinfon মানব-পঠন-সক্ষম বিন্যাসে সংগ্রহ করে:

# lscpu


Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
CPU socket(s):         2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 15
Stepping:              7
CPU MHz:               1866.669
BogoMIPS:              3732.83
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-7

Https://unix.stackexchange.com/questions/468766/outs বোঝ- আউটপুট- of- lscpu এও দেখুন ।


13

এটি আমার পক্ষে কাজ করেছে। tail -nXআপনাকে কেবলমাত্র সর্বশেষ এক্স লাইন দখল করতে সহায়তা করে।

cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1

আপনার যদি হাইপারথ্রেডিং থাকে তবে এটি শারীরিক কোরের সংখ্যা দখলের জন্য কাজ করা উচিত ।

grep "^core id" /proc/cpuinfo | sort -u | wc -l

1
মোট শারীরিক কোরের জন্য "or কোর আইডি" বা একটি প্রসেসরে কেবল পি-কোর?
রিচার্ড

1
সিস্টেমে এক অনন্য শারীরিক কোর প্রতি আইডি লাইন রয়েছে। দ্বিতীয় শারীরিক প্রসেসরের জন্য সংখ্যাগুলি শূন্যের পরে শুরু হবে কিনা তা আমি জানি না ...
লুনিক্সবোকস

1
আপনার যদি একাধিক শারীরিক প্রসেসর থাকে তবে আপনাকে "ফিজিক্যাল আইডি "ও দেখতে হবে।
অ্যান

প্রথম লাইনটি আমার পক্ষে কাজ করে নি। এটি আমার পক্ষে কাজ করে। cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -lএবং সঠিক সংখ্যা দেখায়
jaylweb

11

শারীরিক কোরের মোট সংখ্যার জন্য:

grep '^core id' /proc/cpuinfo |sort -u|wc -l

একাধিক-সকেট মেশিনে (বা সর্বদা), উপরের ফলাফলটি সকেটের সংখ্যা দিয়ে গুণ করুন:

echo $(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1)+1))

নীচে lscpu ব্যবহার করে @ mklement0 এর একটি দুর্দান্ত উত্তর রয়েছে। আমি মন্তব্যগুলিতে আরও একটি সংক্ষিপ্ত সংস্করণ লিখেছি


10

আপনি পাইথন ব্যবহার করতে পারেন! শারীরিক কোরের সংখ্যা পেতে:

$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4

হাইপারথ্রেডেড কোরগুলির সংখ্যা পেতে:

$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8

পাইথন ২.7.১৫ সহ এই কমান্ডগুলি কিছু মুদ্রণ করে না। REPL এ তারা করে।
ভাইটেনিস বিভেইনিস

1
@ ভাইটেনস বিভেইনিস ধন্যবাদ, আমি আমার উত্তরটি স্থির করেছি!
ostrokach

9

লিনাক্স, ম্যাকস, উইন্ডোজের জন্য ক্রসপ্ল্যাটফর্ম সমাধান:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu || echo "$NUMBER_OF_PROCESSORS")

9

লিনাক্সে অনলাইনে থাকা শারীরিক কোরের সংখ্যা গণনা করার জন্য আমি এখানে যেভাবে ব্যবহার করছি:

lscpu --online --parse=Core,Socket | grep --invert-match '^#' | sort --unique | wc --lines

বা সংক্ষেপে:

lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l

উদাহরণ (1 সকেট):

> lscpu
...
CPU(s):                28
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             1
....
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
14

উদাহরণ (2 সকেট):

> lscpu
...
CPU(s):                56
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             2
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
28

উদাহরণ (4 সকেট):

> lscpu
...
CPU(s):                64
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             4
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
32

একাধিক সকেট কাজ করে এবং পরিচালনা করে
jbo5112

এটি সেরা উত্তর।
জোর্মা রেবেন

7

গেটকনফ ব্যবহার করা প্রকৃতপক্ষে সর্বাধিক বহনযোগ্য উপায়, তবে ভেরিয়েবলটি বিএসডি এবং লিনাক্সে গেটকনফের বিভিন্ন নাম রয়েছে, সুতরাং আপনাকে এই দুটি বিষয়ই পরীক্ষা করতে হবে, যেমন এই আঙ্গিকটি বলে: https://gist.github.com/jj1bdx/5746298 (এছাড়াও অন্তর্ভুক্ত রয়েছে) কেএসএস ব্যবহার করে একটি সোলারিস ফিক্স)

আমি ব্যক্তিগতভাবে ব্যবহার:

$ getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1

এবং আপনি যদি পাইথনটিতে এটি চান তবে আপনি কেবলমাত্র ওএস মডিউলটি আমদানি করে সিস্কেল গেটকনফ ব্যবহার করতে পারেন:

$ python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);'

যেমন nprocএটি জিএনইউ কোরিউটিলসের অংশ, তাই ডিএসডিএসএসে বিএসডি তে পাওয়া যায় না। এটি অন্যান্য কিছু পদ্ধতির পরে সিস্কোনফ () ব্যবহার করে।


6

আপনি যদি এটি করতে চান তাই এটি লিনাক্স এবং ওএস এক্সে কাজ করে, আপনি এটি করতে পারেন:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

আমার উপর, এটি হাইপারথ্রেডগুলির সংখ্যা প্রদান করে। আমার শারীরিক কোরের সংখ্যা এবং সকেটের সংখ্যাও জানতে হবে।
ব্যবহারকারী 2465201

ঠিক আছে - hw.physicalcpu সহ ঠিক একই কমান্ডটি মূল গণনা দেয়। সকেটের গণনা সম্পর্কে এখনও নিশ্চিত নয় ... একটি "যৌক্তিক" এবং "সক্রিয়" সিপিইউ গণনাও রয়েছে তবে আমি এর অর্থ কী তা নিশ্চিত নই।
ব্যবহারকারী 2465201

দ্রুত আপডেট - এটি এত পোর্টেবল বলে মনে হচ্ছে না। আমি এটি একটি লিনাক্স বাক্সে চেষ্টা করেছিলাম, এবং এটি কেবল / proc ডিরেক্টরিগুলি পড়তে পারে যা ম্যাকের চেয়ে লিনাক্স সিস্টেমের জন্য আলাদা - উদাহরণস্বরূপ, এইচডাব্লু সাব-ডিরেক্টরি নেই। বলা হচ্ছে, আপনি এখনও / প্রো / /
সিপিউইনফো


3

শারীরিক সিপিইউ কোরের সংখ্যা নির্ধারণ করতে আপনি নীচের একটি পদ্ধতি ব্যবহার করতে পারেন ।

  • অনন্য কোর আইডগুলির সংখ্যা গণনা করুন (মোটামুটি সমান grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l)।

    awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo

  • সকেটের সংখ্যার সাহায্যে 'প্রতি সকেটে কোরের সংখ্যা' গুণান।

    lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}'

  • লিনাক্স কার্নেল দ্বারা ব্যবহৃত অনন্য লজিকাল সিপিইউর সংখ্যা গণনা করুন। -pবিকল্প সহজ পার্সিং জন্য আউটপুট উত্পন্ন এবং এর পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যপূর্ণ lscpu

    lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'


অন্যরা যা বলেছে কেবল তা পুনরাবৃত্তি করার জন্য, এখানে অনেকগুলি সম্পর্কিত সম্পত্তি রয়েছে।

উপলব্ধ প্রসেসরের সংখ্যা নির্ধারণ করতে:

getconf _NPROCESSORS_ONLN
grep -cP '^processor\t' /proc/cpuinfo

উপলব্ধ প্রক্রিয়াকরণ ইউনিটগুলির সংখ্যা নির্ধারণ করার জন্য (অগত্যা কোরগুলির সংখ্যার মতো নয়)। এটি হাইপারথ্রেডিং-সচেতন।

nproc

আমি খরগোশের গর্ত থেকে খুব বেশি নীচে যেতে চাই না, তবে আপনি কনফিগার করা প্রসেসরের সংখ্যা (কেবল সহজলভ্য / অনলাইন প্রসেসরের বিপরীতে) মাধ্যমেও নির্ধারণ করতে পারেন getconf _NPROCESSORS_CONF। সিপিইউর মোট সংখ্যা (অফলাইন এবং অনলাইন) নির্ধারণ করতে আপনি এর আউটপুট পার্স করতে চান lscpu -ap


আপনি শারীরিক কোর চাইলে এটি সঠিক উত্তর।
দিনেশ

3

আমি ভেবেছিলাম cat /proc/cpuinfoআমাকে সঠিক উত্তর দেবে, তবে আমি সম্প্রতি দেখেছি যে আমার এআরএম কোয়াড কোর কর্টেক্স এ 53 সিস্টেমটি কেবল একটি একক কোর দেখিয়েছে। দেখে মনে হচ্ছে যে / proc / cpuinfo কেবল সক্রিয় কোরগুলি দেখায়, যদিও:

cat /sys/devices/system/cpu/present

কি আছে একটি ভাল পরিমাপ। আপনি এটিও করতে পারেন

cat /sys/devices/system/cpu/online

কোন কোর অনলাইন হয় তা দেখতে এবং to

cat /sys/devices/system/cpu/offline

কোন কোর অফলাইন রয়েছে তা দেখতে। online, offline, এবং presentসেটির sysfs এন্ট্রি, সিপিইউ সূচী আসতে তাই একটি ফেরত মান 0ঠিক উপায়ে কোর 0, যেহেতু একটি ফেরত মান 1-3মানে কোর 1,2 এবং 3।

Https://www.kernel.org/doc/Docamentation/ABI/testing/sysfs-devices-system-cpu দেখুন


2

নিম্নলিখিতটি আপনাকে একটি হাইপারথ্রেড এবং নন-হাইপারথ্রেড সিস্টেম উভয়টিতে "রিয়েল" কোরগুলির সংখ্যা দেবে। কমপক্ষে এটি আমার সমস্ত পরীক্ষায় কাজ করেছিল।

awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 };  END { print CORES*P }' /proc/cpuinfo

-1, এটি 0একটি ওপ্টরন 4170 হি সঙ্গে একক কোর এ প্রত্যাবর্তন 4করে তবে একটি আট কোর বক্সে ওপ্টরন 3280 দিয়ে ফিরে আসে ...
জ্যামনেট

1

আমার ওয়েব পৃষ্ঠা নয়, তবে http://www.ixbrian.com/blog/?p=64&C_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 এর এই আদেশটি সেন্টোতে আমার জন্য সুন্দরভাবে কাজ করে। হাইপারথ্রেডিং সক্ষম করা থাকলেও এটি আসল সিপাস প্রদর্শন করবে।

cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l


+1, "lscpu -p = কোর, সকেট" দিয়ে সমাধানের চেয়ে দীর্ঘ কিন্তু সরাসরি / পার্সিং / প্রোক / সিপুইনফোর কাজ করে, lscpu এর প্রয়োজন নেই।
ফ্রেভাদোনা

1

"কোর আইডি" উপলভ্য না হলে "প্রসেসর" কাউন্ট অন ফ্লো-ব্যাক উইথ উইক ব্যবহার করে প্রতি "ফিজিক্যাল আইডি" পদ্ধতিতে "কোর আইডি" গণনা করুন (রাস্পবেরির মতো)

echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /proc/cpuinfo)

1
cat /proc/cpuinfo | grep processor

এটি ভাল কাজ করে। আমি যখন প্রথম উত্তরটি চেষ্টা করেছিলাম তখন আমি 3 সিপিইউ আউটপুট হিসাবে পাই। আমি জানি যে সিস্টেমে আমার 4 টি সিপিইউ রয়েছে তাই আমি grepপ্রসেসরের জন্য সবেমাত্র একটি কাজ করেছি এবং আউটপুটটি দেখতে এ রকম দেখাচ্ছে:

[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

1
 dmidecode  | grep -i cpu | grep Version

আমাকে দেয়

সংস্করণ: ইন্টেল (আর) জিয়ন (আর) সিপিইউ E5-2667 ভি 4 @ 3.20GHz

সংস্করণ: ইন্টেল (আর) জিয়ন (আর) সিপিইউ E5-2667 ভি 4 @ 3.20GHz

কোনটি সঠিক সকেটের গণনা - E5-2667প্রতিটি সকেটের যা আছে তা আমাকে বলে 8 cores, তাই গুণিত এবং 16 coresজুড়ে শেষ 2 sockets

lscpuআমাকে কোথায় দিন 20 CPUs- যা সম্পূর্ণ ভুল - কেন তা নিশ্চিত নয়। (একই জন্য যায় cat /proc/cpu- শেষ হয় 20


1

দ্রুত, কাঁটাচামচ ছাড়া

সকলের সাথে এটি কাজ করে

ncore=0
while read line ;do
    [ "$line" ] && [ -z "${line%processor*}" ] && ncore=$((ncore+1))
  done </proc/cpuinfo
echo $ncore
4

যাতে সামঞ্জস্যপূর্ণ থাকে , , এবং অন্যদের ncore=$((ncore+1))পরিবর্তে আমি ব্যবহার করেছি ((ncore++))

সংস্করণ

ncore=0
while read -a line ;do
    [ "$line" = "processor" ] && ((ncore++))
  done </proc/cpuinfo
echo $ncore
4


1

যদি আপনি পাইথন ব্যবহার করতে পারেন তবে এটি ঠিক আছে তবে numexprমডিউলের জন্য এটির একটি কার্যকারিতা রয়েছে:

In [5]: import numexpr as ne

In [6]: ne.detect_number_of_cores()
Out[6]: 8

এটিও:

In [7]: ne.ncores
Out[7]: 8

কমান্ড প্রম্পট থেকে এই তথ্যটি জিজ্ঞাসা করতে:

# runs whatever valid Python code given as a string with `-c` option
$ python -c "import numexpr as ne; print(ne.ncores)"
8

অথবা কেবল multiprocessing.cpu_count()ফাংশন থেকে এই তথ্য পাওয়া সম্ভব

$ python -c "import multiprocessing; print(multiprocessing.cpu_count())"

বা আরও সহজভাবে ব্যবহার os.cpu_count()

$ python -c "import os; print(os.cpu_count())"

1
অজগরটিতে কমান্ড হিসাবে এই কাজ করার কোনও উপায় আছে? উদাহরণস্বরূপ আমি পাইথন-এম numexpr.ncores চেষ্টা করেছি কিন্তু এটি কাজ করে না।
মনসিউরবিল্টো

1
@ মনসিউরবিল্টো দয়া করে আপডেট উত্তরটি দেখুন!
কুমারিও 23

ফিরিয়ে দেওয়া গণনাটি cpu_countভুল, এটি কোরগুলির সংখ্যাটি দেয় না তবে কেবলমাত্র ইন্টেল সিপিইউগুলিতে হাইপারথ্রেডগুলির সংখ্যা
অ্যান্টি হাপালা

1

আপনি যদি কেবল শারীরিক কোরগুলি গণনা করতে চান তবে এই আদেশটি এটি আমার জন্য করেছিল।

lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w

বেশ মৌলিক, তবে লজিকাল গণনা উপেক্ষা করে প্রকৃত শারীরিক কোরগুলি গণনা করা বলে মনে হচ্ছে


0

পাইথন 3 এটি পাওয়ার কয়েকটি সহজ উপায়ও সরবরাহ করে:

$ python3 -c "import os; print(os.cpu_count());"

4

$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"

4


এটি আমার জন্য 8 টি প্রত্যাবর্তন করবে যখন আমার প্রত্যেকটিতে 2 টি থ্রেড সহ 4 টি কোর থাকবে ...
অ্যান্টি হাপাল


0

সংক্ষিপ্তসার: শারীরিক সিপিইউগুলি পেতে এটি করুন:

grep 'core id' /proc/cpuinfo | sort -u

শারীরিক এবং লজিকাল সিপিইউগুলি পেতে এটি করুন:

grep -c ^processor /proc/cpuinfo

/proc << এটি আপনার প্রক্রিয়া এবং সম্পর্কে আপনার যে কোনও তথ্যের সোনালী উত্স

/proc/cpuinfo << হ'ল কোনও সিপিইউ তথ্যের স্বর্ণের উত্স।


শারীরিক সিপিইউ গণনা মাল্টি সকেট কম্পিউটারের সাথে কাজ করে না; তার জন্য আপনাকে প্রতিটি 'কোর আইডি' এর 'ফিজিক্যাল আইডি'র সাথে যুক্ত করতে হবে।
ফ্রেভাদোনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.