Cách gán chương trình cho lõi CPU bằng bộ tác vụ

Khi bộ xử lý đa lõi ngày càng trở nên phổ biến hơn trong máy chủ, máy tính xách tay hoặc máy tính để bàn và thậm chí cả thiết bị di động, ngày càng có nhiều ứng dụng được tối ưu hóa cho loại hệ thống này. Tuy nhiên, đôi khi có thể hữu ích khi liên kết một chương trình hoặc quy trình với một hoặc nhiều hạt nhân cụ thể. Hãy xem làm thế nào để có được nó ...

Cài đặt bộ tác vụ

Công cụ bộ tác vụ là một phần của gói "use-linux". Hầu hết các bản phân phối Linux đều được cài đặt sẵn gói theo mặc định. Trong trường hợp không có bộ tasket, bạn có thể cài đặt nó như sau:

En Debian / Ubuntu và các dẫn xuất:

sudo apt-get install using-linux

En Fedora và các dẫn xuất:

sudo yum cài đặt use-linux

Xem sở thích CPU của một tiến trình đang chạy

Để truy xuất thông tin về sở thích CPU cho một quy trình, hãy sử dụng định dạng sau:

tasket -p PID

Ví dụ: để kiểm tra mối quan hệ của CPU của một quá trình với PID 2915:

tasket -p 2915

Trả về kết quả:

Mặt nạ ái lực hiện tại của pid 2915: ff

tasket trả về mối quan hệ CPU hiện tại ở định dạng mặt nạ bit thập lục phân. Trong ví dụ này, ái lực (được biểu thị trong mặt nạ bit thập lục phân) tương ứng với "11111111" ở định dạng nhị phân, có nghĩa là quá trình có thể chạy trên bất kỳ lõi nào trong số tám lõi CPU khác nhau (0 đến 7).

Bit thấp nhất trong mặt nạ bit thập lục phân tương ứng với ID lõi 0, bit thấp thứ hai từ bên phải đến ID lõi 1, bit thấp thứ ba đến ID lõi 2, v.v. Vì vậy, ví dụ: mối quan hệ CPU "0x11" đại diện cho các ID lõi 0 và 4.

tasket có thể hiển thị mối quan hệ của CPU dưới dạng danh sách các bộ xử lý thay vì bitmask, dễ đọc hơn nhiều. Để sử dụng định dạng này, bạn phải chạy bộ tác vụ với tùy chọn "-c". Ví dụ:

tasket -cp 2915

Trả về kết quả:

danh sách mối quan hệ hiện tại của pid 2915: 0-7

Buộc một quá trình chạy trên một nhân cụ thể

Sử dụng bộ tác vụ, một tiến trình đang chạy có thể được gán cho một lõi CPU cụ thể. Để làm điều này, bạn phải sử dụng định dạng sau:

tasket -p COREMASK PID tasket -cp CORE-LIST PID

Ví dụ: để gán một quy trình cho lõi 0 và 4, bạn sẽ chạy:

tasket -p 0x11 9030

Kết quả trả về là gì:

Mặt nạ ái lực hiện tại của pid 9030: mặt nạ ái lực mới của ff pid 9030: 11

Tương tự, bạn có thể chạy:

tasket -cp 0,4 9030

Với tùy chọn "-c", bạn có thể chỉ định danh sách các ID hạt nhân số, được phân tách bằng dấu phẩy hoặc thậm chí bạn có thể bao gồm các phạm vi (ví dụ: 0,2,5,6-10).

Khởi chạy một chương trình bằng một nhân cụ thể

tasket cũng cho phép khởi chạy một chương trình mới sử dụng một số kernel cụ thể. Để làm điều này, nó phải được sử dụng ở định dạng sau:

Bộ tác vụ COREMASK EXECUTABLE

Ví dụ: để khởi động chương trình VLC trên CPU lõi ID 0, hãy sử dụng lệnh sau:

tasket -c 0 vlc

Chỉ cung cấp hạt nhân cho một chương trình cụ thể

Mặc dù tập tác vụ cho phép gán một chương trình cho một hạt nhân cụ thể, điều đó không có nghĩa là không có chương trình hoặc quy trình nào khác sử dụng nó. Để tránh điều này và dành toàn bộ hạt nhân cho một chương trình cụ thể, bạn phải sử dụng tham số hạt nhân "isolcpus", cho phép bạn dự trữ một hạt nhân trong khi khởi động.

Để làm điều này, bạn phải thêm tham số "isolcpus =" vào dòng nhân trong GRUB. Ví dụ: để đặt trước lõi ID 0 và 1, hãy thêm "isolcpus = 0,1".

Khi điều này được thực hiện, bộ lập lịch Linux sẽ không chỉ định bất kỳ quy trình thông thường nào cho hạt nhân dành riêng, trừ khi được chỉ định cụ thể với tập tác vụ.

Fuente: xmodule & trang người đàn ông tasket.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   peterczech dijo

    Bài viết hay :).

  2.   Luis dijo

    Bài hay nhưng không có ý troll ...

    Công dụng của việc gán một chương trình cho một nhân cụ thể là gì ???

    Ý tôi là; Nếu bạn có một máy tính có 12 lõi, điều hợp lý là một chương trình nhất định sẽ được thực thi bằng cách sử dụng 12 lõi đó và không giới hạn nó vì theo cách đó chúng ta sẽ đạt được hiệu suất cao nhất có thể.

    Những gì tôi thấy hữu ích là tùy chọn cho phép chúng tôi không gán bất kỳ quy trình nào cho một nhân nhất định, để lại quyền sử dụng độc quyền của nó cho một chương trình nhất định.

    1.    jvk85321 dijo

      Những gì bạn đề cập sẽ có ý nghĩa, bằng cách cho phép người lập kế hoạch sử dụng tất cả các lõi, tài nguyên sẽ được cân bằng tốt hơn, nhưng đôi khi cần có lõi chuyên dụng, chẳng hạn như chạy một máy ảo với một tác vụ cụ thể, hiệu suất của máy đó sẽ cải thiện đáng kể khi nhiều tiến trình chạy trong nhân được chỉ định.

      atte
      jvk85321

      1.    hãy sử dụng linux dijo

        Chính xác! Cảm ơn, jvk! 🙂

      2.    lf dijo

        Nhưng khi bạn đang tạo máy ảo, nó yêu cầu bạn chọn số lượng CPU được phân bổ ... việc chọn giá trị này có ích gì nếu cuối cùng hệ điều hành bỏ qua điều này và thực thi nó trên tất cả các CPU ... ví dụ không phải là tốt nhất ...

        Để làm cho Flash hoạt động trên Windows 8.1 x64, AMD và Firefox, chúng tôi khuyên bạn nên chọn Flash chỉ chạy trên CPU, tuy nhiên với tôi thì nó không hoạt động. Nó cũng sẽ thuận tiện nếu bạn thêm nó (nếu nó chưa có) vào các trình quản lý tác vụ của DE khác nhau, hoặc ít nhất là KDE.

      3.    lf dijo

        ah, tôi đã không hiểu phần cuối của bình luận ... Nhưng vì điều đó, tất cả các tiến trình trên CPU chạy máy ảo sẽ phải bị cấm. Hoặc gán chúng cho các CPU khác. Nhận xét thú vị và rất tốt.

    2.    Fernando dijo

      Được sử dụng để tạo ra siêu máy tính thiên tài

  3.   Luis dijo

    Nó được hiểu.

    Cảm ơn bạn đã làm rõ.

  4.   Tếch dijo

    Khi dự trữ một nhân cho một chương trình cụ thể, điều gì sẽ xảy ra với các luồng thực thi? Trong trường hợp bạn thực hiện với một nhân với HT, nó sẽ dự trữ 2 luồng thực thi cho chương trình.

  5.   người chuyển mạch dijo

    Lệnh này có vẻ không hữu ích lắm trên máy tính có nhiều lõi, nhưng đối với những người trong chúng ta có Dual Core thì nó khá thực tế. Ví dụ: tôi có một trò chơi mà khi tôi mở nó sử dụng tất cả các lõi của bộ xử lý và nếu tôi cũng có các chương trình khác cần CPU (như một số tìm kiếm với grep trong các tệp lớn) thì hệ thống sẽ chậm lại. Giải pháp rất đơn giản là giới hạn trò chơi chỉ sử dụng một trong các lõi.
    Tôi cũng đồng ý với lf, họ thực sự nên tích hợp cái này vào các trình quản lý tác vụ (những cái tôi đã thử từ trước đến nay trên Gentoo, tôi nghĩ không có cái nào có nó), đặc biệt khi trên Windows, nó đã tồn tại từ XP (nhấp chuột phải vào process> " Đặt mối quan hệ ... ") nhưng một thời gian trước, tôi đã tìm thấy tập lệnh sau biến tập lệnh thành một thứ gì đó trực quan hơn một chút (được xuất bản ban đầu đây và thậm chí có một số trường hợp cần quản lý việc sử dụng các lõi):
    #!/bin/bash
    read -p 'Ingrese el ID del proceso en cuestión: ' ID
    read -p 'Ingrese la lista de procesadores separados por comas: ' P
    echo 'Su ID es '$ID' y los procesadores son '$P
    sudo taskset -p -c $P $ID
    read -p 'Listo, presione enter para finalizar' P

    Với một số sửa đổi, nó có thể chỉ ra tên của quá trình thay vì PID (hoặc nó chấp nhận cả hai và nó quyết định khi nào tham số đó là một hay khác).

  6.   ngựa vằn dijo

    không có giao diện đồ họa cho bộ tác vụ dành cho người dùng mới sẽ rất tuyệt