vô hiệu hóa lõi cpu trên bộ xử lý lõi tứ trên linux


14

Tôi muốn vô hiệu hóa 3 lõi CPU và chạy bộ xử lý của mình trên một lõi đơn. Tôi đã sử dụng lệnh : maxcpus=1. Nhưng sau này tôi đã thực hiện lệnh này ls /sys/devices/system/cpu. Nó vẫn cho thấy cpu0,cpu1,cpu2,cpu3.

Tôi cũng đã thử: echo 0 > /sys/devices/system/cpu3/onlinenhưng tôi nhận được lỗi sau : no such file or directory.


Không rõ bạn đặt maxcpus=1 commedge ở đâu? Bạn đã đặt chuỗi đó vào grub.cfgnhư một tùy chọn khởi động? (Vui lòng cập nhật câu hỏi của bạn thay vì trả lời trong các bình luận).
Anthon

Tôi đang sử dụng bảng sabreauto tự do IMx6 trên hệ điều hành linux. Tôi đã thực thi lệnh trên trình giả lập thiết bị đầu cuối "gtkterm"
user3818847

Với lệnh này echo 0> / sys / thiết bị / system / cpu3 / online tôi có thể thấy tắt máy cpu3. Bây giờ điều tôi muốn biết là, tôi có nên khởi động lại hệ thống để thay đổi có hiệu lực hay tôi có thể tiếp tục mà không cần khởi động lại
user3818847

AFAIK bạn nên chỉ định maxcpus = 1 làm tham số cho kernel (tức là khi bạn ở trong grub). Chỉnh sửa '/ etc / defaults / grub' để thêm nó vào các tham số kernel, chạy 'update-grub' và khởi động lại. Điều đó sẽ khiến mọi thứ trở nên dai dẳng, tức là chỉ có một CPU khi khởi động Linux.
Anthon

2
@ user3818847 Bạn đang sử dụng bản phân phối nào? Sửa đổi các tham số khởi động (để vượt qua maxcpus=1) thay đổi theo distro. Ngoài ra /syscon đường bạn có chỉ đơn giản là con đường sai, con đường chính xác là /sys/devices/system/cpu/cpu3/online.
Patrick

Câu trả lời:


28

Như Patrick đã chỉ ra trong một bình luận , bạn đã đi /syssai đường .

echo 0 > /sys/devices/system/cpu/cpu3/online

Nếu bạn muốn tắt tất cả các CPU ngoại trừ cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

maxcpus=1tại dấu nhắc shell không có hiệu lực. Chính xác hơn, nó đặt biến maxcpusthành giá trị 1trong shell đó, không có bất kỳ hiệu ứng nào khác. Bạn có thể đặt số lượng CPU khi khởi động bằng cách chuyển maxcpusdưới dạng tham số kernel . Để làm được điều đó, bạn phải thay đổi cấu hình bộ tải khởi động (ví dụ: để thay đổi dòng lệnh kernel trong U-Boot).


Cảm ơn về những đề nghị. Nó hoạt động với lệnh do bạn đề xuất
user3818847 22/07/14

Điều này ít nhất là hơi cụ thể hạt nhân. Tôi đang chạy kernel 3.6.6 và không có tệp nào như vậy; thay vào đó, bạn sử dụng đĩa đơn /sys/devices/system/cpu/online./offlinetệp để kiểm soát tất cả các lõi.
Daniel Griscom

@Gilles - Có cách nào để biết mất bao nhiêu thời gian để bật corevà tắt không?
Chetan Arvind Patil

@ChetanArvindPatil Thời gian đó. Tôi nghĩ rằng thời gian sẽ bị chi phối bởi truy cập RAM nếu mã liên quan chưa có trong bộ đệm L2 và đến lúc tắt lõi, nhưng điều đó phụ thuộc rất nhiều vào CPU và HĐH.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Xofo Khi kernel tắt một lõi, lõi đó đang chạy mã kernel, vì vậy không có luồng nào được lên lịch trên lõi cụ thể đó vào lúc đó. Sau khi tắt lõi, các luồng không còn được lên lịch trên lõi đó. Tôi không biết điều gì xảy ra nếu mối quan hệ của một chủ đề giới hạn nó trong một tập hợp các lõi bị tắt.
Gilles 'SO- ngừng trở nên xấu xa'

1

bạn không nhất thiết phải tắt hoặc vô hiệu hóa lõi.

bạn sẽ sử dụng cpusetstasket

http://man7.org/linux/man-pages/man7/cpuset.7.html

Một cpuset định nghĩa một danh sách các CPU và các nút bộ nhớ ...

Hệ thống tập tin cpuset là một giao diện hệ thống tập tin giả cho cơ chế cpuset kernel, được sử dụng để kiểm soát vị trí bộ xử lý và vị trí bộ nhớ của các quá trình. Nó thường được gắn tại / dev / cpuset.

Trên các hệ thống có nhân được biên dịch với sự hỗ trợ tích hợp cho cpuset, tất cả các quy trình được gắn vào một cpuset và cpuset luôn có mặt. Nếu một hệ thống hỗ trợ cpuset, thì nó sẽ có cpuset đầu vào trong tệp / Proc / filesystems. Bằng cách gắn hệ thống tập tin cpuset (xem phần VÍ DỤ bên dưới), quản trị viên có thể định cấu hình các cpuset trên hệ thống để điều khiển bộ xử lý và vị trí bộ nhớ của các quy trình trên hệ thống đó. Theo mặc định, nếu cấu hình cpuset trên một hệ thống không được sửa đổi hoặc nếu hệ thống tập tin cpuset thậm chí không được gắn kết, thì cơ chế cpuset, mặc dù hiện tại, không có ảnh hưởng đến hành vi của hệ thống.

Các CPU của một hệ thống bao gồm tất cả các đơn vị xử lý logic mà quá trình có thể thực thi, bao gồm, nếu có, nhiều lõi xử lý trong một gói và Siêu chủ đề trong lõi bộ xử lý. Các nút bộ nhớ bao gồm tất cả các ngân hàng riêng biệt của bộ nhớ chính; các hệ thống nhỏ và SMP thường chỉ có một nút bộ nhớ chứa tất cả bộ nhớ chính của hệ thống, trong khi các hệ thống NUMA (truy cập bộ nhớ không đồng nhất) có nhiều nút bộ nhớ.

Nói tóm lại, nếu bạn có 1 cpu có 6 lõi, bạn sẽ cấu hình các cpuset và khởi chạy quy trình của bạn trong một cpuset được cấu hình trên chỉ một lõi, ví dụ như lõi số 3 chẳng hạn. Nếu đó là một quy trình song song thì tất cả sẽ bị giới hạn trong một lõi đó nếu bạn khởi chạy 4 quy trình trong một cpuset nhất định chỉ có một lõi được xác định, thì mỗi quy trình trong 4 quy trình sẽ nhận được mức sử dụng cpu 25% trên lõi số 3.

Dựa vào đó, điều thường xảy ra là một cpuset được cấu hình sao cho

  • trong một hệ thống lõi hơn 200, ví dụ, cpusetA là lõi 0..60 ở bất cứ nơi nào có thể được đặt, cpusetB là lõi 61,70; cpusetC là lõi 71..80; và v.v. tuy nhiên một quản trị viên / kiến ​​trúc sư chọn cấu hình.
  • cpusetA được phân bổ cho một số người dùng nhất định và / hoặc các chương trình phần mềm cụ thể; cpusetB được phân bổ cho người dùng / chương trình khác nhau; và như thế.
  • một người dùng khởi chạy một công việc (quy trình) sẽ yêu cầu N lõi ... trong một cpuset nhất định, và bây giờ nhiều quy trình (song song) đó được giới hạn trong cpuset đã cho đó. Và đối với những N song song bị giới hạn trong một cpuset nhất định, mỗi quá trình đó sẽ / nên sử dụng ái lực của bộ xử lý hoặc ái lực cpu để các tiến trình song song đó không bị xung quanh các lõi khác nhau trong cpuset.

cũng: https://linux.die.net/man/1/t tasket

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.