Cách quản lý mức độ ưu tiên của tiến trình I/O trong Linux


Bạn đã có lần sao lưu hoặc di dời hàng chục hoặc hàng chục gigabyte dữ liệu chưa? Nếu đã thi hành vấn đề này, bạn nhất định bắt gặp rằng hệ thống trở nên ít cũng có thể mãn nguyện hơn trong thời gian đó. Trên Linux, bạn rất cũng có thể tránh điều này với sự trợ giúp của lệnh ionice.

Quản lý mức độ ưu tiên của tiến trình I/O trong Linux với ionice

  • Mức ưu tiên I/O là gì?
  • Mức ưu tiên I/O hoạt động như thế nào?
  • Cách sử dụng lệnh ionice
    • Các scheduling class ionice
    • Những ví dụ ionice có lợi

Mức ưu tiên I/O là gì?

I/O là viết tắt của Input/Output (đầu vào/cổng output). Có nhiều hình thức thiết bị I/O, tuy nhiên trong trường thích hợp này, đó là các thiết bị lưu giữ.

Mỗi tiến trình muốn đọc hoặc ghi dữ liệu vào một thiết bị như thế được y/c một scheduling class và số ưu tiên (hay giá trị “nice”). Điều này áp chế trên Linux đối với những hệ thống file như ext4. Các hệ thống file khác, ví dụ như ZFS, rất cũng có thể thi hành các cách hơi khác nhau bỏ lên trên lịch cho những hoạt động sinh hoạt đọc/ghi trên ổ đĩa. Ngoài ra, trình lập lịch CFQ nên được kích hoạt để tối ưu vấn đề này. Bạn rất cũng có thể xử lý với:

cat /sys/block/*/queue/scheduler

Một tiến trình với mức định giá trị “nice” cao có mức độ ưu tiên thấp hơn.

Mức ưu tiên I/O hoạt động như thế nào?

Một thiết bị lưu giữ đơn cử có con số hoạt động I/O số lượng giới hạn mà nó rất cũng có thể thi hành mỗi giây (IOPS). Vì vậy, khi hai tiến trình muốn đọc/ghi và một lúc, mỗi tiến trình sẽ nhận được 1 đôi phần IOPS. Nếu chúng có cùng mức độ ưu tiên, mỗi tiến trình sẽ nhận được khoảng 50% IOPS.

Mức ưu tiên I/O

Nhưng IOPS dường như trừu tượng và phức tạp. Để thuần tuý, bạn chỉ đề nghị thiết nghĩ về thành tích đến cuối: Tốc độ đọc/ghi. Giả sử ổ đĩa rất cũng có thể ghi với tốc độ nhiều nhất 100MB/s. Tiến trình A bắt đầu một thao tác ghi. Nó ghi vào ổ đĩa với tốc độ 100MB/s. Tiến trình B ra mắt và muốn ghi vào với và một ổ đĩa. Nó sẽ ghi với tốc độ khoảng 50MB/s, đồng thời đưa tốc độ ghi của tiến trình A về cùng giá trị, 50MB/s. Bây giờ, nếu mà khách hàng gán cho tiến trình B một giá trị nice I/O cao hơn nữa, nó sẽ bị ghi với tốc độ 20MB/s và để cho tiến trình A ghi với tốc độ 80MB/s. Khi tiến trình A đến cuối, tiến trình B sẽ bắt đầu ghi với tốc độ 100MB/s.

Ví dụ này rất có lợi để xem thêm điều nào đó rất cũng có thể gây nhầm lẫn cho 1 vài người. Nếu một tiến trình có mức độ ưu tiên quá thấp (giá trị nice cao), thì không còn có nghĩa là tiến trình này sẽ ghi chậm mọi lúc. Nếu đó là tiến trình duy nhất sử dụng ổ đĩa, nó sẽ bị đọc/ghi với tốc độ nhiều nhất. Nhưng lúc các tiến trình khác đề nghị ổ đĩa, nó sẽ bị lâm thời thoát ra và cũng có thể có thể chấp nhận được những tiến trình đó sử dụng nhiều đường truyền ổ đĩa hơn. Đối với và một hoạt động sao lưu/ghi rất cũng có thể mất hàng giờ để đến cuối, việc gán cho nó một mức ưu tiên thấp là ý tưởng hay, nếu mà khách hàng thích sử dụng vi tính của bản thân trong thời gian đó.

Cách sử dụng lệnh ionice

Cú pháp chung của lệnh là:

ionice -c scheduling_class -n priority_nice_value command

Các scheduling class ionice

Idle (class 3): Các tiến trình trong class (lớp) này chỉ đọc/ghi khi không còn công tác làm việc nào khác đề nghị truy nhập ổ đĩa. Điều này có có nghĩa là chu trình đọc/ghi chỉ ở tốc độ nhiều nhất lúc nó khỏi bị cạnh tranh đối đầu. Khi một công tác làm việc khác đề nghị ổ đĩa, tiến trình trong class Idle sẽ chỉ đọc/ghi với bất kỳ tài nguyên nào còn lại. Từ 100MB/s, nó rất cũng có thể lâm thời ghi với tốc độ 5MB/s, kế tiếp quay đi về 100MB/s khi công tác làm việc khác đến cuối việc truy ctràn lên ổ đĩa. Đây là class hoàn hảo nhất cho những công chuyện dài hạn mà bạn không cũng muốn chậm hệ thống của bản thân. Không có mức ưu tiên nào càng phải y/c cho class này.

Lệnh ví dụ:

ionice -c 3 cp /home/user/largefile /Backups

Best-effort (class 2): Có mức ưu tiên/giá trị nice trong thời gian chừng từ 0 đến 7. Hãy hãy nhớ, số thấp hơn có có nghĩa là mức độ ưu tiên cao hơn nữa. Hãy sử dụng class này khi chúng ta thích tinh chỉnh và lãnh đạo thời gian truy nhập ổ đĩa cho hai hoặc nhiều tiến trình.

Ví dụ, bạn thích chu trình sao lưu của bản thân đến cuối 1 cách nhanh nhảu hơn và gán cho nó giá trị nice là 0. Đồng thời, bạn cũng đã và đang chuyển 6 tập phim sang ổ đĩa khác nhưng không vội, vậy hãy y/c giá trị nice cho tiến trình đó là 7.

Lệnh ví dụ:

ionice -c 2 -n 0 backup_command

Best-effort (class 2)

Realtime (class 1): Chỉ nên sử dụng nếu như việc tiến trình nên được ghi càng sớm càng tốt và khỏi bị trì trệ bởi bất kỳ công tác làm việc nào khác rất quan trọng. Hầu hết người dùng sẽ không lúc nào đề nghị điều này và tránh sử dụng, trừ trường thích hợp nổi bật. Class này cũng Tư vấn các giá trị nice trong thời gian chừng từ 0 đến 7. Chỉ root mới rất cũng có thể sử dụng class này. Điều đó có có nghĩa là bạn đề nghị phải thêm tiền tố sudo vào lệnh.

Chú ý rằng một tiến trình trong class Realtime có mức độ ưu tiên 0 rất cũng có thể bờ tường ngăn các tiến trình tài nguyên khác. Về mặt thực ra, điều này có có nghĩa là công tác làm việc khác rất cũng có thể phải chờ vài phút hoặc cho dù hàng giờ để đến cuối việc ghi/đọc một đôi megabyte dữ liệu. Hãy sử dụng class này cẩn trọng, chỉ khi chúng ta nhất định mình đề nghị đến nó. Nếu một tiến trình quan trọng trong class 2 hoặc 3 đề nghị truy nhập ổ đĩa, hệ thống của bạn rất cũng có thể ngừng hoạt động cho tới lúc tiến trình trong class Realtime được ghi xong.

Lệnh ví dụ:

sudo ionice -c 1 -n 7 bash

Những ví dụ ionice có lợi

Trong ví dụ đến cuối, thay vì chạy lệnh sao lưu/di dời, shell đang rất được khởi chạy (Bash). Bây giờ, mỗi lệnh kế tiếp bạn nhtràn lên shell này sẽ kế thừa scheduling class I/O và mức độ ưu tiên. Bạn cũng đều phải nắm giữ thể làm điều này trên một giao diện hình họa.

ionice -c 3 pcmanfm

Lệnh đến cuối sẽ khởi chạy một file explorer trên môi trường desktop LXDE. Thay thế “pcmanfm” bằng tên của file explorer trong desktop đơn cử của bạn. Bây giờ, mọi thứ các hoạt động sinh hoạt ổ đĩa bắt đầu ở này sẽ nhận được thi hành với scheduling class I/O Idle.

Trong các trường hợp khác, thao tác sao lưu/di dời rất cũng có thể đã hoạt động. Trong trường thích hợp này, bạn rất cũng có thể sử dụng ionice theo 1 cách kế tiếp.

ionice -c 3 -p 4910

Điều này đổi thay class ưu tiên của công tác làm việc đang khiến việc với ID tiến trình 4910. Bạn rất cũng có thể tìm thấy PID (Process ID – ID tiến trình) với trình vận hành tác vụ của bản thân hoặc bằng một lệnh ví dụ như pgrep.

Những ví dụ ionice hữu ích

Lệnh ionice rất cũng có thể có lợi trên các desktop mà bạn ko phải muốn bị lag khi đang sao lưu/di dời các file lớn. Nhưng hãy hãy nhớ ionice cũng đều phải nắm giữ thể có lợi không chỉ mất thế trên các máy chủ. Bạn nhất định ko phải muốn một trang web mà mình host làm khách truy nhập mắc phải hiện tượng lag, khi đang thi hành sao lưu mọi thứ, phải không?

Chúc bạn thi hành thành công!

Sưu Tầm: Internet – Kênh Tin: TT39

Bài Viết Liên Quan


Bài Viết Khác