프로세스 생성 시간, 쉘 스크립트 및 시스템 호출 오버헤드

프로세스 생성 시간, 쉘 스크립트 및 시스템 호출 오버헤드

Arch Linux 및 Ubuntu(16.04)로 이중 부팅된 머신이 있습니다.

최근에 사용하기 시작했어요카쿤 텍스트 편집기, 그리고 내가 사용하고 있는 OS에 따라 부팅 시간이 크게 다르다는 것을 알았습니다. 하지만 제가 생각하는 근본적인 문제는아니요Kakoune에 직접 귀속됩니다.

시작 시 kakoune은 여러 셸 스크립트를 실행하여 x11 및 tmux, git, 구문 강조/색 구성표 등과의 통합을 활성화합니다. 이 기능은 플래그를 사용하여 "바닐라" 편집기만 로드되도록 비활성화할 수 있습니다 -n.

명령: kak -e qkakoune을 시작하고 모든 시작 스크립트를 실행한 후 즉시 종료합니다.

아치 위:
time kak -e q필수1 초
time kak -n -e q(쉘 스크립트 없음) 아래 완료20밀리미터.

우분투:
time kak -e q약 소요됩니다.450밀리미터
time kak -n -e q다시20밀리미터

지방을 다듬고 일부 시작 스크립트를 제거한 후 제거된 양에 비례하여 두 운영 체제 모두에서 개선이 나타났습니다.

몇 가지 벤치마크를 실행해 보았습니다.유닉스벤치두 시스템 간의 주요 차이점은 "프로세스 생성" 및 "셸 스크립트" 테스트에서 발견되었습니다.

셸 스크립트 테스트는 프로세스가 데이터 파일에 일련의 변환을 적용하는 셸 스크립트 세트(1개, 2개, 4개, 8개의 동시 복사본)를 시작하고 얻을 수 있는 분당 횟수를 측정합니다.

관련 출력은 다음과 같습니다. "초당 주기" 단위가 많을수록 좋습니다.

Process creation (1 parallel copy of tests)
Arch:    3,822
Ubuntu:  5,297
Process creation (4 parallel copies of tests)
Arch:   18,935
Ubuntu: 30,341

Shell Scripts (1 concurrent) (1 parallel copy of tests)
Arch:      972
Ubuntu:  5,141
Shell Scripts (1 concurrent) (4 parallel copies of tests)
Arch:    7,697
Ubuntu: 24,942

Shell Scripts (8 concurrent) (1 parallel copy of tests)
Arch:      807
Ubuntu:  2,257
Shell Scripts (8 concurrent) (4 parallel copies of tests)
Arch:    1,289
Ubuntu:  3,001

우분투 시스템의 성능이 훨씬 좋아진 것을 볼 수 있습니다.

다양한 로그인 셸, 터미널 에뮬레이터, kakoune 재컴파일, 디스크 정리를 위한 불필요한 소프트웨어 제거 등을 사용하여 테스트했습니다. 나는 이것이 병목 현상이라고 확신합니다.

내 질문은 다음과 같습니다이 문제를 더 자세히 조사하고 Ubuntu와 일치하도록 Arch Linux 시스템의 성능을 향상하려면 어떻게 해야 합니까? 커널 튜닝을 고려해야 합니까?

추가 참고 사항:

  • 두 시스템 모두 동일한 유형의 파일 시스템(ext4)을 사용합니다.
  • 나는 Archlinux 시스템을 사용하는 것을 선호하며 시간이 지남에 따라 성능 저하를 발견했습니다.
  • Arch는 /dev/sda1에 위치하며 크기는 약 200GB입니다. 우분투는 /dev/sda2, ~500GB에 있습니다. 1TB 하드 드라이브.
  • 아치 uname -a:Linux ark 4.14.13-1-ARCH #1 SMP PREEMPT Wed Jan 10 11:14:50 UTC 2018 x86_64 GNU/Linux
  • 우분투 uname -a:Linux sierra 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

감사해요

답변1

Debian과 Ubuntu는 dash를 /bin/shBash보다 약간 빠른 as로 사용합니다.

$ time for x in {1..1000} ; do /bin/bash -c 'true' ; done                                                                                                                                                                                                                                                      
real    0m1.894s

$ time for x in {1..1000} ; do /bin/sh -c 'true' ; done 
real    0m1.057s

이것은 그림과 거의 같은 영역입니다(축척 기준).

Debian과 Ubuntu에서 /bin/shBash 대신 dash로 변경된 것은 주로 성능 때문이었습니다.

기본 쉘을 전환하는 주된 이유는 효율성입니다. bash는 모든 기능을 갖춘 뛰어난 셸입니다. 하지만 dash에 비해 크기가 상당히 크고 시작 및 실행 속도가 느립니다.

(https://wiki.ubuntu.com/DashAsBinSh)

답변2

ilkkachu가 설명했듯이 Arch는 bash를 사용하는 /bin/sh반면 Ubuntu는 기본적으로 dash를 사용합니다.

이를 더 자세히 조사하고 이것이 차이점을 설명하는지 확인하려면 bash를 사용하도록 Ubuntu 시스템을 구성하고 벤치마크가 Arch에서 얻은 결과와 유사한 결과를 보고하는지 확인할 수 있습니다. 이렇게 하려면 다음을 실행하세요.

sudo dpkg-reconfigure dash

그리고 "아니요"를 선택하세요. 그런 다음 /bin/sh포인팅을 확인 bash하고 테스트를 실행할 수 있습니다.

기본값을 복원하려면 동일한 명령을 다시 실행하고 예를 선택합니다.

이것이 성능 차이의 원인이라면 Arch를 Ubuntu에 맞게 개선하는 것은 어려울 것입니다. 대시를 설치하고 사용할 수 있지만 bash를 가정하고 대시로 실패하는 많은 스크립트를 접할 가능성이 높습니다 /bin/sh. 데비안과 우분투는 모든 문제를 식별하고 수정하는 데 꽤 오랜 시간이 걸렸습니다.

답변3

다른 사람이 같은 문제를 겪을 경우를 대비해 내 답변을 추가합니다.

for@ilkkachu의 답변에서 루프를 실행할 때대화형 bash 쉘zsh 또는 Fish를 다음과 같이 사용하십시오.내 로그인 쉘, /bin/bash루프에는 약 13초가 소요됩니다. 루트 로그인 쉘에서 루프를 실행하거나 변경하는 경우내 로그인 쉘글쎄 /bin/bash, @ilkkachu의 답변과 비슷한 결과를 얻었습니다.

/bin/bash나는 이것이 로그인 쉘로부터 환경을 상속받기 /bin/zsh때문 이라고 생각 /bin/fish하지만 확실하지는 않습니다.

어쨌든 변경하여 문제를 해결했습니다.내 로그인 쉘/bin/bash터미널을 실행 /bin/fish하거나 /bin/zsh대화형 쉘로 설정 합니다 .

관련 정보