수십 또는 수백 기가바이트의 데이터를 복사하거나 이동한 적이 있습니까? 그렇게했다면 그 시간 동안 시스템이 훨씬 덜 반응한다는 것을 분명히 알았습니다. Linux에서는 ionice
의 도움으로 이것을 피할 수 있습니다. 명령.
I/O 우선순위란 무엇입니까?
I/O는 입력/출력의 줄임말입니다. I/O 장치에는 여러 유형이 있지만 여기서는 저장 장치에 관한 것입니다.
이러한 장치에 데이터를 읽거나 쓰려는 각 프로세스에는 스케줄링 클래스와 우선순위 번호(또는 "좋은" 값)가 할당됩니다. 이것은 Linux에서 ext4와 같은 파일 시스템에 적용됩니다. ZFS와 같은 다른 파일 시스템은 디스크에서 읽기/쓰기 작업을 예약하기 위해 약간 다른 방법을 구현할 수 있습니다. 또한 이 작업을 수행하려면 CFQ 스케줄러가 활성화되어 있어야 합니다.
로 확인할 수 있습니다.cat /sys/block/*/queue/scheduler
"좋은" 값이 높은 프로세스는 우선 순위가 낮습니다. 그 뒤에 있는 논리는 숫자가 높을수록 프로세스가 다른 프로세스에 더 "좋다"는 것입니다.
I/O 우선 순위는 어떻게 작동합니까?
저장 장치는 분명히 초당(IOPS) 수행할 수 있는 제한된 수의 I/O 작업을 가지고 있습니다. 따라서 두 프로세스가 동시에 읽기/쓰기를 원할 때 각각 IOPS를 공유합니다. 우선 순위가 같으면 각각 약 50%의 IOPS를 얻습니다.
그러나 IOPS는 추상적이고 복잡해 보일 수 있습니다. 단순함을 위해 최종 결과인 읽기/쓰기 속도만 생각할 수 있습니다. 디스크가 최대 100MB/s로 쓸 수 있다고 가정합니다. 프로세스 A는 쓰기 작업을 시작합니다. 100MB/s의 속도로 디스크에 씁니다. 프로세스 B가 와서 동일한 디스크에 쓰기를 원합니다. 약 50MB/s로 쓰기 작업을 수행하여 프로세스 A 쓰기 속도를 동일한 값인 50MB/s로 만듭니다. 이제 프로세스 B에 더 높은 I/O nice 값을 할당하면 20MB/s로 쓰고 프로세스 A는 80MB/s로 쓰게 됩니다. 프로세스 A가 완료되면 프로세스 B가 100MB/s로 쓰기 시작합니다.
이 예는 일부 사람들을 혼란스럽게 할 수 있는 것을 이해하는 데 유용합니다. 프로세스의 우선 순위가 매우 낮으면(좋은 값이 높음) 항상 느리게 작성된다는 의미는 아닙니다. 디스크를 사용하는 유일한 프로세스인 경우 최대 속도로 읽기/쓰기를 수행합니다. 그러나 다른 프로세스에 디스크가 필요한 경우 일시적으로 방해가 되어 디스크 대역폭을 더 많이 사용하게 됩니다. 완료하는 데 몇 시간이 걸리는 복사/쓰기 작업의 경우 해당 시간 동안 컴퓨터를 사용하려면 낮은 우선순위를 부여하는 것이 좋습니다.
ionice 명령어 사용법
명령의 일반 구문은 다음과 같습니다.
ionice -c scheduling_class -n priority_nice_value command
ionice 일정 수업
유휴 (클래스 3):이 클래스의 프로세스는 다른 프로그램이 디스크 액세스를 필요로 하지 않을 때만 읽기/쓰기를 수행합니다. 즉, 경쟁이 없을 때 프로세스가 최고 속도로 읽고/씁니다. 다른 프로그램이 디스크 시간을 필요로 할 때 유휴 클래스의 프로세스는 남은 리소스로 읽기/쓰기만 합니다. 100MB/s에서 일시적으로 5MB/s로 쓸 수 있으며 다른 프로그램이 디스크 액세스를 완료하면 100MB/s로 돌아갈 수 있습니다. 이것은 시스템 속도를 늦추고 싶지 않은 장기 실행 작업에 완벽한 클래스입니다. 이 클래스에는 우선 순위를 지정할 필요가 없습니다.
예제 명령:
ionice -c 3 cp /home/user/largefile /Backups
최선의 노력 (클래스 2):0과 7 사이의 우선 순위/좋은 값을 사용합니다. 숫자가 낮을수록 우선 순위가 높다는 것을 기억하십시오. 둘 이상의 프로세스에 대한 디스크 시간을 미세 조정하려면 이 클래스를 사용하십시오.
예를 들어, 백업을 더 빨리 끝내고 좋은 값 0을 할당하려고 합니다. 또한 6개의 영화를 다른 디스크로 옮기고 있지만 서두르지 않으므로 이 값에 좋은 값 7을 할당합니다.
예제 명령:
ionice -c 2 -n 0 backup_command
실시간 (클래스 1):프로세스가 다른 프로그램에 의해 중단되지 않고 가능한 한 빨리 작성해야 하는 것이 중요한 경우에만 사용해야 합니다. 대부분의 사용자는 이것을 필요로 하지 않으며 특별한 경우를 제외하고는 피해야 합니다. 또한 0에서 7 사이의 좋은 값을 지원합니다. 루트만 이 클래스를 사용할 수 있습니다. 즉, 명령에 sudo를 접두어로 붙일 수 있습니다. 우선 순위가 0인 실시간 클래스의 프로세스는 다른 프로세스의 리소스를 고갈시킬 수 있습니다. 실용적인 측면에서, 이는 다른 프로그램이 몇 메가바이트의 데이터 쓰기/읽기를 완료하기 위해 몇 분 또는 몇 시간을 기다려야 할 수 있음을 의미합니다. 이것이 필요하다고 확신하는 경우에만 주의해서 사용하십시오. 클래스 2 또는 3의 중요한 프로세스에 디스크 액세스가 필요한 경우 실시간 프로세스 쓰기가 완료될 때까지 시스템이 정지될 수 있습니다.
예제 명령:
sudo ionice -c 1 -n 7 bash
유용한 이온의 예
마지막 예에서는 복사/이동 명령을 실행하는 대신 셸이 실행되었습니다(Bash). 이제 해당 쉘에 입력하는 모든 후속 명령은 I/O 스케줄링 클래스와 우선순위를 상속합니다. 그래픽 인터페이스에서도 이 작업을 수행할 수 있습니다.
ionice -c 3 pcmanfm
마지막 명령은 LXDE 데스크탑 환경에서 파일 탐색기를 시작합니다. "pcmanfm"을 특정 데스크탑의 파일 탐색기 이름으로 바꾸십시오. 이제 그곳에서 시작하는 모든 디스크 작업은 유휴 I/O 스케줄링 클래스로 수행됩니다.
다른 상황에서는 복사/이동 작업이 이미 활성 상태일 수 있습니다. 이 경우 다른 방법으로 ionice를 사용할 수 있습니다.
ionice -c 3 -p 4910
이것은 프로세스 ID 4910으로 실행되는 프로그램의 우선 순위 클래스를 변경합니다. 작업 관리자 또는 pgrep
와 같은 명령을 사용하여 PID(프로세스 ID)를 찾을 수 있습니다. .
결론
ionice는 대용량 파일을 복사/이동하는 동안 지연되는 것을 원하지 않는 데스크탑에서 유용할 수 있습니다. 그러나 이것은 서버에서도 훨씬 더 유용할 수 있음을 명심하십시오. 당신은 확실히 당신이 전체 백업을 하는 동안 당신의 방문자에게 지연되는 당신이 거기에서 호스팅할 수 있는 웹사이트를 원하지 않을 것입니다.