T tasket là để ràng buộc một quá trình với một hoặc nhiều CPU; về cơ bản chỉ định nơi nó có thể chạy khi thực hiện ban đầu hoặc trong khi nó đang chạy. Nếu sử dụng RHEL / CentOS trên thiết bị máy chủ hiện đại, numactl
nên sử dụng hơn taskset
.
Cpuset / cset dành cho việc che chắn CPU và là một khung xây dựng xung quanh các nhóm Linux. Cset chưa bao giờ phổ biến trên các bản phân phối nhất định (như RHEL) vì có các công cụ khác có sẵn để quản lý quy trình.
Lệnh đầu tiên bên dưới tạo một lá chắn giới hạn các tác vụ của hệ điều hành đối với lõi CPU 0 và 8. Lệnh thứ hai sẽ chuyển phiên vỏ hiện tại của bạn sang lá chắn CPU được chỉ định, dẫn đến cách ly các quy trình của người dùng và hệ thống.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Có những thứ khác có thể kiểm tra và điều chỉnh trước khi bạn đi vào con đường của các quá trình ràng buộc với CPU; ngắt (ngắt irqbalance
một phần), cài đặt tiết kiệm năng lượng, lập lịch hệ thống, thang máy I / O, chính sách thời gian thực ( chrt
).
Xem: Cài đặt TCP có độ trễ thấp trên Ubuntu
Dưới đây là ví dụ (được tích hợp ) của trình bao bọc ứng dụng chọn lõi, dừng mất cân bằng, khởi động và liệt kê danh sách đen lõi đã chọn, sau đó thực thi ./your_program với SCHED_FIFO và ưu tiên 99 trên lõi đã chọn.
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program