У меня есть доступ к двум серверам NUMA. Один из них - Dell R720 и имеет следующие процессоры:
$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
24 model name : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
Другой - HPE DL360 Gen8 и имеет следующие процессоры:
$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
24 model name : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
На работе, где у нас много серверов HPE Gen9, я привык к нумерации процессоров (socket0, socket1 , socket0 HyperThreads, socket1 HyperThreads). Похоже, что HPE DL360 Gen8 использует эту нумерацию:
$ cat /proc/cpuinfo |grep physical.id|uniq -c
6 physical id : 0
6 physical id : 1
6 physical id : 0
6 physical id : 1
Но сервер Dell R720 использует другую нумерацию:
$ cat /proc/cpuinfo |grep physical.id|uniq -c
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
1 physical id : 0
1 physical id : 1
Мой вопрос: в чем причина этой разницы? Серверы имеют две немного разные версии ядра:
Dell R720:
$ uname -a
Linux dell 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
HPE DL360 Gen8:
$ uname -a
Linux hpe 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Это вызвано разными версиями ядра? Или разными процессорами? Или на разных материнских платах / BIOS?
Edit: Я обновил ядра на обеих машинах и перезагрузился, так что теперь обе машины используют одну и ту же версию ядра. Тем не менее, разница все же есть.
შეაჩერე grepping და uniq
და გაუშვი lscpu
და lstopo --of png> server.png
და ვიზუალიზირე შედეგები ...
[root@LA_Specialty ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz
Stepping: 4
CPU MHz: 3501.000
BogoMIPS: 7013.88
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-5,12-17
NUMA node1 CPU(s): 6-11,18-23
lscpu
[1] უფრო მოკლედ გამოხატავს თითოეული სისტემის ნუმეტის განლაგებას. lstopo
[2] იძლევა პროცესორის ურთიერთობების იერარქიულ ხედვას.
ჩამოთვლა განისაზღვრება CPU + BIOS + ბირთვით. მაღალ დონეზე, დედაპლატს აქვს 0 და 1 სხვადასხვა ბუდე, ის ყოველთვის იწყებს 0. პროცესორი 0 სოკეტში, შემდეგ იწყებს ბირთვს 0 კონკრეტულ მისამართზე და იწყებს BIOS– ს, რომელიც შემდეგ ჩამოთვლის ლოგიკურ პროცესორებს ამ ჩიპზე და დამატებით პროცესორებზე. (შესაძლოა არა ამ თანმიმდევრობით) [3]. BIOS აღრიცხვის მონაცემებს გადასცემს OS– ს, როგორც საჭიროა, მაგრამ ოპერაციული სისტემა თავისუფალია პროცესორების დანომვრაზე, როგორც სურს (წარმოიდგინეთ, რა ახდენს ცხელი ჩართვის პროცესორები ნუმერაციას).
თუ შეშფოთებული ხართ სიახლოვით და ქეშირება, აპიციდი არის გამოსაყენებელი სასარგებლო რიცხვი. ბიტ ველი უნდა განისაზღვროს ისე, რომ მეხსიერებას / მეხსიერებებს, რომლებიც ყველაზე ახლოს არიან ერთმანეთთან, აქვს აციციდები, რომლებიც რიცხობრივად ახლოს არის ბიტების შეკვეთით Socket | ძირითადი | SMT ამ ველების სიგანე არ არის დაფიქსირებული, ასე რომ თქვენ ვერ ენდობით LSB– ს, რომ ყოველთვის ნიშნავს SMT– ს, მას არ შეიძლება ჰქონდეს SMT და ეს ბიტი წარმოადგენს ძირითადი ID– ს ნაწილს.