Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีกำหนด CPU Cores ด้วย Taskset ใน Linux

Multi-core processing มีข้อดีและข้อเสีย และบางครั้งต้องกำหนด CPU cores ให้โปรแกรมด้วยตนเอง (เรียกว่า "CPU affinity") เพื่อประสิทธิภาพที่ดีที่สุด ภายใต้ Linux เครื่องมือหลักคือ taskset 聽起來น่ากลัว แต่เราจะแยกเป็นขั้นตอนง่ายๆ

Taskset Basics

การใช้ taskset แยกได้ 2 ส่วน: CPU affinity กับโปรแกรมที่จะเปิด และกับโปรแกรมที่รันอยู่แล้ว เปิดโปรแกรมเป็นส่วนง่ายกว่า เริ่มที่นี่ คำสั่งเปิด長得像這樣:

taskset -c cpu-core-number(s) application

ก่อนใส่หมายเลข CPU core อย่าลืม Unix numbering scheme เริ่มที่ 0 ปกติ core แรกคือ 0, core ที่สองคือ 1, ... ดังนั้น dual-core จะมี core 0 และ 1 quad-core จะมี 0, 1, 2, 3

สมมติอยากรัน Audacity บน dual-core และอยากให้รันบน core ที่สอง คำสั่งคือ:

taskset -c 1 audacity

ใช้หลาย Cores

บนเครื่องของเรา Chrome บางครั้ง drop frames ตอน stream video แต่ปกติเมื่อ assign 2 cores หากอยากลองบน quad-core assign Chrome ให้ core สามและสี่ คำสั่ง:

taskset -c 2,3 google-chrome

ไม่ต้อง assign sequential cores เลือก core ใดก็ได้แบบสุ่ม สมมติมี 6-core อยากใช้ Chrome บน core สองและหก ใส่:

taskset -c 1,5 google-chrome

ใช้ dash กระจายแอปหลาย cores ได้ ตัวอย่าง หลายโปรแกรมเก่าหรือ system functions default บน core แรก ถ้าอยากปล่อย core แรกว่างที่สุด แตกระจายแอปใหญ่ไป core อื่นทั้งหมด?

สมมติมี 8-core อยากรัน Steam จาก core ที่สองถึงแปด คำสั่ง:

taskset -c 1-7 steam

เปลี่ยน Affinity สำหรับโปรแกรมที่เปิดแล้ว

Taskset ไม่จำกัดแค่เปิดแอป คุณเปลี่ยน CPU affinity ของโปรแกรมที่รันอยู่ได้ แต่ก่อนเปลี่ยน affinity ต้องรู้ Process ID (PID) ก่อน

หา PID ของแอป ลองใช้ system monitor ของเดสก์ท็อป แต่เร็วที่สุดคือ top ใช้คำสั่ง:

top

ชื่อคำสั่งที่รันอยู่ขวาหน้าจอ PID ตรงข้างซ้าย

จด PID ไว้ จะใช้ในทีต่อไป ตัวอย่างเราใช้ VLC กำลังเล่น high-def Matroska video บน PC เก่า 6 cores ทดลอง CPU affinities ต่างๆ เพื่อ squeeze ประสิทธิภาพจาก VLC

เปลี่ยน affinity ของ existing process syntax เหมือนนี้:

taskset -cp core-numbers PID

จากภาพ VLC PID คือ 20485 ลองรัน VLC บน core 4, 5, 6 ซึ่งใน Unix numbering คือ 3-5 คำสั่ง:

taskset -cp 3-5 20485

แต่ถ้าอยากเช็ค existing affinity ก่อนเปลี่ยน? ไม่ใส่ core numbers taskset จะบอก affinity กำหนดอยู่ ดังนั้นเปลี่ยนคำสั่งสุดท้ายเป็น:

taskset -cp 20485

จะแสดงว่า VLC กระจายทั่วทุก core

ลองอีกครั้งกับโปรแกรมต่าง สมมติรัน Matroska ใหญ่กับ SMPlayer แทน SMPlayer เปิดแล้ว Top บอก PID 16058

แต่ก่อนอยากรู้ existing affinity ใช้คำสั่งกับ switch -cp แต่ไม่ใส่ core numbers จะเห็น affinity กระจายทุก core

ตอนนี้ลองกระจาย SMPlayer 3 cores เดียวกับ VLC ด้วย:

taskset -cp 3-5 16058

ง่ายใช่ไหม? หากอยาก benchmark PC ดู guide 8 useful tools to stress-test your CPU ของเรา