লিনাক্সে সিস্টেমের কোরগুলির সংখ্যা কীভাবে জানবেন?


231

আমি জানতে চেয়েছিলাম আমার সিস্টেমে কতটি কোর রয়েছে তাই আমি গুগলে একই প্রশ্নটি অনুসন্ধান করেছি। আমি কিছু কমান্ড পেয়েছি যেমন lscpuকমান্ড। যখন আমি এই আদেশটি চেষ্টা করেছি, এটি আমাকে নিম্নলিখিত ফলাফল দিয়েছে:

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 23
Stepping:              10
CPU MHz:               1998.000
BogoMIPS:              5302.48
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              2048K
NUMA node0 CPU(s):     0-3

বিশেষত, এই আউটপুটটি দেখায়:

  • সিপিইউ (গুলি): 4
  • সকেট প্রতি কোর (গুলি): 4
  • সিপিইউ পরিবার: 6

এর মধ্যে কোনটি লিনাক্স সিস্টেমের কোরকে নির্দেশ করে?

কোরগুলির সংখ্যা বলার জন্য অন্য কোনও আদেশ আছে, বা আমি এটি পুরোপুরি ভুল বলে ধরে নিচ্ছি?


1
সকল ব্যবহারকারীর জন্য আমার সহজ কমান্ড: p গ্রেপ প্রিসেসর / প্রোক / সিপুইনফো | wc -l
5 แนวหน้า

6
আপনার পাঠ্যের চিত্রটি খুব সহায়ক নয় । এটি কোনও সম্পাদক হিসাবে অনুলিপি করা যায় না, এবং এটি খুব ভাল সূচী করে না, মানে একই সমস্যাযুক্ত অন্যান্য ব্যবহারকারীদের এখানে উত্তর খুঁজে পাওয়ার সম্ভাবনা কম। দয়া করে সম্পাদনা প্রাসঙ্গিক পাঠ্য সরাসরি (বিশেষ কপি ব্যবহার + + ট্রান্সক্রিপশন ত্রুটিগুলি এড়ানোর পেস্ট করুন) নিগমবদ্ধ আপনার পোস্ট।
টবি স্পিড

উত্তর:


117

আপনাকে সকেট প্রতি সকেট এবং কোরগুলি দেখতে হবে। এক্ষেত্রে আপনার 1 টি ফিজিকাল সিপিইউ (সকেট) রয়েছে যার 4 টি (প্রতি সকেট কোর) রয়েছে।


1
আমার কাছে সকেট প্রতি একটি সকেট, দুটি সিপাস রয়েছে, যার অর্থ মোট 2। তবে এটি 4 সিপিএস বলে। আমি চেষ্টা করলে nproc4 জন ফিরে আসি। cat /proc/cpuinfoআমি 4 পেয়েছি ব্যবহার করে এবং সুতরাং এই উত্তরটি ভুল বলে মনে হচ্ছে, আমার পরিস্থিতির জন্য for
এসপিআরবিএনএন

14
হাইপার থ্রেডিং না থাকলে নয়। আপনার কাছে এখনও 2 টি শারীরিক কোর রয়েছে তবে প্রতিটি কোর / প্রো / সিপুইনফোতে দু'বার শো করে। আপনি যদি কোরিডের নীচে সাবধানে তাকান তবে দেখতে পাবেন যে আপনার প্রতিটি কোরিড দুটিবার তালিকাভুক্ত রয়েছে। এছাড়াও পতাকাগুলির নীচে আপনি এইচটি পতাকা দেখতে পাবেন।
ব্যবহারকারী1403360

237

সম্পূর্ণ ছবি আপনাকে সংখ্যা তাকান প্রয়োজন পেতে থ্রেড কোর প্রতি কোর সকেট এবং প্রতি সকেট । আপনি যদি এই সংখ্যাগুলি গুন করেন তবে আপনি আপনার সিস্টেমে সিপিইউ সংখ্যা পাবেন ।

সিপিইউস = প্রতি সকেট এক্স সকেট প্রতি কোর কোর প্রতি থ্রেড

আপনি যখন চালনা করেন তখন সিপিইউগুলি আপনি দেখতে পান htop(এগুলি শারীরিক সিপিইউগুলির সমান হয় না)।

এখানে একটি ডেস্কটপ মেশিনের উদাহরণ রয়েছে:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1

এবং একটি সার্ভার:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                32
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

এর আউটপুট nprocসিপিইউ গণনার সাথে সম্পর্কিত lscpu। উপরের ডেস্কটপ মেশিনের জন্য এটি প্রতিবেদন করা 8 টি সিপিইউয়ের সাথে মেলে lscpu:

$ nproc --all
8

এর ফলাফলটি /proc/cpuinfoএই তথ্যের সাথে মিলে যাবে, উদাহরণস্বরূপ উপরের ডেস্কটপ সিস্টেমে আমরা দেখতে পাচ্ছি 8 টি প্রসেসর (সিপিইউ) এবং 4 টি কোর (কোর আইডি 0-3) রয়েছে:

$ grep -E 'processor|core id' /proc/cpuinfo
processor   : 0
core id     : 0
processor   : 1
core id     : 0
processor   : 2
core id     : 1
processor   : 3
core id     : 1
processor   : 4
core id     : 2
processor   : 5
core id     : 2
processor   : 6
core id     : 3
processor   : 7
core id     : 3

cpu coresদ্বারা রিপোর্ট /proc/cpuinfoসাথে সঙ্গতিপূর্ণ Core(s) per socketদ্বারা রিপোর্ট lscpu। উপরে ডেস্কটপ মেশিনের জন্য lscpu দ্বারা প্রতিবেদন করা সকেট প্রতি 4 টি কোর (গুলি) এর সাথে মেলে:

$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores   : 4

আপনার প্রশ্নের সুনির্দিষ্টভাবে উত্তর দেওয়ার জন্য আপনি আপনার সকেটের সংখ্যার সাহায্যে সকেট প্রতি কয়টি কোরের সংখ্যাটি গুণিয়ে আপনার কতটি কোর রয়েছে তা বলুন।

কোর = সকেট প্রতি সকেট কোর

উদাহরণস্বরূপ ডেস্কটপের উপরের সিস্টেমে 4 টি কোর রয়েছে:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4

সার্ভারটিতে 16 টি রয়েছে:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16

আরেকটি দরকারী ইউটিলিটি হ'ল dmidecodeযা প্রতি সকেটের তথ্যকে আউটপুট দেয়। উপরে তালিকাভুক্ত সার্ভার সিস্টেমের ক্ষেত্রে আমরা সকেট প্রতি 8 টি এবং সকেট প্রতি 16 টি থ্রেড দেখতে আশা করি:

$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
    Socket Designation: CPU1
    Core Count: 8
    Thread Count: 16
    Socket Designation: CPU2
    Core Count: 8
    Thread Count: 16

lscpuকমান্ড দরকারী অপশন আপনি চেক আউট করতে উদাহরণস্বরূপ পছন্দ করতে পারেন একটি নম্বর আছে:

$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'

দেখুন man lscpuবিস্তারিত জানার জন্য।

সংক্ষেপে:

  • আপনার সকেট, কোর এবং থ্রেড সম্পর্কে সচেতন হওয়া দরকার
  • আপনাকে সিপিইউ শব্দটি সম্পর্কে সতর্ক হওয়া দরকার কারণ এর অর্থ বিভিন্ন প্রসঙ্গে বিভিন্ন জিনিস

12
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
গানসুব

2
আমি রাজী. বিষয়টি গ্রহণযোগ্য উত্তর হিসাবে এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
রাফায়েল

আমি মনে করি যোগ lscpu --all --extendedকরা একটি দরকারী সংযোজন হবে তবে আমার আর এই বিশেষ মেশিনে অ্যাক্সেস পাবে না।
htaccess

আপনি lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
জঞ্জাল

@ জাকুব ক্লিনকোভস্কে, এটি উল্লেখ করার জন্য ধন্যবাদ তবে এই ক্ষেত্রে আমি আসলে এর গুণনটি প্রদর্শন করতে চাই Socket(s) * Core(s) per socket। আমি সবেমাত্র যা বলেছি তা দিয়েছি অনুমান echo Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))করা আরও ভাল হবে যাতে লোকেরা ঠিক কী গুণমান হচ্ছে তা দেখতে পারে ...
htaccess

61

আপনি nproc(1)কমান্ড দ্বারা এই তথ্য পেতে পারেন

$ nproc --all
12

এটির মূল সুবিধার দরকার নেই।


10
এটি ভুল, এনআরপোকের আউটপুট lscpu থেকে সিপিইউ গণনার সাথে সম্পর্কিত। আপনার যদি মাল্টিথ্রেডেড কোর থাকে তবে এনপ্রোকের আউটপুট আপনার সাথে থাকা করের সংখ্যার সাথে মেলে না।
htaccess

2
একটি মূল-বিহীন সমাধানের জন্য, একটি হ্যাকটি শীর্ষ এবং হিট ব্যবহার করতে হবে available এটি উপলব্ধ কোরগুলির সংখ্যা দেখায় । আমি কেন "উপলভ্য" দেখলাম কারণ অন্তর্নিহিত হার্ডওয়্যারটিতে মেঘ ইনফ্রার মতো আরও বেশি কোর থাকতে পারে।
হোপিং বনি

@htaccess কমপক্ষে উবুন্টু, এই সঠিক সংখ্যা আউটপুট অন লাইন যৌক্তিক সিপিইউ
Wil

1
@htaccess ঠিক আছে আমি এটি পেয়েছি। সাধারণত যখন একটি লিনাক্স ডাফার জিজ্ঞাসা করে যে কতগুলি কোর তার অর্থ কতগুলি যৌক্তিক থ্রেড উপলব্ধ। প্রযুক্তিগতভাবে বলতে গেলে, লিনাক্স হার্ডওয়্যার থ্রেডগুলিকে 'সিপাস' বলা ভুল। আপনার যন্ত্রটিতে 2 টি কোর এবং 4 এসএমটি হার্ডওয়্যার থ্রেড সহ 1 টি সিপিইউ রয়েছে। সিপিইউ এবং কোরের ফলস্বরূপ কী বোঝায় তাতে প্রচুর অস্পষ্টতা রয়েছে। কিন্তু এখন, আপনি যা বলতে চেয়েছিলেন তা পেয়েছি y
উইল

1
@ হ্যাঁ আমি উপরে আমার উত্তরে এটি ডেকে বলছি: "আপনার সিপিইউ শব্দটি সম্পর্কে সতর্ক হওয়া দরকার কারণ এর অর্থ বিভিন্ন প্রসঙ্গে বিভিন্ন জিনিস"। ব্যক্তিগতভাবে আমি লজিকাল প্রসেসিং ইউনিটগুলির সাথে প্রসেসরের শারীরিক কোরের সাথে (যেমন ফিজিকাল প্রসেসিং ইউনিট) "কোরগুলি" সমান করি না।
htaccess

19

উত্তরটি বিভ্রান্তিকর না হওয়ার জন্য আপনাকে কয়েকটি সাধারণ কম্পিউটার আর্কিটেকচার ধারণাটি বুঝতে হবে:

  • আপনি আপনার লিনাক্স সিস্টেমে প্রক্রিয়াগুলি ("প্রোগ্রাম") চালান । প্রতিটি প্রক্রিয়াতে এক বা একাধিক থ্রেড থাকে
  • প্রতিটি থ্রেড নির্দেশাবলীর একটি পৃথক ক্রম । সমান্তরালে দুটি থ্রেড কার্যকর করা যায়।
  • প্রতিটি নির্দেশ কার্যকর করার জন্য একটি সিপিইউকে দেওয়া হয়। একটি সিপিইউতে যুক্তি রয়েছে যা কোনও নির্দেশের বিটগুলি কী বোঝায় তা নির্ধারণ করে এবং এটি দিয়ে কী করবেন তা স্থির করে।
  • বিভিন্ন ধরণের নির্দেশনা রয়েছে। সিপিইউর অভ্যন্তরের সিদ্ধান্তের যুক্তি বিভিন্ন নির্দেশাবলী বিভিন্ন হার্ডওয়্যার ইউনিটে প্রেরণ করবে । উদাহরণস্বরূপ, গাণিতিক নির্দেশাবলী আসলে একটি ALU (পাটিগণিত / লজিক ইউনিট) দ্বারা সঞ্চালিত হয় , অন্যদিকে মেমরি থেকে লোড / স্টোরকে কোনও ধরণের মেমরি ইউনিটের মাধ্যমে সম্পাদন করা হয় এমন নির্দেশাবলী ।

  • একটি কোর প্রকৃত এক্সিকিউশন হার্ডওয়্যারের সেটকে বোঝায় (যেমন প্রতিটি কোরে একটি ALU, একটি মেমরি ইউনিট ইত্যাদি থাকে ...)

  • আপনার একাধিক সিপিইউ থাকতে পারে যা একটি কোর ভাগ করে - এটিকে হাইপারথ্রেডিং বলা হয়।

    • ধারণা: থ্রেড এ বর্তমানে পাটিগণিত করছেন, থ্রেড বি মেমরি থেকে কিছু লোড করছে। যখন এটি সত্য হয়, থ্রেড এ এবং বি একে অপরের পথে না এসে দক্ষতার সাথে একটি একক কোর ভাগ করতে পারে (এএএলইউ ব্যবহার করে, বি মেমরি ইউনিট ব্যবহার করে)। অবশ্যই, কখনও কখনও উভয় প্রোগ্রামই ALU চাইবে এবং তারপরে তাদের একে অপরের জন্য অপেক্ষা করতে হবে ...
  • একটি সকেট হ'ল মাদারবোর্ডের দৈহিক স্লট যেখানে একটি চিপ isোকানো হয়। এই চিপটিতে এটির একটি নির্দিষ্ট সংখ্যা রয়েছে has

উদাহরণ:

ওপির উদাহরণ:

CPU(s):                4
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
  • একটি শারীরিক সকেট, যার সাথে একটি চিপ রয়েছে
  • 4 শারীরিক কোর (4 টি ALU এবং 4 টি মেমরি ইউনিট ভাবেন)
  • কেবলমাত্র 1 টি থ্রেড কোনও কোরকে নির্দেশনা জারি করতে পারে (হাইপারথ্রেডিং নেই), যার অর্থ সেখানে
  • কোর প্রতি এক সিপিইউ বা 4 * 1 = 4 সিপিইউ

আরেকটি উদাহরণ:

CPU(s):                16
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             2

দুটি শারীরিক সকেট, প্রত্যেকটিতে একটি চিপযুক্ত 4 টি শারীরিক কোর, মোট 8 টি করে কোর। দুটি থ্রেড প্রতিটি কোরকে নির্দেশনা জারি করে (এই মেশিনটির হাইপারথ্রেডিং রয়েছে), অর্থাত্ প্রতিটি কোরের সাথে দুটি সিপিইউ যুক্ত থাকতে হবে, মোট 8 * 2 = 16 সিপিইউ তৈরি করে

প্রথম মেশিনটি নির্দিষ্ট সময়ে, সময়কালে চারটি সূক্ষ্ম নির্দেশাবলী সম্পাদন করতে পারে। দ্বিতীয় মেশিনটি নির্ধারিত সময়ে 8 থেকে 16 নির্দেশাবলীর মধ্যে সম্পাদন করতে পারে: 16 টি সিপিইউগুলির প্রতিটি জোড়া বিভিন্ন ধরণের নির্দেশনা সম্পাদন করছে এবং তাই অপেক্ষা না করে একটি কোর ভাগ করতে পারে কেবল তখনই তা অর্জন করা হবে।


14

আপনি কমান্ডটিও ব্যবহার করতে পারেন cat /proc/cpuinfoযা প্রতিটি কোরের জন্য একগুচ্ছ ডেটা আউটপুট দেয়। প্রতিটি অংশ এই তথ্য দিয়ে শুরু হয়:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz
(...)

কোরের সংখ্যা 0 থেকে শুরু হয়েছে, সুতরাং শেষ অংশটি processor : 3যদি এই ক্ষেত্রে বলে, আপনার মেশিনটিতে 4 টি কোর রয়েছে।


তথ্যটি বিশদে বর্ণনা করার জন্য এই আদেশটি ধন্যবাদ :) :)
মিঃ এসকোয়ার

ওয়ান-লাইনার কমান্ডের জন্য, আপনি ব্যবহার করতে পারেনgrep -c ^processor /proc/cpuinfo
ওয়াইল্ডকার্ড

5
getconf _NPROCESSORS_ONLN

(getconf glibc এর অংশ)


1
এটি কিছুটা আলাদা (এবং কিছু প্রয়োজনের জন্য দরকারী)। এটি এখন অনলাইনে থাকা প্রসেসরের সংখ্যা (যেমন চলমান প্রক্রিয়াগুলির জন্য উপলভ্য)। এটি এক বা একাধিক অফলাইন গ্রহণ করা হলে সিপিইউগুলির মোট সংখ্যার চেয়ে কম হতে পারে (যেমন হাইবারনেশনের সময় বা প্রসেসরের যোগ / অপসারণের সময়)।
টবি স্পিড

এবং getconf _NPROCESSORS_CONFআপনাকে কনফিগার করা প্রসেসরের সংখ্যা পায়। আপনি sysconf()ফাংশনটি ব্যবহার করে একটি সি উত্স কোডের অভ্যন্তরেও এই উভয় ম্যাক্রোর মান পেতে পারেন । man sysconfআরও তথ্যের জন্য টাইপ করুন।
গ্যালাক্সি

4
[root@xxxxx ~]#  dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"
    Socket Designation: CPU1
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz
    Core Count: 6
    Core Enabled: 6
    Thread Count: 12
    Socket Designation: CPU2
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz
    Core Count: 6
    Core Enabled: 6
    Thread Count: 12

t 4ডিমিডেকোডের জন্য কী করবেন? গণনা ও সক্ষম লাইনগুলি কীভাবে গুণবে? আপনার উদাহরণটি কি 2 টি কোর বা 6, বা 12, বা 24 বা অন্য কোনও সংখ্যা দেখায়?
Xen2050

@ Xen2050 4হয় processorদেখতে, linux.die.net/man/8/dmidecode । তবে 4যুক্তি হিসাবে ব্যবহার করা একটি খারাপ অভ্যাস।
জনকোচ

bash: dmidecode: command not found
ক্যামেরন হাডসন

3
$ grep -c processor /proc/cpuinfo
8

আপনার এটাই দরকার। হাইপারথ্রেডিং চালু বা বন্ধ নির্বিশেষে এটি অনলাইনের মূল সংখ্যা।

$ ls -d /sys/devices/system/cpu/cpu* | wc -l
8

আর একটি সহজ উপায়।


2
এটি সহজ, তবে আমি নিশ্চিত না যে এটি প্রশ্নের সঠিক। তিনি কোরের সংখ্যার জন্য জিজ্ঞাসা করেছিলেন: (কোর! = সিপাস) হাইপারথ্রেডিং সক্ষম করা থাকলে। হাইপার-থ্রেডেড হওয়ার পরে আমার সিস্টেমে 24 টি কোর রয়েছে: 48 সিপাস। এছাড়াও, সরবরাহিত দ্বিতীয় কমান্ডটি ব্যবহার করে 49ls -d /sys/devices/system/cpu/cpu* | wc -l দেখায় কারণ ডিরেক্টরিগুলির মধ্যে একটি ডিরেক্টরি রয়েছে। cpuidlecpuN
অ্যান্ড্রু ফালঙ্গা


0

@Htaccess এর উত্তরে কিছু তথ্য যুক্ত করতে চাই।

CentOS 6.x এ, dmidecode কোর / থ্রেড গণনা তথ্য আউটপুট দেয় না এবং এটি আসলে 'সিপিইউ' কে 'সিপিইউ' বা 'কোর' হিসাবে চিহ্নিত করে, সকেট নয় not


যদি এটি উত্তর না হয় তবে এটি মন্তব্য হিসাবে যুক্ত করুন।
মংরেল

@ মঙ্গরেল আমি মন্তব্য হিসাবে যুক্ত করতে চেয়েছিলাম তবে মন্তব্য করার জন্য 50 খ্যাতি দরকার
পিকবয়

-2

সিপিইউ পরিবার এখানে অপ্রাসঙ্গিক।

  • সিপিইউ (গুলি) = শারীরিক সকেট
  • প্রতি সকেট কোর (গুলি) - যেমনটি বলা আছে
  • সুতরাং মোট সংখ্যা = সিপিইউ (গুলি) * প্রতি সকেট কোর (গুলি)

আপনার ক্ষেত্রে, আপনার কাছে মোট 4 টি পূর্ণ কোর রয়েছে।

এছাড়াও কী গুরুত্বপূর্ণ হতে পারে তা হ'ল "কোর প্রতি থ্রেড (গুলি)"। তবে আপনার 1 আছে, তাই আপনার ক্ষেত্রে নয়।


1
আপনি আপনার বিবরণে সকেট (গুলি) এর সাথে সিপিইউ গুল্মকে বিভ্রান্ত করছেন।
jlliagre

1
যেমন জেলিগ্রে বলেছেন এটি ভুল is Cores = Cores per socket X Sockets, আমার প্রতিক্রিয়া বর্ণনা দেখুন।
htaccess

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