2011-09-01 27 views
6

Tôi đã dành sáng nay cố gắng tìm hiểu cách xác định id bộ xử lý nào là lõi siêu luồng, nhưng không có may mắn.Linux tìm ra id lõi Hyper-thread

Tôi muốn tìm hiểu thông tin này và sử dụng set_affinity() để liên kết quá trình với chuỗi siêu luồng hoặc chuỗi không phải siêu luồng để lập hồ sơ hiệu suất của nó.

+0

Thông thường, tất cả các lõi đều được tăng cường hoặc không có lõi. Hay tôi sai về giả định này? – knittl

+0

Có, nếu HT được bật, mỗi lõi vật lý sẽ có 2 luồng (1 vật lý + 1 HT). Trong phần mềm, cả hai luồng đều được xử lý giống nhau, nhưng chúng sẽ có id xử lý khác nhau (trong Linux). Tôi muốn tìm ra id thuộc về chủ đề vật lý, và thuộc về chủ đề HT. – Patrick

+0

CPU của bạn là gì? P4 hoặc Core2 hoặc Corei7 hoặc Atom? – osgx

Trả lời

22

Tôi đã phát hiện ra mẹo đơn giản để làm những gì tôi cần.

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 

Nếu số đầu tiên bằng số CPU (0 trong ví dụ này) thì đó là lõi thực, nếu không phải là lõi siêu phân luồng.

Bất dụ lõi:

# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list 
1,13 

nghệ siêu phân luồng lõi dụ

# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list 
1,13 

Kết quả của ví dụ thứ hai là chính xác giống như cái đầu tiên. Tuy nhiên chúng tôi đang kiểm tra cpu13 và số đầu tiên là 1, vì vậy CPU 13 đây là một lõi siêu phân luồng.

+0

Không hoạt động đối với tôi trên Xen hypervisor: ls -l cpu0/topology/ tổng số 0 ----- uname -a: Linux XXXX 2.6.18-128.2.1.4.37.el5xen # 1 SMP Sat Apr 9 05 : 30: 32 EDT 2011 i686 i686 i386 GNU/Linux –

+0

@JoeCasadonte Bạn đã cung cấp bao nhiêu lõi cho khách? – Patrick

+0

Có thể nhận được thứ gì đó có thể có trên cửa sổ? – qub1n

11

HT là đối xứng (về mặt tài nguyên cơ bản, chế độ hệ thống có thể không đối xứng).

Vì vậy, nếu HT được bật, tài nguyên lớn của lõi Vật lý sẽ được chia sẻ giữa hai luồng. Một số phần cứng bổ sung được bật để lưu trạng thái của cả hai luồng. Cả hai luồng đều có quyền truy cập đối xứng vào lõi vật lý.

Có sự khác biệt giữa lõi bị vô hiệu hóa HT và lõi hỗ trợ HT; nhưng không có sự khác biệt giữa nửa đầu của lõi hỗ trợ HT và nửa thứ hai của lõi hỗ trợ HT.

Tại một thời điểm, một luồng HT có thể sử dụng nhiều tài nguyên hơn các nguồn khác, nhưng cân bằng tài nguyên này là động. CPU sẽ cân bằng các chủ đề vì nó có thể và vì nó muốn nếu cả hai luồng đều muốn sử dụng cùng một tài nguyên. Bạn chỉ có thể thực hiện rep nop hoặc pause trong một chuỗi để cho phép CPU cung cấp thêm tài nguyên cho chuỗi khác.

Tôi muốn tìm hiểu thông tin này và sử dụng set_affinity() để liên kết quá trình với chuỗi siêu luồng hoặc chuỗi không phải siêu luồng để lập hồ sơ hiệu suất của nó.

OK, bạn thực sự có thể đo lường hiệu suất mà không biết thực tế. Chỉ cần làm một hồ sơ khi luồng chỉ trong hệ thống được liên kết với CPU0; và lặp lại nó khi nó được liên kết với CPU1. Tôi nghĩ rằng, kết quả sẽ gần như giống nhau (OS có thể tạo ra nhiễu nếu nó liên kết một số ngắt với CPU0; vì vậy hãy thử giảm số lần ngắt khi thực hiện kiểm tra và cố gắng sử dụng CPU2 và CPU3 nếu bạn có).

PS

Agner (ông là Guru trong x86) recommends to use even-numbered cores trong trường hợp khi bạn muốn không sử dụng HT, nhưng nó được kích hoạt trong BIOS:

Nếu hyperthreading được phát hiện sau đó khóa quá trình chỉ sử dụng các bộ xử lý logic được đánh số chẵn. Điều này sẽ làm cho một trong hai chủ đề trong mỗi lõi bộ xử lý nhàn rỗi để không có tranh chấp cho các nguồn lực.

PPS Về New-tái sinh HT (không phải là một P4, nhưng Nehalem và Sandy) - dựa trên nghiên cứu Agner trên vi kiến ​​trúc

Các vướng mắc mới cần được quan tâm trong Sandy Bridge như sau: ... 5. Chia sẻ tài nguyên giữa các chuỗi. Nhiều tài nguyên quan trọng được chia sẻ giữa hai luồng của lõi khi quá trình siêu phân luồng được bật. Có thể là khôn ngoan khi tắt tính năng siêu phân luồng khi nhiều chủ đề phụ thuộc vào cùng một tài nguyên thực thi.

...

Một nửa chặng đường giải pháp đã được giới thiệu trong NetBurst và một lần nữa trong cầu Nehalem và Sandy với cái gọi là công nghệ siêu phân luồng.Bộ xử lý siêu phân luồng có hai bộ vi xử lý hợp lý chia sẻ cùng một lõi thực thi. Ưu điểm của điều này bị hạn chế nếu hai luồng cạnh tranh cho cùng một tài nguyên, nhưng siêu phân luồng có thể khá thuận lợi nếu hiệu suất bị giới hạn bởi một thứ khác, chẳng hạn như truy cập bộ nhớ.

...

Cả Intel và AMD đang làm cho các giải pháp lai, nơi một số hoặc tất cả các đơn vị thực hiện được chia sẻ giữa hai lõi xử lý (hyperthreading trong Intel ngữ).

PPPs: Intel Optimization book lists resource sharing in second-generation HT: (trang 93, danh sách này là dành cho nehalem, nhưng không có sự thay đổi của danh sách này trong phần Sandy)

Deeper đệm và tài nguyên chính sách chia sẻ/phân vùng tăng cường:

  • - Tài nguyên được sao chép cho hoạt động HT: trạng thái đăng ký, đổi tên trả lại ngăn xếp bộ đệm, trang lớn ITLB // nhận xét của tôi: có 2 bộ HW này
  • - Tài nguyên phân vùng cho hoạt động HT: bộ đệm tải, bộ đệm cửa hàng, sắp xếp lại bộ đệm, ITLB nhỏ trang được phân bổ tĩnh giữa hai bộ xử lý hợp lý . // bình luận của tôi: có một bộ HW này; nó được chia tách tĩnh giữa hai lõi HT-virtual trong hai nửa
  • - Tài nguyên được chia sẻ cạnh tranh trong hoạt động HT: trạm đặt trước, cấu trúc bộ nhớ cache, bộ đệm điền, cả DTLB0 và STLB. // comment: Single set, nhưng không chia làm đôi. CPU sẽ tự động thu hồi tài nguyên.
  • - Thay thế trong quá trình vận hành HT: hoạt động đầu cuối thường thay thế giữa hai bộ vi xử lý hợp lý để đảm bảo tính công bằng. // comment: có một Frontend đơn (bộ giải mã lệnh), do đó, các luồng sẽ được giải mã theo thứ tự: 1, 2, 1, 2.
  • - HT không biết tài nguyên: các đơn vị thực thi. // comment: có các thiết bị hw thực tế sẽ thực hiện tính toán, truy cập bộ nhớ. Chỉ có một bộ duy nhất. Nếu một trong các luồng có khả năng sử dụng nhiều đơn vị thực thi và nếu nó có số lượng bộ nhớ chờ thấp, nó sẽ tiêu thụ tất cả các đơn vị exec và hiệu suất luồng thứ hai sẽ thấp (nhưng HT sẽ chuyển đổi đôi khi đến luồng thứ hai. ??). Nếu cả hai luồng không được tối ưu hóa nặng và/hoặc có thời gian chờ bộ nhớ, các đơn vị thực hiện sẽ được tách ra giữa hai luồng.

Ngoài ra còn có hình ảnh ở trang 112 (Hình 2-13), cho thấy cả hai lõi lôgic đều đối xứng.

Tiềm năng hoạt động do công nghệ HT là do:

  • • Thực tế là hệ điều hành và các chương trình sử dụng có thể lên lịch trình hoặc đề để thực hiện đồng thời trên bộ xử lý logic trong mỗi vật lý Bộ vi xử lý
  • • Khả năng sử dụng tài nguyên thực thi trên chip ở cấp cao hơn khi chỉ một sợi đơn là tiêu thụ tài nguyên thực thi ; mức độ cao hơn của việc sử dụng tài nguyên có thể dẫn đến hệ thống cao hơn thông

Mặc dù hướng dẫn có nguồn gốc từ hai chương trình hoặc hai luồng thực thi đồng thời và không nhất thiết phải theo thứ tự chương trình trong việc thực hiện cốt lõi và bộ nhớ hệ thống phân cấp, cuối trước và phần cuối có chứa một số điểm lựa chọn để lựa chọn giữa hướng dẫn từ hai bộ xử lý logic. Tất cả các điểm lựa chọn thay thế giữa hai bộ xử lý logic trừ khi một bộ xử lý logic không thể sử dụng đường ống . Trong trường hợp này, bộ xử lý logic khác có toàn bộ chu kỳ của đường ống . Lý do tại sao một bộ xử lý hợp lý có thể không sử dụng một giai đoạn đường ống bao gồm bộ nhớ cache bị mất, lỗi phụ thuộc chi nhánh và phụ thuộc lệnh.

+0

Bạn đã nói rất nhiều mà không nói gì cả. – suprjami

+0

Tôi đã upvoted câu trả lời đúng. – suprjami

+0

Được đánh dấu là câu trả lời chính xác, cuộn lên và tìm dấu chọn màu xanh lục lớn. – suprjami

0

Tôi đã cố gắng xác minh thông tin bằng cách so sánh nhiệt độ của lõi và tải trên lõi HT.

enter image description here

+2

Phương pháp của bạn là lạ và có thể không hoạt động. Hãy thử hwloc: http://www.open-mpi.org/projects/hwloc/ nó có các biến thể win32 và win64 – osgx

2

Có phổ quát (Linux/Windows) và di động HW dò topo (lõi, HT, cacahes, cầu nam và đĩa/net kết nối địa phương) - hwloc bởi dự án OpenMPI. Bạn có thể sử dụng nó, bởi vì linux có thể sử dụng các quy tắc đánh số lõi HT khác nhau và chúng tôi không thể biết nó sẽ là quy tắc nặc danh/lẻ hay y và y + 8.

Trang chủ của hwloc: http://www.open-mpi.org/projects/hwloc/

Tải page: http://www.open-mpi.org/software/hwloc/v1.10/

Mô tả:

Các Phần cứng di động Địa phương (hwloc) gói phần mềm cung cấp một trừu tượng di động (trên hệ điều hành, phiên bản , kiến ​​trúc, ...) của cấu trúc liên kết phân cấp của kiến ​​trúc hiện đại, bao gồm NUMA nút nhớ, ổ cắm, bộ nhớ cache chia sẻ, lõi và đa luồng đồng thời. Nó cũng tập hợp các thuộc tính hệ thống khác nhau như thông tin bộ nhớ đệm và bộ nhớ cũng như địa phương của các thiết bị I/O như giao diện mạng, InfiniBand HCA hoặc GPU. Nó chủ yếu nhằm mục đích giúp các ứng dụng thu thập thông tin về phần cứng máy tính hiện đại để khai thác nó một cách phù hợp và hiệu quả.

Nó có lstopo lệnh để có được topo hw ở dạng đồ họa như

ubuntu$ sudo apt-get hwloc 
ubuntu$ lstopo 

lstopo from hwloc (OpenMPI) - output example

hoặc dưới hình thức văn bản:

ubuntu$ sudo apt-get hwloc-nox 
ubuntu$ lstopo --of console 

Chúng ta có thể thấy nhân vật lý như Core L#x mỗi có hai lõi logic PU L#yPU L#y+8.

Machine (16GB) 
    Socket L#0 + L3 L#0 (4096KB) 
    L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0 
     PU L#0 (P#0) 
     PU L#1 (P#8) 
    L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1 
     PU L#2 (P#4) 
     PU L#3 (P#12) 
    Socket L#1 + L3 L#1 (4096KB) 
    L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2 
     PU L#4 (P#1) 
     PU L#5 (P#9) 
    L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3 
     PU L#6 (P#5) 
     PU L#7 (P#13) 
    Socket L#2 + L3 L#2 (4096KB) 
    L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4 
     PU L#8 (P#2) 
     PU L#9 (P#10) 
    L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5 
     PU L#10 (P#6) 
     PU L#11 (P#14) 
    Socket L#3 + L3 L#3 (4096KB) 
    L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6 
     PU L#12 (P#3) 
     PU L#13 (P#11) 
    L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7 
     PU L#14 (P#7) 
     PU L#15 (P#15) 
2

Tôi ngạc nhiên chưa ai đề cập đến lscpu. Dưới đây là ví dụ về hệ thống một ổ cắm có bốn lõi vật lý và siêu phân luồng được bật:

$ lscpu -p 
# The following is the parsable format, which can be fed to other 
# programs. Each different item in every column has an unique ID 
# starting from zero. 
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3 
0,0,0,0,,0,0,0,0 
1,1,0,0,,1,1,1,0 
2,2,0,0,,2,2,2,0 
3,3,0,0,,3,3,3,0 
4,0,0,0,,0,0,0,0 
5,1,0,0,,1,1,1,0 
6,2,0,0,,2,2,2,0 
7,3,0,0,,3,3,3,0 

Đầu ra giải thích cách diễn giải bảng ID; ID CPU hợp lý có cùng ID lõi là anh chị em ruột.

+0

Nhưng anh chị em nào là lõi HT? –

+1

Họ là những người ngang hàng, không có lõi chính và lõi thứ hai "siêu phàm". –

Các vấn đề liên quan