Cách chỉ định lõi CPU trong Linux với Taskset

Xử lý đa lõi có thể có nhiều ưu điểm và nhược điểm. Đôi khi bạn cần chỉ định thủ công các lõi CPU cho các chương trình để có hiệu suất tốt nhất. Trên Linux, công cụ chính cho mục đích này là bộ tác vụ. Điều này nghe có vẻ đáng sợ, nhưng chúng tôi sẽ chia nó thành các bước để làm cho quá trình dễ dàng hơn.

Kiến thức cơ bản về bộ nhiệm vụ

Việc sử dụng bộ tác vụ có thể được chia thành hai phần: Mối quan hệ của CPU với các chương trình được khởi động và các chương trình đang được thực thi. Khởi động chương trình dễ dàng hơn. Vì vậy, hãy bắt đầu từ đó. Lệnh bắt đầu có dạng như sau:

taskset -c số-lõi-cpu ứng-dụng

Đừng quên rằng lược đồ đánh số Unix thường bắt đầu từ 0 trước khi nhập số lõi CPU bạn muốn chỉ định. Vì vậy, lõi đầu tiên của chúng là 0, lõi thứ hai là 1, v.v. Máy lõi kép có lõi 0 và 1, trong khi máy lõi tứ có lõi 0, 1, 2 và 3.

Ví dụ: giả sử bạn muốn chạy Audacity trên hệ thống lõi kép và bạn muốn nó chạy trên lõi thứ hai. Lệnh sẽ là:

taskset -c 1 audacity

Sử dụng nhiều lõi

Một trong những máy tính thử nghiệm đôi khi thấy khung hình bị giảm trong Chrome khi phát trực tuyến video, nhưng sẽ ổn nếu hai lõi được chỉ định. Nếu bạn đang thử điều tương tự trên hệ thống lõi tứ và muốn gán Chrome cho lõi 3 và 4, lệnh sẽ là:

taskset -c 2,3 google-chrome

Bạn không phải chỉ định từng CPU một, bạn có thể chọn ngẫu nhiên bất kỳ lõi nào. Giả sử bạn có một máy tính lõi 6 và bạn muốn sử dụng Chrome trên lõi 2 và 6. Nhập lệnh sau:

taskset -c 1,5 google-chrome

Bạn cũng có thể sử dụng dấu gạch ngang để chia một ứng dụng thành nhiều lõi. Ví dụ, nhiều chương trình cũ hoặc các chức năng hệ thống được sử dụng theo mặc định trên lõi đầu tiên. Điều gì sẽ xảy ra nếu bạn để lõi đầu tiên trống hết mức có thể và muốn phân phối một ứng dụng lớn cho tất cả các lõi khác cùng một lúc?

Giả sử bạn có hệ thống 8 lõi và bạn muốn chạy Steam từ lõi thứ 2 đến lõi thứ 8. Lệnh là:

taskset -c 1-7 steam

Thay đổi lõi cho một chương trình đã bắt đầu

Nhiệm vụ đặt ra không giới hạn chỉ khởi động ứng dụng. Bạn cũng có thể thay đổi lõi CPU cho một chương trình đang chạy. Tuy nhiên, trước khi bạn có thể thay đổi cốt lõi của một ứng dụng, trước tiên bạn phải biết ID quy trình của ứng dụng (viết tắt là PID).

Để tìm hiểu PID của ứng dụng, bạn có thể thử sử dụng công cụ Giám sát hiệu suất của máy tính để bàn. Tuy nhiên, cách nhanh nhất là sử dụng ở trên.

top

Tên của tất cả các lệnh được thực thi nằm ở phía bên phải của màn hình. Các ID quy trình tương ứng nằm ở bên trái.

Tìm ID tiến trình của ứng dụng
Tìm ID tiến trình của ứng dụng

Ghi lại PID khi bạn sắp sử dụng nó. Trong ví dụ này, chúng tôi đang sử dụng VLC đang phát video Matroska có độ phân giải cao trên PC 6 lõi cũ. Các lõi CPU khác nhau được kiểm tra để có được hiệu suất tốt nhất từ ​​VLC.

Để thay đổi cốt lõi cho một quy trình hiện có, cú pháp có dạng như sau:

taskset -cp core-numbers PID

Như bạn có thể thấy trong ảnh chụp màn hình ở trên, ID tiến trình của VLC là 20485. Ví dụ: chúng tôi sẽ cố gắng chạy VLC trên lõi thứ 4, 5 và 6, dưới đánh số Unix, nó sẽ là 3-5. Vì vậy, lệnh sẽ là:

taskset -cp 3-5 20485

Nhưng nếu bạn muốn kiểm tra lõi hiện tại của mình trước khi thay đổi nó thì sao? Không nhập số lõi. Bộ nhiệm vụ cho biết lõi nào được chỉ định. Lệnh đã được thay đổi thành:

taskset -cp 20485

Nó cho thấy rằng VLC được trải rộng trên tất cả các lõi.

VLC được phân phối trên tất cả các lõi
VLC được phân phối trên tất cả các lõi

Hãy thử lại với một chương trình khác. Giả sử ví dụ chạy một Matroska lớn với SMPlayer để thay thế và SMPlayer đã bắt đầu. Top cho biết PID là 16058.

Top cho biết PID là 16058
Top cho biết PID là 16058

Nhưng trước tiên chúng ta muốn biết cốt lõi hiện có. Sử dụng lệnh với công tắc -cp Tuy nhiên, nếu không có số lõi, bạn có thể thấy rằng chương trình trải rộng trên tất cả các lõi.

Chương trình được phân phối trên tất cả các lõi
Chương trình được phân phối trên tất cả các lõi

Bây giờ bạn có thể thử trải rộng SMPlayer trên 3 lõi giống như bạn kiểm tra VLC bằng lệnh sau:

taskset -cp 3-5 16058

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *