(명령줄이 아닌) bash 스크립트에서 명령을 실행하면 성능 측면에서 다른 점이 있나요?

(명령줄이 아닌) bash 스크립트에서 명령을 실행하면 성능 측면에서 다른 점이 있나요?

다음의 차이점(예: 성능 측면)은 무엇입니까?

$ make && cp bin/myexecutable inputfile.txt $workdir && cd $workdir
$ <series of sed commands to modify inputfile.txt>
$ mpirun -n 12 ./myexecutable [args]

스크립트를 통해 이 작업을 수행하는 것과 비교하면 다음과 같습니다.

myscript.sh:

#!/bin/bash
make && cp bin/myexecutable inputfile.txt $workdir && cd $workdir
<series of sed commands to modify inputfile.txt>
mpirun -n 12 ./myexecutable [args]

+

$ ./myscript.sh

질문하는 이유는 워크스테이션에서 여러(10~100개 이상) 시뮬레이션 작업을 실행하는 경우가 많기 때문입니다. 각 작업은 서로 다른 작업 디렉터리에서 실행됩니다(그리고 서로 다른 입력 파일과 서로 다른 매개변수 집합을 가짐). 따라서 실행 스크립트를 작성하면 많은 수의 매개변수에 대해 많은 테스트를 더 쉽게 실행할 수 있습니다. 일부 시뮬레이션 실행은 며칠 동안 지속될 수 있습니다.

성능 차이가 무시할 수 있습니까(예: < 5-10%)? 스크립트(명령줄과 반대)가 다른 환경을 인식하여 결과적으로 문제를 일으키나요?

답변1

mpirun명령줄이나 스크립트에서 실행해도 mpirun명령 성능이 전혀 변경되지 않습니다. 유일한 성능 차이는 시작 시간입니다. 시작 시 스크립트를 실행하는 데 몇 밀리초가 걸리며(셸 실행 파일이 디스크 캐시에 없으면 더 오래 걸립니다) 명령줄에 모든 내용을 입력하는 데 몇 초가 걸립니다.

마지막 명령이 완료될 때까지 기다렸다가 즉시 종료하는 대신, 실행 중이던 마지막 명령으로 교체하도록 셸에 지시하여 소량의 메모리를 절약할 수 있습니다. mpirun …로 교체하세요 exec mpirun ….

Bash 대신 대시를 사용하면 시작 시간을 약간 절약할 수 있습니다. mpirun과 같은 장기 실행 작업의 경우 성능 이점은 Linux 부팅과 같이 다수의 작은 셸 스크립트를 실행하는 작업에서만 볼 수 있습니다.

명령을 스크립트에 넣으면 한 가지 큰 이점이 있습니다. 일련의 명령을 설정할 수 있으며 해당 명령을 일부 조정하려면 파일을 편집하기만 하면 됩니다.

답변2

성능 차이는 미미합니다. 두 경우 모두 코드 자체는 더 느리거나 빠르게 실행되지 않으며 bash 바이너리의 코드가 이미 메모리에 있을 가능성이 높으므로 실행해도 별 차이가 없습니다.

답변3

정말 많은 명령을 수동으로 실행하는 것을 고려하시나요? ——아주 무능한 것 같군요. (어쩌면 귀하의 질문에서 이것을 더 잘 설명하고 싶을 수도 있습니다.)

셸에서 스크립트를 호출하려면 추가 셸 프로세스가 필요합니다. 특히 스크립트에 그렇게 많은 명령이 있는 경우에는 전혀 문제가 되지 않습니다. 그러나 명령을 함께 사용하면 처리 및 확장이 더 쉬워집니다.

가지고 있는 명령과 이를 호출하는 방법에 따라 명령을 개별적으로 호출하는 경우 호출 셸 환경에 영향을 줄 수도 있습니다.구입모든 쉘 스크립트 기반 명령. 모든 명령을 스크립트에 넣으면 변경 사항이 로컬로 유지됩니다.

간단히 말해서, 모든 명령을 스크립트에 넣는 데는 여러 가지 이유가 있습니다.

답변4

다른 사람들이 말했듯이 차이가 있지만 무시할 정도입니다. 확인하는 방법은 다음과 같습니다.

macair:scripts $ time ps
  PID TTY           TIME CMD
  437 ttys000    0:00.01 -bash
  442 ttys001    0:00.43 -bash

real    0m0.009s
user    0m0.002s
sys     0m0.007s

macair:scripts $ time ./ps.sh 
  PID TTY           TIME CMD
  437 ttys000    0:00.01 -bash
  442 ttys001    0:00.44 -bash
32559 ttys001    0:00.00 /bin/bash ./ps.sh

real    0m0.012s
user    0m0.004s
sys     0m0.008s
macair:scripts $ cat ps.sh 
#!/bin/bash

ps
macair:scripts $ echo $SHELL
/bin/bash

그러나 성능은 실제로 명령을 하나씩 입력하는 방식에 따라 자동 및 수동으로 달라집니다.

관련 정보