CPU와 IO의 프로세스 우선 순위가 다른 사용 사례?


9

Linux 프로세스는 서로 다른 CPU 및 IO 우선 순위 (nice 및 ionice)를 가질 수 있습니다.

다른 CPU 및 IO 우선 순위가 필요한 이유는 무엇입니까?

그것들을 다르게 만드는 데 실제 사용이 있습니까?

다른 CPU 및 IO 우선 순위가 필요한 실제 사용 사례는 무엇입니까? 일반 CPU 우선 순위보다 높지만 일반 IO 우선 순위보다 낮거나 그 반대입니다.

답변:


6

'nice'의 기본 동작은 niceness가 변경 될 때 응용 프로그램의 'io'우선 순위를 조정하는 것입니다.

물론 모든 작업은 작업 부하에 따라 다르지만 운영 체제의 주요 측면 중 하나는 리소스를 할당하는 방법과 경합 을 처리하는 방법 입니다.

경쟁 프로세스에서 부하가 걸리면 운영 체제의 작동 방식이 나머지 작업 부하에 영향을 줄 수 있기 때문에 실제로 어떤 기능이 좋은지 이해하는 것이 중요합니다.

경합은 서로 다른 응용 프로그램이 CPU와 같은 동일한 리소스에 대해 경쟁하는 방식을 측정 한 것입니다.

취급 하중

완전히 공정한 스케줄러가 도입 된 이후로 nice는 각 프로세스의 'weight'절에 대한 프론트 엔드 일뿐입니다. proc에서 볼 수 있습니다.

$ cat /proc/self/sched
---------------------------------------------------------
...
se.load.weight                     :                 1024
...

좋은 것을 바꾸는 것은 단지 무게를 바꾸는 것입니다 :

$ nice -n 5 cat /proc/self/sched 
---------------------------------------------------------
...
se.load.weight                     :                 335
...

CPU 경합 측정은 완전히 공정한 스케줄링 알고리즘에 의해 수행됩니다. 모든 응용 프로그램에 '가중치'값이 할당되고 CPU 시간이 경합되는 경우 CPU 시간 동안 경합되는 모든 처리를 합산하고 가중치 값을 기준으로 가장 낮은 공통 명칭 CPU 시간을 지정하여 프로세스간에 시간이 분할됩니다.

CPU 시간을 사용하려는 응용 프로그램이 모두 3 개인 경우 기본적으로 1024를 일반 가중치로받습니다. 위와 같이 멋진 +5를 가진 하나의 프로세스가있는 경우, 세 가지 가중치가 모두 2383에 합산되므로 niced 프로세스는 두 번째 프로세스에서 CPU를 요구하는 경우 주어진 두 번째 시간에 CPU 시간의 약 15 %를받습니다. .

다른 CPU 및 IO 우선 순위가 필요한 이유는 무엇입니까?

Niceness는 실제로 시스템이로드 될 때 수행 할 작업, 즉 필요한 요소에 의해 정의 된대로 경쟁 프로세스간에 운영 체제 슬라이스가 시간을 초과하는 방식으로 재생됩니다.

이것이 당신에게 영향을 미치거나 당신과 관련이있는 방법은 서로 다른 응용 프로그램이 서로 다른 전달 우선 순위와 각 응용 프로그램을 전달하는 시간이 무엇인지에 달려 있습니다.

쾌적 정말에만 않는 무언가를 시스템에 부하가 때 (CPU 나 디스크가 처리 할 수있는 것보다 관심을 원하는 더 많은 물건이 있습니다). 이러한 상황에서 커널에게 리소스를 할당하는 방법을 알려줍니다.

그것들을 다르게 만드는 데 실제 사용이 있습니까?

CPU가 수행 할 수있는 것보다 많은 경쟁 프로세스 나 수행 할 작업이있는 경우 niceness는 작업이 먼저 완료되는 것에 대해 비교적 안정적인 보장을 제공합니다. 다른 보고서가 끝나기 전에 전달해야하는 보고서를 작성한다고 말하는 경우에 중요 할 수 있습니다.

데스크탑 시스템에서 niceness는 훨씬 더 중요 할 수 있습니다. 특정 응용 프로그램은 실시간 동작을 가지므로로드 중에 더 자주 깨어 나면 데이터가 오래되지 않습니다. 예를 들어 Pulseaudio는이 범주에 속합니다.

종속 응용 프로그램에 대한 작업을 제거하기 위해 다른 응용 프로그램이 필요할 수 있습니다. 예를 들어 MySQL과 같은 SQL 서버에 대한 많은 아파치 요청은 SQL이 충분히 빨리 제공되지 않기 때문에 장기간 차단 될 수 있습니다. 다른 보고서가 CPU 시간과 경쟁하고 있기 때문입니다. 따라서 SQL이 정지 될뿐만 아니라 Apache도 정지됩니다. 스케줄러가 더 선호하는 그룹으로 경쟁하는 아파치 스레드보다 일반적으로 작업자 스레드가 훨씬 적기 때문에 SQL이 때때로 아플 수 있습니다.

UpdateDB (파일을 색인화하는 프로그램)는 밤 늦게 실행되며 디스크 용량이 매우 큽니다. IO 스케줄링 우선 순위를 낮추면 당시의 다른 애플리케이션이 우선 순위가 중요하지 않은 무언가보다 우선 순위를 갖도록하는 것이 유용 할 수 있습니다.

다른 CPU 및 IO 우선 순위가 필요한 실제 사용 사례는 무엇입니까?

아주 적습니다. 친절은 최선의 노력의 방법입니다. 엄지 손가락의 규칙으로서, 나는 작은 응용 프로그램을 얼마나 잘 수행하는지에 대한 및 관리 그들이 얼마나 심하게에 수행합니다. 처음에는 거꾸로 들릴지 모르지만 나에게 더 중요한 서비스 제공 보장이 있습니다.

나는 "나쁜 날에도 당신의 물건은 X 시간 안에 끝날 것입니다"라고 확신하고 싶습니다. 더 빠르면 보너스입니다.

일반적으로 다음과 같은 합의 된 사양을 생성하여 시작합니다.

  • 모든 웹 애플리케이션은 0.3 초 ​​안에 요청을 완료 할 수 있습니다.
  • 시스템의 모든 SQL 요청은 0.1 초 안에 완료됩니다.
  • 웹 애플리케이션은 최대 50 IOPS를 처리하고 1k 파일을 제공해야합니다.
  • 웹 애플리케이션 메모리 사용량은 총 250Mb를 넘지 않습니다.

다음과 같은 요구 사항을 충족시킵니다.

  • 모든 웹 요청은 0.05 초 안에 완료되어야합니다.
  • 모든 SQL 요청은 0.02 초 안에 완료되어야합니다.
  • 모든 요청을 처리 할 수있는 충분한 메모리가 있어야합니다.
  • IO 요구 사항이 충족되어야합니다.

사양을 제공하면 제어 그룹에 대한보다 효율적인 접근 방식을 사용하여 가상화하지 않고도 이러한 목표를 달성 할 수 있습니다.

컨트롤 그룹을 사용하면 응용 프로그램이 지정된 범위 내에서 동작 할 경우 리소스 할당에 대해 상당히 안정적인 서비스 수준을 보장 할 수 있습니다. 즉,로드중인 시스템에서도 문제의 응용 프로그램에 대한 리소스 가용성을 보장하고 동일한 상자에 다른 응용 프로그램의 공간을 보장 할 수 있습니다!

우리가 당신의 CPU와 IO를 예로 든다면. 해당 요구 사항을 충족하는 제한을 설정했습니다.

# cd /sys/fs/cgroup/blkio/apache
# echo "253:0 100" >blkio.throttle.read_iops_device 
# echo "253:0 50" >blkio.throttle.write_iops_device 
# echo "253:0 102400" >blkio.throttle.read_bps_device

따라서 100k 바이트는 100 iops를 읽습니다.

# cd /sys/fs/cgroup/cpu/apache
# echo 1000000 >cpu.cfs_period_us
# echo 60000 >cpu.cfs_quota_us 

1 초의 시간 동안 0.06 초의 CPU를 제공하십시오.

# cd /sys/fs/cgroup/cpu/sql
# echo 1000000 >cpu.cfs_period_us
# echo 20000 >cpu.cfs_quota_us

1 초의 시간 동안 0.02 초의 CPU를 제공하십시오.

다른 경쟁 cgroup을 제공하는 것은 어리석은 짓을하지 않습니다.로드 당하는 것은 각 응용 프로그램에 대해 CPU가 어떻게 처리되는지 알고 있기 때문에 서비스 제공에 영향을 미치지 않습니다 .

이러한 특성의 통제 그룹은 여전히 최선의 노력이지만, 친절과 이온 성보다는 그 노력에 대한 통제력이 훨씬 뛰어납니다.


다른 CPU 및 IO 우선 순위가 필요한지 묻고있었습니다. 다른 CPU 및 IO 우선 순위를 가져야하는 "아주 적은"사용 사례가 있다고합니다. 당신은 그들을 참조 할 수 있습니까?
Eduardo Eduardo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.