공급업체 애플리케이션에 대기 시간 문제가 발생했습니다. strace -Tttt
프로세스를 실행하여 다음을 얻었습니다.
[...]
1470166748.946144 open("/opt/app/shdbrth/X ", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000016>
1470166800.850979 open("/opt/app/shdbrth/X38347", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 10 <0.000070>
1470166800.851139 fstat(10, {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000006>
[...]
~에 따르면맨페이지, -ttt
각 줄의 접두사는 시스템 호출 시간입니다. 이 옵션은 과 괄호 -T
사이에 통화 처리에 소요된 시간을 추가합니다 . 그러나 위의 예에서는 이것이 사실이 아닌 것 같습니다.<
>
예를 들어 두 번째 행은 1,470,166,800 epoch 초 및 850,979 마이크로초에서 시작됩니다. 첨부된 타이머에 따르면 처리 시간은 70 마이크로초입니다. 그러나 다음 행은 동일한 에포크 초, 851,139마이크로초에서 시작합니다. 이는 90마이크로초의 차이입니다.
오버헤드로 쓰려고 했는데 아마도 더 정확한 설명이 있을 것 같습니다.
답변1
줄 시작 부분의 시간은 커널이 시스템 호출 처리를 시작한 시간입니다. 줄 끝에 있는 기간은 커널이 시스템 호출 처리를 시작한 시간과 커널이 시스템 호출에 응답하는 시간 사이의 간격입니다.
다음 줄이 시작되는 시간은 커널이 다음 시스템 호출 처리를 시작하는 시간입니다. 하나의 시스템 호출에 응답하고 다음 시스템 호출을 입력하는 사이에 두 가지 일이 발생합니다. 프로세스가 사용자 코드를 실행하고 다른 프로세스가 동일한 프로세서에서 예약될 수 있습니다.
귀하의 예에서 첫 번째 open
호출은 16마이크로초가 걸렸고 다음 호출은 약 12초 후에 발행되었습니다. 이 12초 동안 프로세스는 사용자 코드를 실행하고 다른 프로세스를 실행하기 위해 여러 번 선점될 수 있습니다. 두 번째 open
호출과 후속 호출 사이에 약 90μs가 경과했습니다 fstat
. 이 값이 얼마나 작은지를 고려하면 이는 프로세스가 소량의 사용자 코드만 실행 중이었고 선점되지 않았음을 의미합니다.