나는 이것을 가지고있다진주 스크립트그리고 나발견하다이것pv
명령을 실행하고 이를 사용하여 처리량 무작위성과 관련하여 무슨 일이 일어나고 있는지에 대한 피드백을 얻기로 결정했습니다. 여러 테스트1를 거친 후 다음과 같이 명령을 제한하기로 결정했습니다 .
perl_commands < /dev/urandom | pv -L 512k | tr -cd SET
5.5MiB 0:00:11 [ 529kiB/s] [ <=> ]
나는 systemctl suspend
(아치방). 다시 시작하면 명령이 계속 실행되고 대화 상자에 일시 중단 이후 경과 시간이 포함되지만 다음과 같습니다.한계내 설정은 더 이상 강제되지 않으며 처리량은 2-3MiB/s이며 CPU는 더 높습니다. 제한이 없는 것과 같습니다. 잠시 후, 이앉다아직 한도가 유효한 것을 볼 수 있습니다.
예를 들어 단 몇 초 동안 명령을 실행하면 처리량이 설정된 한도로 돌아가는 데 몇 초가 걸립니다. 반면에 815Mb의 데이터는 한 시간에 생성된 다음 30분 동안 일시 중지된 다음 명령이 내가 설정한 제한으로 돌아가는 데 약 5분이 걸립니다. 이 시간 동안 CPU 사용량은 조절이 없는 것과 같습니다.
따라서 제한이 적용되지 않는 것은 아니지만 이 경우 일시 중단에서 메모리로 전환하는 것이 처리량에 영향을 미치는 것으로 보입니다. 왜 이런 행동이 바뀔 수 있나요?
1. 이 명령은 제한되지 않은 경우 하나의 CPU 코어를 사용합니다. 512KiB\s로 제한되면 CPU 사용량은 약 10-15% 이하입니다. 80x40 터미널 창을 채우는 데 약 2GB의 임의성(그리고 약간의 시간)이 필요합니다(SET에 따라 다름).
답변1
pv
시스템 전원 상태를 알 수 없습니다. 그것이 보는 것은 어느 시점에서 시계가 많이 바뀌었다는 것뿐입니다.
내 생각에는 pv
두 클럭 판독 사이의 시간이 갑자기 커지더라도 상관하지 않고 시간 간격을 기준으로 처리량을 계산하는 것뿐입니다. 간격이 크기 때문에 처리량이 낮은 것처럼 보입니다.
처리량 계산은 여러 시계 판독값의 평균입니다(약 5분간 관찰). 고려된 간격에 일시 중지에 소요된 시간이 포함되어 있는 한 계산된 처리량 값은 매우 낮습니다. 간격이 다시 활성화 시간으로만 구성되면 처리량은 예상 수준으로 돌아갑니다.
예를 들어 5분 동안 멈췄다고 가정해 보겠습니다. 그런 다음 복구 후에는 pv
지난 5분 동안 500kB가 전송된 것으로 계산됩니다. 이는 처리량이 약 1.7kB/s에 불과하다는 것을 의미합니다. 이는 500kB 임계값보다 훨씬 낮으므로 pv
보상을 위해 한동안 더 많은 데이터를 전송해야 합니다. 결국 처리량 계산은 다시 안정화될 것입니다.
시스템을 일시중단하는 것은 프로세스를 일시중단하는 것과 다릅니다 pv
. 시스템 일시중단은 프로그램에 투명합니다. 정지된 프로세스가 깨어날 때 SIGCONT 신호가 해당 프로세스로 전송됩니다. pv
정지하는 데 걸리는 시간을 어느 정도 빼게 하는 SIGCONT 신호 처리기가 있습니다. (캐치할 수 없는 SIGSTOP 신호에 정지하는 경우 정확히 무엇을 하는지는 확인하지 않았지만 너무 많은 혼란을 야기해서는 안 됩니다. 시스템 정지와는 다릅니다).
답변2
이 경우 한도 미만을 유지하는 것이 가장 중요한 요소입니다. 다음 대안을 시도해 볼 수 있습니다.스트림 미디어(처리량 요약은 2분마다 여기에 표시됩니다.)
cstream -t -512k -T 120
음수를 허용하는 처리량 옵션은 이러한 상황을 위해 설계된 것 같습니다.
-t num Limit the throughput of the data stream to num bytes/second.
Limiting is done at the input side, you can rely on cstream not
accepting more than this rate. If the number you give is posi-
tive, cstream accumulates errors and tries to keep the overall
rate at the specified value, for the whole session. If you give
a negative number, it is an upper limit for each read/write
system call pair. In other words: the negative number will
never exceed that limit, the positive number will exceed it to
make good for previous underutilization.
프로세스나 시스템을 일시 중지하는 데 사용됩니다.