Xử lý đa lõi có thể mang lại nhiều lợi ích và cả những hạn chế. Đôi khi bạn cần chỉ định thủ công lõi CPU cho các chương trình để đạt được hiệu suất tốt nhất. Trong Linux, công cụ chính cho mục đích này là taskset. Điều này nghe có vẻ đáng sợ, nhưng bài viết sẽ chia nhỏ thành các bước để đơn giản hóa quy trình.
Kiến thức cơ bản về taskset
Việc sử dụng taskset có thể được chia thành hai phần: Mối quan hệ của CPU với các chương trình sẽ được khởi chạy và với những chương trình đã chạy. Việc khởi chạy chương trình dễ dàng hơn, vì vậy hãy bắt đầu từ đó. Lệnh khởi chạy có dạng như sau:
taskset -c số-lõi-cpu ứng-dụng
Trước khi bạn nhập số lõi CPU muốn chỉ định, đừng quên rằng lược đồ đánh số Unix thường bắt đầu từ 0, vì vậy lõi đầu tiên của bạn sẽ là 0, lõi thứ hai là 1, v.v... Như vậy, máy lõi kép sẽ có lõi 0 và 1, còn máy lõi tứ sẽ có lõi 0, 1, 2 và 3.
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
Trên một trong các máy thử nghiệm, Chrome đôi khi sẽ gặp hiện tượng drop frame khi phát trực tuyến video nhưng sẽ không sao nếu được gán cho 2 lõi. Nếu bạn muốn 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 CPU theo tuần tự mà có thể chọn ngẫu nhiên bất kỳ lõi nào. Giả sử bạn có một máy 6 lõi và muốn sử dụng Chrome trên lõi 2 và 6. Bạn sẽ nhập lệnh:
taskset -c 1,5 google-chrome
Bạn cũng có thể sử dụng dấu gạch ngang để trải rộng một ứng dụng trên một số lõi. Ví dụ, nhiều chương trình cũ hoặc các chức năng hệ thống sẽ mặc định nằm trên lõi đầu tiên. Điều gì sẽ xảy ra nếu bạn muốn để lõi đầu tiên càng trống bao nhiêu càng tốt, trong khi trải rộng một ứng dụng lớn trên tất cả các lõi khác?
Giả sử bạn có một hệ thống 8 lõi và muốn chạy Steam từ lõi thứ 2 đến lõi thứ 8. Lệnh đó sẽ là:
taskset -c 1-7 steam
Thay đổi lõi cho một chương trình đã khởi chạy
Taskset không chỉ giới hạn ở việc khởi chạy ứng dụng. Bạn cũng có thể thay đổi lõi CPU cho một chương trình đã chạy. Tuy nhiên, trước khi có thể thay đổi lõi cho ứng dụng, trước tiên bạn cần biết ID tiến trình của ứng dụng đó (gọi tắt là PID).
Để tìm ra PID của ứng dụng, bạn có thể thử sử dụng công cụ System Monitor của desktop, nhưng cách nhanh nhất là sử dụng top.
top
Tên của tất cả các lệnh đang chạy nằm ở phía bên phải của màn hình. Các ID tiến trình tương ứng nằm ở bên trái.
Ghi lại PID vì bạn sẽ sử dụng nó trong giây lát. Đối với ví dụ này, bài viết sẽ sử dụng VLC, đang phát video Matroska độ nét cao trên PC cũ có 6 lõi. Các lõi CPU khác nhau đang được thử nghiệm để có được hiệu suất tốt nhất từ VLC.
Để thay đổi mối lõi cho một tiến trình hiện có, cú pháp trông giống như sau:
taskset -cp core-numbers PID
Như bạn có thể thấy ảnh chụp màn hình ở trên, thì ID tiến trình của VLC là 20485. Ví dụ sẽ thử chạy VLC trên lõi thứ 4, thứ 5 và thứ 6, theo đánh số Unix 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 có trước khi thay đổi nó thì sao? Để làm điều đó, đừng nhập bất kỳ số lõi nào và taskset sẽ cho bạn biết lõi nào được chỉ định. Lệnh thay đổi thành:
taskset -cp 20485
Nó cho thấy rằng VLC trải rộng trên tất cả các lõi.
Hãy thử lại điều đó 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 đã được khởi chạy. Top cho biết PID là 16058.
Nhưng trước tiên ta muốn biết lõi hiện có của nó. Sử dụng lệnh với switch -cp nhưng không có số lõi, bạn có thể thấy chương trình đang trải rộng 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ư thử nghiệm VLC bằng lệnh:
taskset -cp 3-5 16058