64개의 코어가 있는 시스템에서 64개의 proc_name* 프로세스가 실행되고 있을때
각각의 프로세스를 하나의 코어에서 각각 실행되도록 제한하는 파워쉘 스크립트입니다.
$res=ps proc_name*;[int]$i=0;[int64]$j=0;[uint64]$k=0;foreach($r in $res){$k=[math]::pow(2,$i);$s=[string]::format("{0:x}",$k);$j=[convert]::toint64($s,16);$r.processoraffinity=$j;write-host $i,$j,$k,$s,$r.id,$r.processoraffinity;$i++}
1 2 2 2 988 2
2 4 4 4 1444 4
3 8 8 8 1468 8
4 16 16 10 1836 16
5 32 32 20 1876 32
6 64 64 40 3156 64
7 128 128 80 3808 128
8 256 256 100 4560 256
9 512 512 200 4604 512
10 1024 1024 400 4928 1024
11 2048 2048 800 6000 2048
12 4096 4096 1000 6040 4096
13 8192 8192 2000 6200 8192
14 16384 16384 4000 6636 16384
15 32768 32768 8000 6776 32768
16 65536 65536 10000 6780 65536
17 131072 131072 20000 6816 131072
18 262144 262144 40000 7016 262144
19 524288 524288 80000 7124 524288
20 1048576 1048576 100000 7556 1048576
21 2097152 2097152 200000 7640 2097152
22 4194304 4194304 400000 7700 4194304
23 8388608 8388608 800000 7908 8388608
24 16777216 16777216 1000000 7984 16777216
25 33554432 33554432 2000000 8040 33554432
26 67108864 67108864 4000000 8428 67108864
27 134217728 134217728 8000000 8476 134217728
28 268435456 268435456 10000000 8488 268435456
29 536870912 536870912 20000000 8492 536870912
30 1073741824 1073741824 40000000 8496 1073741824
31 2147483648 2147483648 80000000 8500 2147483648
32 4294967296 4294967296 100000000 8504 4294967296
33 8589934592 8589934592 200000000 8520 8589934592
34 17179869184 17179869184 400000000 8524 17179869184
35 34359738368 34359738368 800000000 8540 34359738368
36 68719476736 68719476736 1000000000 8556 68719476736
37 137438953472 137438953472 2000000000 8564 137438953472
38 274877906944 274877906944 4000000000 8572 274877906944
39 549755813888 549755813888 8000000000 8580 549755813888
40 1099511627776 1099511627776 10000000000 8584 1099511627776
41 2199023255552 2199023255552 20000000000 8588 2199023255552
42 4398046511104 4398046511104 40000000000 8600 4398046511104
43 8796093022208 8796093022208 80000000000 8628 8796093022208
44 17592186044416 17592186044416 100000000000 8656 17592186044416
45 35184372088832 35184372088832 200000000000 8660 35184372088832
46 70368744177664 70368744177664 400000000000 8668 70368744177664
47 35*4*1*5*8**328 13*5*58*38***28 800000000000 8716 ***451*35**8328
48 281474976710656 281474976710656 1000000000000 8728 281474976710656
49 562949953421312 562949953421312 2000000000000 8736 562949953421312
50 1125899906842624 1125899906842624 4000000000000 8744 1125899906842624
51 2251799813685248 2251799813685248 8000000000000 8752 2251799813685248
52 4503599627370496 4503599627370496 10000000000000 8756 4503599627370496
53 9007199254740992 9007199254740992 20000000000000 8772 9007199254740992
54 18014398509481984 18014398509481984 40000000000000 8780 18014398509481984
55 36028797018963968 36028797018963968 80000000000000 8784 36028797018963968
56 72057594037927936 72057594037927936 100000000000000 8836 72057594037927936
57 144115188075855872 144115188075855872 200000000000000 8848 144115188075855872
58 288230376151711744 288230376151711744 400000000000000 8852 288230376151711744
59 576460752303423488 576460752303423488 800000000000000 8876 576460752303423488
60 1152921504606846976 1152921504606846976 1000000000000000 8880 1152921504606846976
61 2305843009213693952 2305843009213693952 2000000000000000 8920 2305843009213693952
62 4611686018427387904 4611686018427387904 4000000000000000 8932 4611686018427387904
63 -9223372036854775808 9223372036854775808 8000000000000000 8948 -9223372036854775808
스트링으로 변환했다가 정수로 변환한 이유는 int64의 최대값이 2^63-1이기 때문입니다.
pow를 사용해서 2^0~2^63을 만들고 스트링으로 변환했다가 이를 다시 0~2^62,-2^63으로 변환합니다.
따라서 코어가 64개 미만인 경우는 (63개까지) 스트링으로 변환할 필요없이 $r.processoraffinity=$k 하면 됩니다.
pow(,)부분을 수정하면 코어 건너뛰기 같은걸 할 수 있습니다. 예) 1,3,5,...에 지정하기 pow(4,$i)
코어가 64개 이상이면 65번째 코어부터는 에러날 겁니다. (HT를 켰다던가...)