Quá trình 'độc đáo' so với 'ưu tiên'


104

Khi chạy top, tôi có thể thấy đầu ra ví dụ (rút ngắn) này:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Có hai giá trị mà tôi quan tâm: PR(Ưu tiên) và NI(Độ chính xác).

Nếu tôi hiểu chính xác những gì tôi đã tìm ra, cả hai đều xác định thời gian CPU sẽ có bao nhiêu thời gian tương phản với các quy trình khác. Nhưng sự khác biệt giữa các giá trị đó là gì?

Bạn cũng có thể vui lòng mô tả cách thao túng các giá trị của một quá trình và trong trường hợp nào điều này có thể hữu ích?

Câu trả lời:


103

Giá trị tốt là không gian người dùng và PR ưu tiên là mức ưu tiên thực tế của quá trình sử dụng bởi nhân Linux. Trong các ưu tiên của hệ thống linux là 0 đến 139 trong đó 0 đến 99 cho thời gian thực và 100 đến 139 cho người dùng. phạm vi giá trị đẹp là -20 đến +19 trong đó -20 là cao nhất, 0 mặc định và +19 là thấp nhất. mối quan hệ giữa giá trị tốt đẹp và ưu tiên là:

PR = 20 + NI

vì vậy, giá trị từ PR = 20 + (-20 to +19)0 đến 39 mà ánh xạ 100 đến 139.

Theo hướng dẫn hàng đầu:

PR - Ưu tiên Ưu tiên lập lịch của nhiệm vụ. Nếu bạn thấy 'rt' trong trường này, điều đó có nghĩa là tác vụ đang chạy theo ưu tiên lập lịch 'thời gian thực'.

NI là giá trị tốt đẹp của nhiệm vụ.

NI - Nice Value Giá trị tốt đẹp của nhiệm vụ. Giá trị tốt âm có nghĩa là mức ưu tiên cao hơn, trong khi giá trị tốt dương có nghĩa là mức ưu tiên thấp hơn. Zero trong lĩnh vực này đơn giản có nghĩa là mức độ ưu tiên sẽ không được điều chỉnh trong việc xác định khả năng điều phối của một nhiệm vụ

Chỉnh sửa: Theo mặc định khi một chương trình được khởi chạy trong Linux, nó sẽ được khởi chạy với mức độ ưu tiên là '0'. Tuy nhiên, bạn có thể thay đổi mức độ ưu tiên của các chương trình của mình bằng một trong các phương pháp sau.

  1. Bạn có thể khởi chạy một chương trình với mức độ ưu tiên cần thiết bằng cách sử dụng

    nice -n nice_value program_name
    
  2. bạn cũng có thể thay đổi mức độ ưu tiên của quy trình đã chạy bằng cách sử dụng

    renice -n nice_value -p process_id
    

1
Có phải bạn đang nói, chúng gần như giống nhau (ngược lại cả hai đều ưu tiên) NHƯNG nicenesscó thể được sử dụng để ưu tiên tiêu cực để nhiệm vụ nicenessthoát khỏi các nhiệm vụ ưu tiên cao? (tức là nó đang nicevà để cho các tài nguyên truy cập khác? Hay điều này chỉ làm tôi bối rối?
Mark Kirby

1
Một ví dụ về ý tôi muốn nói, hai nhiệm vụ, cả hai đều có pr20, bằng nhau, nhiệm vụ một có ni0 và nhiệm vụ hai có ni20, vì vậy, điều này có nghĩa là nhiệm vụ hai sẽ từ bỏ tài nguyên cho nhiệm vụ một vì nó lànicer
Đánh dấu Kirby

1
Theo tôi biết, mức độ ưu tiên được tính là PR = 20 + NI. vì vậy nhiệm vụ một ưu tiên = 20 +0. giá trị tối đa của ý chí tốt đẹp
+19

3
PR = 20 + Giá trị tối đa NI có thể là 39. Trên thực tế, trong hệ thống linux có 139 mức ưu tiên trong đó 0 đến 99 là mức ưu tiên theo thời gian thực và đối với người dùng có 100 đến 139. vì vậy, giá trị NI -20 đến +19 ánh xạ tới mức ưu tiên 100 đến 139. mà bạn có thể điều chỉnh. nhưng kernel vẫn không chắc nếu bạn thay đổi giá trị NI thì nó sẽ thay đổi mức ưu tiên, giá trị NI chỉ là một gợi ý cho kernel. hạt nhân đôi khi bỏ qua nó
pl_rock

1
Vậy PR và NI có thực sự tương đương nhau không, vì chúng chỉ là một phần bù khác nhau? Tại sao chúng ta có cả hai giá trị sau đó? Và bạn có thể thêm rằng thiết lập tính độc đáo của một quy trình <0 yêu cầu quyền root.
Chỉ huy Byte

26

Ưu tiên là gì và tại sao tôi nên quan tâm?

Khi nói về ưu tiên của quy trình là tất cả về việc quản lý thời gian của bộ xử lý. Bộ xử lý hoặc CPU giống như một con người tung hứng nhiều nhiệm vụ cùng một lúc. Đôi khi chúng ta có thể có đủ chỗ để đảm nhận nhiều dự án. Đôi khi chúng ta chỉ có thể tập trung vào một điều tại một thời điểm. Lần khác, một cái gì đó quan trọng bật lên và chúng tôi muốn dành tất cả năng lượng của mình để giải quyết vấn đề đó trong khi đặt các nhiệm vụ ít quan trọng hơn vào ổ ghi phía sau.

Trong Linux, chúng ta có thể thiết lập các hướng dẫn cho CPU để tuân theo khi nó xem xét tất cả các nhiệm vụ mà nó phải thực hiện. Những hướng dẫn này được gọi là tốt đẹp hoặc giá trị tốt đẹp. Thang đo độ độc đáo của Linux đi từ -20 đến 19. Con số càng thấp thì nhiệm vụ càng được ưu tiên. Nếu giá trị độ đẹp là số cao như 19, tác vụ sẽ được đặt ở mức ưu tiên thấp nhất và CPU sẽ xử lý nó bất cứ khi nào có cơ hội. Giá trị đẹp mặc định là không.

Bằng cách sử dụng thang đo này, chúng tôi có thể phân bổ tài nguyên CPU của mình một cách phù hợp hơn. Các chương trình ưu tiên thấp hơn không quan trọng có thể được đặt thành giá trị cao hơn, trong khi các chương trình ưu tiên cao như trình nền và dịch vụ có thể được đặt để nhận thêm trọng tâm của CPU. Bạn thậm chí có thể cung cấp cho một người dùng cụ thể một giá trị tốt đẹp thấp hơn cho tất cả các quy trình của anh ấy / cô ấy để bạn có thể hạn chế khả năng làm chậm các dịch vụ cốt lõi của máy tính.

Nguồn

Đặt mức độ ưu tiên cho các quy trình mới với nice, vd

nice -n 10 firefox

cho các quy trình hiện có

renice 10 -p $(pgrep firefox)

Để đặt mức độ ưu tiên <0bạn cần sudo, ví dụ:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

nhưng không ưu tiên >=0


Thí dụ

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Ví dụ khác

Để đổi mới tất cả các quy trình đang chạy cho một người dùng cụ thể

renice 20 -u user_name

Trong ví dụ của bạn, renice 10cũng sẽ làm việc mà không có sudo, phải không? Và bạn có thể vui lòng thêm một ví dụ để làm cho tất cả các quy trình của một người dùng cụ thể trở nên tốt đẹp hơn không? Điều đó sẽ thực sự hữu ích nếu ai đó đăng nhập cùng lúc và có một số quy trình ăn tài nguyên không cần thiết nhưng đang chạy (như trò chơi flash bị tạm dừng trong Firefox, anh em nhỏ làm những việc như vậy ...: - /)
Byte Chỉ huy

@ByteCommander đã hoàn thành =)
AB

Làm thế nào để tôi khôi phục các giá trị cũ của người dùng đó sau một thời gian? Đặt nó trở về 0? Điều đó sẽ không tính đến việc một số quy trình có thể có giá trị độc đáo khác nhau trước đây. Có bất kỳ khả năng đơn giản để làm điều này?
Chỉ huy Byte

@ByteCommander Không, nó không đơn giản. Hoặc bạn sử dụng 0hoặc có vấn đề;)
AB

2
Sau renice -19, kết quả với pslà: PRI: 38, NI: -19tuy nhiên, với topnó là PR:1, NI -19tại sao vậy?
dậy

14

Câu trả lời ngắn

PR là mức độ ưu tiên. PR càng thấp, mức độ ưu tiên của quy trình sẽ càng cao.

PR được tính như sau:

  • đối với các quy trình thông thường: PR = 20 + NI (NI là tốt và nằm trong khoảng từ -20 đến 19)
  • đối với các quy trình thời gian thực: PR = - 1 - real_time_p Warriority (real_time_p Warriority nằm trong khoảng từ 1 đến 99)

Câu trả lời dài

Có 2 loại quy trình, loại bình thườngthời gian thực Đối với loại bình thường (và chỉ dành cho loại), đẹp được áp dụng như sau:

Đẹp

Thang đo "độ đẹp" đi từ -20 đến 19, trong khi -20 là mức ưu tiên cao nhất và 19 mức ưu tiên thấp nhất. Mức độ ưu tiên được tính như sau:

PR = 20 + NI

Trong đó NI là mức độ tốt đẹp và PR là mức độ ưu tiên. Như chúng ta có thể thấy, -20 thực sự ánh xạ thành 0, trong khi 19 ánh xạ thành 39.

Theo mặc định, giá trị đẹp của chương trình là 0, nhưng người dùng root có thể khởi chạy chương trình với giá trị đẹp được chỉ định bằng cách sử dụng lệnh sau:

nice -n <nice_value> ./myProgram 

Thời gian thực

Chúng ta có thể đi xa hơn nữa. Ưu tiên tốt đẹp thực sự được sử dụng cho các chương trình người dùng. Trong khi mức ưu tiên chung của UNIX / LINUX có phạm vi 140 giá trị, giá trị đẹp cho phép quá trình ánh xạ tới phần cuối của phạm vi (từ 100 đến 139). Phương trình này khiến các giá trị từ 0 đến 99 không thể truy cập được, sẽ tương ứng với mức PR âm (từ -100 đến -1). Để có thể truy cập vào các giá trị đó, quy trình phải được nêu là "thời gian thực".

Có 5 chính sách lập lịch trong môi trường LINUX có thể được hiển thị bằng lệnh sau:

chrt -m 

Mà sẽ hiển thị danh sách sau đây:

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

Các quy trình lập lịch có thể được chia thành 2 nhóm, chính sách lập lịch thông thường (1 đến 3) và chính sách lập lịch thời gian thực (4 và 5). Các quy trình thời gian thực sẽ luôn được ưu tiên hơn các quy trình thông thường. Một quy trình thời gian thực có thể được gọi bằng cách sử dụng lệnh sau (Ví dụ là cách khai báo chính sách SCHED_RR):

chrt --rr <priority between 1-99> ./myProgram

Để có được giá trị PR cho quy trình thời gian thực, phương trình sau được áp dụng:

PR = -1 - rt_p Warrior

Trong đó rt_p Warrior tương ứng với mức ưu tiên trong khoảng từ 1 đến 99. Vì lý do đó, quy trình có mức ưu tiên cao hơn các quy trình khác sẽ là quy trình được gọi với số 99.

Điều quan trọng cần lưu ý là đối với các quy trình thời gian thực, giá trị đẹp không được sử dụng.

Để xem "giá trị" hiện tại và giá trị PR của một quy trình, lệnh sau có thể được thực thi:

top

Hiển thị đầu ra sau:

nhập mô tả hình ảnh ở đây

Trong hình, các giá trị PR và NI được hiển thị. Thật tốt khi lưu ý quá trình với giá trị PR -51 tương ứng với giá trị thời gian thực. Ngoài ra còn có một số quy trình có giá trị PR được nêu là "rt". Giá trị này thực sự tương ứng với giá trị PR là -100.

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.