biện pháp tải cpu với siêu phân luồng trên linux


12

Làm thế nào tôi có thể có được cách sử dụng thực sự của một cpu đa kích hoạt đa lõi?

Ví dụ, hãy xem xét CPU 2 lõi, thể hiện 4 lõi ảo.

Một khối lượng công việc đơn luồng bây giờ sẽ hiển thị 100% top, vì một lõi của các lõi ảo được sử dụng hoàn toàn. CPU và tophoạt động như mong đợi, giống như sẽ có 4 lõi thực.

Tuy nhiên, với hai luồng, mọi thứ trở nên tốt hơn: Nếu tất cả đều hoạt động tốt, chúng được cân bằng với hai lõi thực, vì vậy chúng tôi đã sử dụng 200%: Hai lần 100% và hai lõi ảo nhàn rỗi và đang sử dụng tất cả sức mạnh CPU có sẵn . Có vẻ ổn với tôi.

Tuy nhiên, nếu hai luồng sẽ chạy trên một lõi thực duy nhất, chúng sẽ hiển thị như sử dụng hai lần 100%, điều đó làm cho việc sử dụng lõi ảo 200%. Nhưng về mặt thực tế, đó sẽ là một lõi chia sẻ sức mạnh của nó trên hai luồng, lúc đó chỉ sử dụng một nửa tổng công suất CPU.

Vì vậy, số lượng sử dụng được hiển thị bởi topkhông thể được sử dụng để đo tổng khối lượng công việc của CPU.

Tôi cũng tự hỏi làm thế nào siêu phân luồng cân bằng hai ảo trên một lõi thực. Nếu hai luồng có một số chu kỳ khác nhau, liệu các lõi ảo có 'thích nghi' để cả hai đều hiển thị tải 100% ngay cả khi tải thực khác nhau không?


1
Bạn có hiểu hệ điều hành không nhận thức được sự khác biệt giữa lõi ảo siêu phân luồng và lõi vật lý phải không?
Ramhound

Có vẻ như vậy, nhưng nó không phải? Ánh xạ lõi thực so với ảo là một bản đồ một đến hai đơn giản. Vấn đề là làm thế nào để đo tải trên lõi ảo thực sự thay đổi hiệu suất khả dụng của nó bằng cách lên lịch với một lõi khác trên lõi thực. Nhưng tất cả dữ liệu đều có sẵn, tôi nghĩ, câu hỏi chỉ là các công cụ nhận được kết quả phù hợp từ đâu?
dronus

1
Tôi chỉ muốn có một thước đo tải trong đó 100% có nghĩa là mọi chu kỳ của mọi lõi thực sự đều được sử dụng.
dronus

1
Nói một cách đơn giản: Làm thế nào để nói tại một thời điểm nhất định, nếu CPU của tôi có thể làm việc tiếp theo mà không làm chậm công việc hiện đang diễn ra?
dronus

1
@Ramhound, vậy nếu tôi có bộ xử lý 4 lõi vật lý với 8 lõi logic và trung bình tải của tôi là 4,00, tôi có sử dụng 100% hay 50% không?
Butussy Butkus

Câu trả lời:


5

Martin Tegtmeier tại Oracle đã viết một bài đăng blog thú vị về năm ngoái: https://bloss.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

Câu trả lời ngắn gọn; Siêu phân luồng thực sự gây rối với khả năng hàng đầu để báo cáo tỷ lệ phần trăm sử dụng cpu / cpu-idle tổng thể.

Trong trường hợp xấu nhất, CPU 4 nhân 4 lõi chạy 2 luồng với tốc độ 100% sử dụng cho mỗi lõi, có thể gần như bão hòa cpu. (Tùy thuộc vào việc sử dụng cổng thực thi; chỉ các luồng sử dụng tài nguyên máy tính hoàn toàn khác nhau trên cpu vẫn có thể chạy mà không ảnh hưởng đến hiệu suất trên luồng hiện tại.) Tuy nhiên, trên cùng vẫn sẽ báo cáo 50% không hoạt động trong trường hợp này.


1
Liên kết hiện tại làm việc: blogs.oracle.com/partnertech/...
Ján Lalinský

4

Việc sử dụng cốt lõi rất khác so với tải trên hệ thống. Việc sử dụng lõi chỉ cho thấy mức độ cốt lõi đang tính toán một cái gì đó hoặc chờ hướng dẫn. Nó có thể là 100% tương ứng với bất kỳ thời điểm nào mà CPU đang tính toán.

Nhưng tải là một điều khác biệt, tải thường được đo để xác định xem có quá trình nào phải chờ bất kỳ tài nguyên nào hay không. Nếu các quy trình không chờ đợi bất kỳ tài nguyên nào, bạn sẽ thấy một hệ thống rất hiệu quả. Nhưng đôi khi bạn sẽ thấy các hệ thống chậm nhưng sử dụng CPU thấp. Điều đó thường có nghĩa là một số quy trình đang chờ tài nguyên và không giải phóng CPU. Đối với loại kịch bản này, bạn sẽ không thấy việc sử dụng CPU cao nhưng hệ thống có thể vượt quá khả năng của nó.

Trong hệ thống Linux Tải trung bình là giá trị được tính để đo hiệu năng tổng thể của hệ thống. Giá trị của trung bình tải nên được so sánh với các tài nguyên tính toán song song, các lõi cụ thể. Vì vậy, nếu một hệ thống có 4 lõi vật lý có trung bình tải từ 4 trở lên, chúng ta có thể nói rằng một số quy trình sẽ chờ một tài nguyên một cách an toàn.

Nó không quan trọng nếu việc sử dụng CPU là 100 hoặc 10 phần trăm. Tải trung bình có thể lên tới 200 hoặc 300, trong những trường hợp này, hệ thống sẽ hầu như không đáp ứng.

Trong điều kiện hoạt động bình thường, máy chủ tải trung bình không được vượt quá số lượng lõi trong thời gian dài. Gai ngắn không quan trọng trong quan điểm của tôi. 3 số mà bạn sẽ thấy trong một wđầu ra là tải av. trong 1/5/15 phút.


0

Theo tôi không có câu trả lời nào ở trên là thỏa đáng.

Tôi nghĩ rằng bài viết tôi đang đề cập đến liên kết sau đây được nhắm mục tiêu tốt để trả lời câu hỏi này: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

TRÍCH DẪN:

Ý tưởng đằng sau HT là cho phép một luồng ứng dụng khác chạy khi quầy ứng dụng hiện đang chạy; do hiểu sai chi nhánh, bong bóng trong đường ống, v.v. Để làm được điều đó, phải có một cổng hoặc thanh ghi AS khác. Thanh ghi đó hiển thị với HĐH khi HT được bật. Tuy nhiên, hệ điều hành (và tất cả các chuỗi thực phẩm cho đến bất kỳ công cụ hoàn hảo nào bạn đang sử dụng) hiện đều nghĩ rằng khả năng xử lý gấp đôi khả năng của bộ xử lý, tức là 100% CPU ở mỗi cổng AS.

Nhưng dưới mui xe, vẫn chỉ có một đơn vị thực thi: lõi đơn, vật lý mà bạn đã bắt đầu trước khi HT được bật. Sự khác biệt là nó đang được chia sẻ theo một cách nào đó giữa 2 cổng AS. Làm thế nào lõi đơn được chuyển đổi giữa hai cổng rất phức tạp nhưng dễ hiểu nhất về hàng đợi được thăm dò. Tôi đi vào mức độ chi tiết đó trong các lớp học GCaP của tôi.

Các phép đo kiểm tra trường hợp tốt nhất mà tôi có, chỉ ra rằng mỗi cổng HT không thể trở nên bận rộn hơn 75%, trung bình hoặc 150% tổng công suất dự kiến ​​200% theo HĐH. "Thiếu" 50% công suất, mà tôi đã đề cập trước đó, là một ảo ảnh. Intel đã tuyên bố rằng một cái gì đó trong phạm vi từ 120% đến 130% có thể được mong đợi cho các ứng dụng chung.

Trên thực tế, tôi khá chắc chắn rằng hệ điều hành có thể đạt 100% trên mỗi lõi ảo, không nghi ngờ gì về điều đó. Tôi vừa thực hiện một:

mvn clean install -DskipTests -T 5

Và tôi có thể đảm bảo với bạn 8 lõi ảo của tôi và 4 lõi vật lý đều sử dụng 100% CPU. Và tôi chắc chắn không có 8 nhân trong máy.

Tóm lại, bạn có thể giả sử như sau nếu tổng tải CPU vượt quá 100%, và rất có thể là khá chính xác, sử dụng chính xác 100% lõi vật lý. Đó là, nếu bạn có CORE 1 vật lý được chia thành CPU hệ điều hành 1 và CPU 2. Và trên CPU 1, bạn có tổng mức sử dụng là 50% và trên CPU 2, bạn có tổng mức sử dụng là 50%, rất có thể bạn đang ở ngoài đời thực gây áp lực tổng mức sử dụng 100% cho CPU đó. Bạn đã tối đa hóa nó ra.

Nhưng tất nhiên hệ điều hành trong các công cụ giám sát hệ thống của nó không biết rằng nó đang bán cho bạn một ảo ảnh. Từ quan điểm của hệ điều hành và cách quản lý tài nguyên, nó sẽ tin rằng eeach của hai lõi ảo đó vẫn còn 50%, vì vậy nếu có nhiều nhiệm vụ được đưa vào, nó sẽ cố gắng phân phối chúng đồng đều trên hai lõi đó . Vì vậy, khi bạn sử dụng CPU hơn 100%, trong một khoảng thời gian sử dụng CPU, luôn có công việc được xếp hàng để chạy trong khoảng thời gian đó mà không bao giờ có thay đổi để có được một khoảng thời gian trên CPU. Cuối cùng, nó sẽ nhận được nó, nhưng luôn có một số luồng thực sự thậm chí không chạy mặc dù chúng được lên lịch để chạy.

Cảm ơn

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.