단일 코어 시스템에서처럼 프로세스를 실행하여 오류를 찾습니다.

단일 코어 시스템에서처럼 프로세스를 실행하여 오류를 찾습니다.

내 Linux 애플리케이션에는 단일 코어 CPU에서만 재현될 수 있는 버그가 있습니다. 디버깅하려면 명령줄에서 프로세스를 시작하여 다중 프로세서 컴퓨터에서도 CPU 1개로 제한하고 싶습니다.

특정 프로세스에 대해 이를 변경할 수 있습니까? 예를 들어 여러 프로세서에서 여러 스레드를 실행하지 않도록 실행합니까?

답변1

당신은 그것을 사용할 수 있습니다작업 세트에서 util-linux.

마스크는 16진수(앞에 "0x"가 있거나 없음)로 지정되거나 --cpu-list 옵션을 사용하여 CPU 목록으로 지정될 수 있습니다. 예를 들어,

       0x00000001  is processor #0,

       0x00000003  is processors #0 and #1,

       0xFFFFFFFF  is processors #0 through #31,

       32          is processors #1, #4, and #5,

       --cpu-list 0-2,6
                   is processors #0, #1, #2, and #6.

   When  taskset returns, it is guaranteed that the given program has been
   scheduled to a legal CPU.

답변2

@Ipor의 답변에서 언급했듯이 프로그램을 사용할 수 있는 하나의 CPU 하드웨어 코어/스레드로 제한하십시오.taskset 1 prog [args]

또한 프로세스 복제를 명시적으로 비활성화하는 방법이 있습니다(단, 사용된 애플리케이션이 확실하지 않은 경우 시스템 호출을 fork확인하세요 ).clone

프로그램이 가질 수 있는 프로세스(스레드) 수를 제한하는 프로그램은 입니다 prlimit --nproc=1 prog [args]. 그것을 사용해 보았지만 rsync"포크를 사용할 수 없습니다...IPC 오류"가 발생했고 마침내 rsync스레드로 작동하지 않는 것으로 작성되었습니다.

strace prlimit --nproc=1 rsync  

실행 결과 strace아래 SO 링크에 설명된 대로 호출의 반환 값 clone은 다음과 같습니다.-1 EAGAIN (resource temporary unavailable).

다음에서 가져온 PS 광고 소재https://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread.

관련 정보