Kích hoạt NUMA cho Intel Core i7


22

Trong nhân Linux, tài liệu cho CONFIG_NUMAbiết:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Tôi có bộ xử lý Intel Core i7, nhưng AFAICT nó chỉ có một nút NUMA:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

Vậy mục đích của việc có là gì CONFIG_NUMA=y, khi i7 chỉ có một nút NUMA?

Câu trả lời:


13

Tôi nghĩ rằng hình ảnh này giải thích đủ:

                  nhập mô tả hình ảnh ở đây

  • nút socket hoặc numa là một tập hợp các lõi có quyền truy cập cục bộ vào bộ nhớ. Mỗi ổ cắm chứa 1 hoặc nhiều lõi. Lưu ý rằng điều này không nhất thiết phải đề cập đến một ổ cắm vật lý, mà là về kiến ​​trúc bộ nhớ của máy, điều này sẽ phụ thuộc vào nhà cung cấp chip của bạn.

  • lõi bộ xử lý ( lõi cpu, bộ xử lý logic) dùng để chỉ một đơn vị xử lý có khả năng thực hiện các tính toán.

Vì vậy, ở trên chỉ ra rằng bạn sẽ cần nhiều bộ xử lý trong máy để tận dụng kiến ​​trúc NUMA.

Bạn có thể đã biên dịch hỗ trợ NUMA trong kernel và chạy nó trên máy xử lý đơn. Nó tương tự như với sự hỗ trợ của SMP. Nó cũng được biên dịch nhưng khi kernel phát hiện ra rằng có một bộ xử lý duy nhất trong hệ thống thì nó sẽ không sử dụng nó (vô hiệu hóa nó). Điều tương tự giữ cho NUMA. Bạn có thể kiểm tra dmesgbộ đệm vòng nhân hoặc /var/log/dmesgtệp cho các tin nhắn liên quan:

NUMA - bộ xử lý đơn (hoặc vô hiệu hóa NUMA) X đa bộ xử lý:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - bộ xử lý đơn X đa bộ xử lý:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

Tài liệu tham khảo


2
@slm - những gì bạn nói có ý nghĩa, nhưng tại sao tài liệu hạt nhân (được trích dẫn trong câu hỏi của tôi) nói rằng tôi nên cho phép CONFIG_NUMAcho core i7?
dùng1968963

1
Vì Haswell, không còn đúng là NUMA không được sử dụng cho máy 'bộ xử lý đơn' (nghĩa là ổ cắm đơn). Một số sản phẩm Haswell có tính năng mà Intel gọi là chế độ 'Cluster on Die'. Bộ xử lý ổ cắm đơn có nhiều bộ điều khiển bộ nhớ được tích hợp và do đó nhiều đường dẫn đến bộ nhớ, với tính năng này có thể được coi là các vùng NUMA riêng biệt, tất cả đều bao gồm một ổ cắm.
Paul Caheny

16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Đầu tiên, lưu ý rằng Intel Core i7 chỉ là một chỉ định tiếp thị và cụm từ Intel Core i7 (hoặc mới hơn) rất mơ hồ. Vậy nó có nghĩa là gì?

Nhân Linux Kconfiggiúp chỉnh sửa văn bản đề cập đến Intel Core 7i , sau đó được sửa thành Intel Core i7 , được thực hiện vào tháng 11 năm 2008. Nhật ký cam kết ghi:

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

Nó chỉ có thể đề cập đến CPU Intel Core i7 được phát hành hoặc công bố cho mỗi thông số vào thời điểm đó. Đó sẽ là bộ xử lý Bloomfield , dựa trên vi kiến ​​trúc Nehalem , đã chuyển bộ điều khiển bộ nhớ từ Northbridge sang CPU (mà AMD đã thực hiện năm 2003 với Opteron / AMD64) và giới thiệu QuickPath Interconnect / QPI (làm mặt dây cho HyperTransport của AMD) cho kết nối CPU / CPU và CPU / IOH (trung tâm IO, ex-Northbridge).

Các CPU Bloomdale i7 là các mục đầu tiên trong sơ đồ đặt tên Core i {3,5,7} mới . Vì vậy, khi văn bản tài liệu Linux được viết, i7 không đề cập cụ thể đến Core i7 trái ngược với i5 (lần đầu tiên vào tháng 09/2009) hoặc i3 (lần đầu tiên vào tháng 01/2010), nhưng rất có thể là vi kiến ​​trúc Nehalem mới với bộ điều khiển bộ nhớ tích hợp và QPI.

Có một thông cáo báo chí của Intel từ tháng 11/2008 trên i7 ( Intel ra mắt Bộ xử lý nhanh nhất trên hành tinh ) nói rằng bộ xử lý Core i7 tăng gấp đôi băng thông bộ nhớ của các nền tảng Intel "Extreme" trước đó , nhưng hoàn toàn không đề cập đến NUMA .

Lý do là, tôi nghĩ rằng, NUMA không quan trọng đối với máy tính để bàn, thậm chí không phải là máy tính "cực đoan".

NUMA quan trọng đối với các máy chủ đắt tiền có nhiều ổ cắm CPU (không chỉ một số lõi trên một ổ cắm) với các làn truy cập bộ nhớ vật lý chuyên dụng (không chỉ một bộ điều khiển bộ nhớ), để mỗi CPU có bộ nhớ cục bộ chuyên dụng, "gần" hơn với nó hơn bộ nhớ của các CPU khác. (Hãy nghĩ 8 ổ cắm, 64 lõi, RAM 256 GB.) NUMA có nghĩa là CPU cũng có thể truy cập bộ nhớ từ xa (bộ nhớ cục bộ của CPU khác) ngoài bộ nhớ cục bộ của mình, mặc dù có chi phí cao hơn. NUMA là tổng hợp của kiến ​​trúc bộ nhớ dùng chung như SMP, trong đó tất cả bộ nhớ đều có sẵn cho tất cả các lõi và kiến ​​trúc bộ nhớ phân tán như MPP (Xử lý song song lớn), cung cấp cho mỗi nút một khối bộ nhớ chuyên dụng. Nó là MPP, nhưng có vẻ như SMP cho ứng dụng.

Bo mạch chủ máy tính để bàn không có ổ cắm kép và CPU máy tính để bàn Intel bao gồm các phiên bản i7 cực đoan thiếu liên kết QPI bổ sung cho cấu hình ổ cắm kép.

Kiểm tra bài viết QPI trên Wikipedia để xem QPI có liên quan như thế nào với NUMA:

Ở dạng đơn giản nhất trên bo mạch chủ bộ xử lý đơn, một QPI duy nhất được sử dụng để kết nối bộ xử lý với IO Hub (ví dụ: để kết nối Intel Core i7 với X58). Trong các trường hợp phức tạp hơn của kiến ​​trúc, các cặp liên kết QPI riêng biệt kết nối một hoặc nhiều bộ xử lý và một hoặc nhiều trung tâm IO hoặc trung tâm định tuyến trong mạng trên bo mạch chủ, cho phép tất cả các thành phần truy cập các thành phần khác qua mạng. Cũng như HyperTransport, QuickPath Architecture giả định rằng các bộ xử lý sẽ có bộ điều khiển bộ nhớ tích hợp và cho phép kiến ​​trúc truy cập bộ nhớ không đồng nhất (NUMA).

[Càng]

Mặc dù một số bộ xử lý Core i7 cao cấp tiếp xúc với QPI, các bộ xử lý di động và máy tính để bàn Nehalem "chính thống" khác dành cho bo mạch đơn (ví dụ: LGA 1156 Core i3, Core i5 và các bộ xử lý Core i7 khác từ Lynnfield / Clarksfield và các gia đình kế nhiệm) không để lộ QPI ra bên ngoài, vì các bộ xử lý này không có ý định tham gia vào các hệ thống đa ổ cắm. Tuy nhiên, QPI được sử dụng nội bộ trên các chip này

Cách CPU Intel Nehalem trên bo mạch máy chủ đa ổ cắm giúp truy cập bộ nhớ không cục bộ là thông qua QPI. Cũng trong bài viết về NUMA :

Intel đã công bố khả năng tương thích NUMA cho các máy chủ x86 và Itanium vào cuối năm 2007 với CPU Nehalem và Tukwila. Cả hai họ CPU đều dùng chung một chipset; kết nối được gọi là Intel Quick Path Interconnect (QPI). AMD đã triển khai NUMA với bộ xử lý Opteron (2003), sử dụng HyperTransport.

Kiểm tra lại báo cáo này từ tháng 11/2008 để thấy rằng Intel đã vô hiệu hóa một trong hai liên kết QPI trên i7, do đó vô hiệu hóa cấu hình ổ cắm kép, trong đó áp dụng NUMA:

Lần đầu tiên, triển khai Nehalem trên máy tính để bàn cao cấp này có tên mã là Bloomfield và về cơ bản nó là cùng một loại silicon nên đi vào các máy chủ hai ổ cắm. Kết quả là, chip Bloomfield đi kèm với hai liên kết QPI trên tàu, như bắn chết ở trên cho thấy. Tuy nhiên, liên kết QPI thứ hai không được sử dụng. Trong các máy chủ 2P dựa trên kiến ​​trúc này, kết nối thứ hai đó sẽ liên kết hai ổ cắm và qua đó, CPU sẽ chia sẻ các thông báo kết hợp bộ đệm (sử dụng giao thức mới) và dữ liệu (vì hệ thống con bộ nhớ sẽ là NUMA), rất giống nhau đến Opteron.

Vì vậy, tôi đã đi lạc khỏi câu hỏi của bạn liên quan đến kết quả nghiên cứu Google của tôi. Bạn đang hỏi tại sao các tài liệu Linux đã bắt đầu khuyên bạn nên bật nó vào cuối năm 2008? Không chắc câu hỏi này có câu trả lời đúng có thể chứng minh được. Chúng tôi sẽ phải hỏi người viết tài liệu. Bật NUMA không mang lại lợi ích cho người dùng CPU máy tính để bàn, nhưng cũng không gây hại đáng kể cho họ, đồng thời giúp người dùng đa ổ cắm, vậy tại sao không? Đây có thể là lý do. Đã tìm thấy phản ánh trong một cuộc thảo luận về việc vô hiệu hóa NUMA trên trình theo dõi Arch Linux ( FS # 31187 - [linux] - vô hiệu hóa NUMA khỏi các tệp cấu hình ).

Tác giả tài liệu cũng có thể đã nghĩ đến tiềm năng NUMA của kiến ​​trúc Nehalem, trong đó, khi tài liệu được viết, bộ xử lý Core i7 11/2008 (920, 940, 965) là đại diện duy nhất; các chip Nehalem đầu tiên mà NUMA sẽ thực sự có ý nghĩa có lẽ là bộ xử lý Xeon Q1 / 2009 với liên kết QPI kép như Xeon E5520 .


2

Tôi nghĩ rằng nếu bạn sử dụng công --showtắc, nó có thể có ý nghĩa hơn:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

Vì vậy, bạn có thể kiểm soát việc sử dụng Physcpubind như thế này:

$ numactl --physcpubind=+0-2 myapp

Điều này sẽ giới hạn ứng dụng myapptrong 2 lõi CPU đầu tiên. Hệ thống của tôi là một i5 với 4 lõi.

Tài liệu tham khảo


2

Tôi đã nghiên cứu điều tương tự cho máy tính để bàn của mình trong khi tự mình xây dựng kernel. Tôi đã quyết định vô hiệu hóa NUMA sau nhiều nghiên cứu. CPU của tôi là Core i7 3820 có 8 bộ xử lý với HT. Trang này đã giúp tôi đi đến quyết định của mình.

vô hiệu hóa NUMA khỏi các tệp cấu hình

Tóm lại, NUMA chỉ đáng giá nếu bạn có nhiều hơn 1 ổ cắm CPU (không phân biệt lõi). Có một tác động rất nhỏ đến khả năng xử lý trên 1 máy CPU CPU thậm chí có nhiều lõi, nhưng hầu như không đáng chú ý vì vậy hầu hết các bản phân phối đều cho phép nó vì nó sẽ mang lại lợi ích rất lớn cho các máy chủ và máy có nhiều hơn 1 ổ cắm.


1

Trong một PC có nhiều nhất một CPU, NUMA hoàn toàn vô dụng. Hãy vô hiệu hóa nó trong kernel của riêng bạn.

Bạn luôn có thể kiểm soát liên kết CPU bằng tasket (1) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.