작업 세트가 임의 코어에 작업을 할당하도록 하는 가장 좋은 방법은 무엇입니까?

작업 세트가 임의 코어에 작업을 할당하도록 하는 가장 좋은 방법은 무엇입니까?

라이선스가 인스턴스당 4개 코어로 제한되고 16개 코어 상자에서 실행되는 애플리케이션이 있습니다. 이러한 인스턴스 중 일부는 병렬로 실행됩니다.

인스턴스는 하루 종일 계속해서 회전합니다. .bash_profile에서 "START" 변수는 "taskset -c 0-3 rlwarp ..."에 할당되고 다른 스크립트(또는 상자에 있는 사람)는 $START를 사용하여 인스턴스를 시작합니다. 최종 결과는 상자의 부하가 높을 때 4개의 코어가 고정되고 나머지 12개는 유휴 상태로 실행될 수 있다는 것입니다.

문제를 완화하는 데 도움이 되도록 4개의 무작위 코어에 작업 세트를 할당하도록 "START"를 수정하고 싶습니다. 이를 수행하는 가장 좋은 방법에 대한 제안이 있습니까?

답변1

작업 세트가 숫자 목록을 사용할 수 있는 경우 한 가지 접근 방식은 다음과 같이 4개의 난수 목록을 얻는 것입니다.

$ for (( i=1;i<=16;i++ )) do echo $RANDOM $i; done|sort -k1|cut -d" " -f2|head -4
8
2
15
5

또 다른 대략적인 아이디어는 루트 난수를 찾아 다음과 같이 3을 추가하는 것입니다.

$ baseCPU=$(for (( i=1;i<=13;i++ )) do echo $RANDOM $i; done|sort -k1|cut -d" " -f2 | head -1)
$ echo "taskset -c ${baseCPU}-$(expr $baseCPU + 3) rlwarp..."

$ baseCPU=$(for (( i=1;i<=13;i++ )) do echo $RANDOM $i; done|sort -k1|cut -d" " -f2 | head -1)
$ echo "taskset -c ${baseCPU}-$(expr $baseCPU + 3) rlwarp..."
taskset -c 1-4 rlwarp...

$ baseCPU=$(for (( i=1;i<=13;i++ )) do echo $RANDOM $i; done|sort -k1|cut -d" " -f2 | head -1)
$ echo "taskset -c ${baseCPU}-$(expr $baseCPU + 3) rlwarp..."
taskset -c 2-5 rlwarp...

$ baseCPU=$(for (( i=1;i<=13;i++ )) do echo $RANDOM $i; done|sort -k1|cut -d" " -f2 | head -1)
$ echo "taskset -c ${baseCPU}-$(expr $baseCPU + 3) rlwarp..."
taskset -c 12-15 rlwarp...

최고의 솔루션

Chuu의 최종 솔루션(1개짜리):

$ RTEST=$(($RANDOM % 16));\ 
   taskset -c "$((RTEST%16)),$(((RTEST + 1)%16)),$(((RTEST+2)%16)),$(((RTEST+3)%16))" rlwrap ... 

작동 원리

1-16 사이의 임의의 숫자를 얻으십시오:

$ RTEST=$(($RANDOM % 16));
$ echo $RTEST
3

모듈로 나누기를 4번 수행하고 이전에 $RTEST에 1을 추가하면 숫자를 증가시켜 범위를 생성할 수 있습니다.

$ echo $((RTEST%16)),$(((RTEST + 1)%16)),$(((RTEST+2)%16)),$(((RTEST+3)%16))
3,4,5,6

모듈로 나눗셈을 수행하는 것은 특정 범위의 결과를 얻을 수 있도록 숫자를 상자에 넣는 좋은 방법입니다.

$ echo $((RTEST%16))
3

$ echo $(((RTEST + 3)%16))
6

이렇게 하면 항상 1-16 사이의 숫자를 얻게 됩니다. 13보다 큰 임의의 숫자를 얻을 때 랩 어라운드도 처리합니다.

$ echo $(((14 + 3)%16))
1

관련 정보