Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
Bạn đã từng sao chép hoặc di chuyển hàng chục hoặc hàng trăm gigabyte dữ liệu chưa? Nếu đã thực hiện việc này, bạn chắc chắn nhận thấy rằng hệ thống trở nên ít đáp ứng hơn trong thời gian đó. Trên Linux, bạn có thể tránh điều này với sự trợ giúp của lệnh ionice.
I/O là viết tắt của Input/Output (đầu vào/đầu ra). Có nhiều loại thiết bị I/O, nhưng trong trường hợp này, đó là các thiết bị lưu trữ.
Mỗi tiến trình muốn đọc hoặc ghi dữ liệu vào một thiết bị như vậy được chỉ định một scheduling class và số ưu tiên (hay giá trị “nice”). Điều này áp dụng trên Linux đối với các hệ thống file như ext4. Các hệ thống file khác, chẳng hạn như ZFS, có thể thực hiện các phương pháp hơi khác nhau để lên lịch cho các hoạt động đọc/ghi trên ổ đĩa. Ngoài ra, trình lập lịch CFQ nên được kích hoạt để làm việc này. Bạn có thể kiểm tra với:
cat /sys/block/*/queue/scheduler
Một tiến trình với giá trị “nice” cao có mức độ ưu tiên thấp hơn.
Một thiết bị lưu trữ rõ ràng có số lượng hoạt động I/O giới hạn mà nó có thể thực hiện mỗi giây (IOPS). Vì vậy, khi hai tiến trình muốn đọc/ghi cùng một lúc, mỗi tiến trình sẽ nhận được một 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.

Nhưng IOPS có vẻ trừu tượng và phức tạp. Để đơn giản, bạn chỉ cần nghĩ về kết quả cuối cùng: Tốc độ đọc/ghi. Giả sử ổ đĩa có thể ghi với tốc độ tối đa 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 xuất hiện và muốn ghi vào cùng 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 bạn gán cho tiến trình B một giá trị nice I/O cao hơn, nó sẽ 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 hoàn thành, tiến trình B sẽ bắt đầu ghi với tốc độ 100MB/s.
Ví dụ này rất hữu ích để hiểu điều gì đó có thể gây nhầm lẫn cho một số người. Nếu một tiến trình có mức độ ưu tiên rất thấp (giá trị nice cao), thì không có nghĩa là tiến trình đó sẽ ghi chậm mọi lúc. Nếu đó là tiến trình duy nhất sử dụng ổ đĩa, nó sẽ đọc/ghi với tốc độ tối đa. Nhưng khi các tiến trình khác cần ổ đĩa, nó sẽ tạm thời thoát ra và cho phép những tiến trình đó sử dụng nhiều băng thông ổ đĩa hơn. Đối với một hoạt động sao chép/ghi có thể mất hàng giờ để hoàn thành, việc gán cho nó một mức ưu tiên thấp là ý tưởng hay, nếu bạn muốn sử dụng máy tính của mình trong thời gian đó.
Cú pháp chung của lệnh là:
ionice -c scheduling_class -n priority_nice_value command
Idle (class 3): Các tiến trình trong class (lớp) này chỉ đọc/ghi khi không có chương trình nào khác cần truy cập ổ đĩa. Điều này có nghĩa là quá trình đọc/ghi chỉ ở tốc độ tối đa khi nó không bị cạnh tranh. Khi một chương trình khác cần ổ đĩ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ó có thể tạm thời ghi với tốc độ 5MB/s, sau đó quay lại 100MB/s khi chương trình khác hoàn thành việc truy cập vào ổ đĩa. Đây là class hoàn hảo cho các công việc dài hạn mà bạn không muốn làm chậm hệ thống của mình. Không có mức ưu tiên nào cần phải chỉ định 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 khoảng từ 0 đến 7. Hãy nhớ rằng, số thấp hơn có nghĩa là mức độ ưu tiên cao hơn. Hãy sử dụng class này khi bạn muốn tinh chỉnh thời gian truy cập ổ đĩa cho hai hoặc nhiều tiến trình.
Ví dụ, bạn muốn quá trình sao lưu của mình hoàn thành nhanh hơn và gán cho nó giá trị nice là 0. Đồng thời, bạn cũng đang chuyển 6 bộ phim sang ổ đĩa khác nhưng không vội, vậy hãy chỉ định giá trị nice cho tiến trình này là 7.
Lệnh ví dụ:
ionice -c 2 -n 0 backup_command

Realtime (class 1): Chỉ nên sử dụng nếu việc tiến trình nên được ghi càng sớm càng tốt và không bị gián đoạn bởi bất kỳ chương trình nào khác rất quan trọng. Hầu hết người dùng sẽ không bao giờ cần điều này và nên tránh sử dụng, trừ trường hợp đặc biệt. Class này cũng hỗ trợ các giá trị nice trong khoảng từ 0 đến 7. Chỉ root mới có thể sử dụng class này. Điều đó có nghĩa là bạn sẽ phải thêm tiền tố sudo vào lệnh.
Lưu ý rằng một tiến trình trong class Realtime có mức độ ưu tiên 0 có thể ngăn cản các tiến trình tài nguyên khác. Về mặt thực tế, điều đó có nghĩa là chương trình khác có thể phải chờ vài phút hoặc thậm chí hàng giờ để hoàn thành việc ghi/đọc một vài megabyte dữ liệu. Hãy sử dụng class này cẩn thận, chỉ khi bạn chắc chắn mình cần đến nó. Nếu một tiến trình quan trọng trong class 2 hoặc 3 cần truy cập ổ đĩa, hệ thống của bạn có thể đóng băng cho đến khi tiến trình trong class Realtime được ghi xong.
Lệnh ví dụ:
sudo ionice -c 1 -n 7 bash
Trong ví dụ cuối cùng, thay vì chạy lệnh sao chép/di chuyển, shell đã được khởi chạy (Bash). Bây giờ, mỗi lệnh tiếp theo bạn nhập vào shell đó sẽ kế thừa scheduling class I/O và mức độ ưu tiên. Bạn cũng có thể làm điều này trên một giao diện đồ họa.
ionice -c 3 pcmanfm
Lệnh cuối cùng 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 cụ thể của bạn. Bây giờ, tất cả các hoạt động ổ đĩa bắt đầu ở đó sẽ được thực hiện với scheduling class I/O Idle.
Trong các tình huống khác, thao tác sao chép/di chuyển có thể đã hoạt động. Trong trường hợp này, bạn có thể sử dụng ionice theo một cách khác.
ionice -c 3 -p 4910
Điều này thay đổi class ưu tiên của chương trình đang chạy với ID tiến trình 4910. Bạn có thể tìm thấy PID (Process ID - ID tiến trình) với trình quản lý tác vụ của mình hoặc bằng một lệnh chẳng hạn như pgrep.

Lệnh ionice có thể hữu ích trên các desktop mà bạn không muốn bị lag trong khi sao chép/di chuyển các file lớn. Nhưng hãy nhớ rằng ionice cũng có thể hữu ích hơn nữa trên các máy chủ. Bạn chắc chắn không muốn một trang web mà mình host làm khách truy cập gặp phải hiện tượng lag, trong khi thực hiện sao lưu toàn bộ, đúng không?
Chúc bạn thực hiện thành công!
Nguồn tin: Quantrimang.com
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn
Gemini Omni có thể tạo video tốt đến mức nào?
Hướng dẫn sử dụng Copilot trong Excel
Jasper vs ChatGPT: Công cụ AI nào tốt hơn?
Hướng dẫn viết prompt ChatGPT giúp tiết kiệm token, chi phí và nhận được câu trả lời tốt hơn
Cách huấn luyện ChatGPT bằng dữ liệu riêng
Cách dùng Gemini trong Google Forms tạo câu hỏi tự động
Tóm tắt câu phản hồi trong Google Forms bằng Gemini
LLM vs AI Agent: Khác nhau ở đâu, nên dùng khi nào?
Điều phối AI agent là gì?
Cách xóa người trong ảnh trên Canva bằng AI
Thiết kế infographic trên Canva AI từ dữ liệu
10 website chất lượng giúp bạn luôn cập nhật kiến thức mới nhất về AI
5 khóa học AI miễn phí giúp bạn hiểu rõ AI từ con số 0
TOP phần mềm AI hỗ trợ sản xuất âm nhạc tốt nhất
TOP phần mềm AI theo dõi ứng viên tốt nhất cho HR
6 trình tạo logo AI bạn không nên bỏ lỡ
Cách sử dụng Copilot trong Word chi tiết
Cách tổ chức Obsidian vault không sử dụng thư mục
Tính năng trích xuất hình ảnh của Gemini trong Google Photos giúp thư viện ảnh của bạn trở nên hữu ích như thế nào?
Cách sử dụng ChatGPT cho các cuộc họp