sự khác biệt giữa tasket và cpuset


8

Tôi đang cố gắng giảm độ trễ của ứng dụng mạng linux của mình. Tôi đã học được rằng có hai công cụ để "liên kết" một chương trình với lõi CPU cụ thể: tasket và cpuset.

  1. Tôi nên chọn cái nào hơn? Họ có tương đương ở cấp độ thấp hơn?
  2. (bố trí) Ứng dụng của tôi có một luồng duy nhất và được cho là xử lý kết nối tcp đơn (không kết nối lại) qua mạng LAN nhanh với độ trễ ít nhất có thể. Tôi đang đi đúng hướng?

Bạn đã đọc trang người đàn ông tương ứng của họ?
Michael Hampton

Bạn đã chạy hồ sơ chi tiết để bạn chắc chắn rằng đó là phần mạng Linux gây ra độ trễ chứ không phải ứng dụng?
Tero Kilkanen

Hệ điều hành / phân phối / phiên bản / kernel nào bạn đang chạy?
ewwhite

Ngoài ra, loại phần cứng có liên quan? Tạo / mô hình máy chủ, thông số kỹ thuật CPU, cơ sở hạ tầng mạng ...
vào

Câu trả lời:


12

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, numactlnê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 irqbalancemộ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

1
Lưu ý, ứng dụng có thể thiết lập lại mối quan hệ của nó khi sử dụng taskset. Nếu bạn sử dụng cpuset thì không thể thay đổi mối quan hệ của bạn với những gì cpuset cấp cho bạn.
Matthew Ife

numactl??
ewwhite

1
Giống nhau, cả hai chương trình gọi cùng một cuộc gọi hệ thống cơ bản sched_setaffinity.
Matthew Ife
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.