2013-03-10 3 views
0

나는 이것이 옳은지 잘 모르겠지만, 상식에 따라 은 command dir/file 또는 command dir1/.../dirN/file보다 조금 더 약간 일 것입니다.IO 작업 - 왜 CD가 아닌가요?

이제는 사실이라고 가정하고 다양한 디렉토리 (예 : gentoo 커널 컴파일)에서 많은 파일로 작업하는 스크립트와 명령에 대해 생각해 봅시다. 스크립트 나 프로그램이 많은 파일을 담고있는 디렉토리에 cd만큼 똑똑하다면 어떤 성능 향상이 있을까요?

더 이상 그 포인터를 수백 또는 수천 번 따르지 않아도 저장된 시간이 디렉토리로 들어가거나 나가는 데 걸리는 시간을 보충 할 수 있다고 생각됩니다.

지금 내 질문 :

  • 성능 향상에 대한 가능성이 있습니까?
  • 그렇다면 어떻게 벤치마킹 할 수 있습니까?
  • 벤치 마크가 가능할 경우, cd에 들어갔다가 빠져 나가기 위해 얼마나 많은 파일이 디렉토리에 있어야합니까?
  • Java, PHP, Python 등의 파일 조작에도 영향을 줍니까?
+2

디렉토리를 cd'ng 파일로 작업하려면 ... 이미'make'가 그것을합니다. 그냥 말해. :) – cHao

+0

나는 그것을 몰랐다. 내가 이걸 궁금해하는 유일한 사람이 아닌 것 같아. –

+2

"'command file'은'command dir/file'보다 약간 빠릅니다. - [WAT?] (https://www.destroyallsoftware.com/talks/wat) –

답변

1

성능 향상 가능성은 있습니까?

수 : 10,000,000 (50,000 파일, 루프 200 회)

stat * : 리얼 - 8m 47.112s
cd ... : 리얼 - 8m 47.475s
stat dir/dir/dir/* : 리얼 - 9m 33.609s

그렇다면 어떻게 벤치마킹 할 수 있습니까? 많은 파일도의 시간이 소요 CD와 그것의 휴식 디렉토리에 있어야 얼마나

mkdir dir; 
mkdir dir/dir; 
mkdir dir/dir/dir; 
cd dir/dir/dir; 
touch $(seq 1 50000); 
time for i in $(seq 1 200); do stat * > /dev/null; done; 
cd ../../../; 
time for i in $(seq 1 200); do stat dir/dir/dir/* > /dev/null; done; 
time $(cd dir/dir/dir; for i in $(seq 1 200); do stat * > /dev/null; done; cd ../../../); 

벤치 마크 (가능할 경우) :

나는 내 테스트를 위해 다음 명령을 사용 ?

그것은 다른 프로세스가 실행되지와 전용 시스템없이 정확하게 번호를 알아야하는 것은 불가능하지만,이 숫자는 것 같다 "손익분기 점"과 같습니다

1 DIR : 2,500
2 디렉토리 : 1,250
3 디렉토리 : 1,000

Java, PHP, Python 등의 파일 조작에도 영향을 줍니까?

상식을 사용하면 경로가이 약간의 시간 차이를 추가한다고 생각하지만 실제로 포함 할 수있는 모든 파일을 1 개의 디렉토리에 넣고 별도의 포함 파일을 포함시켜야한다고 생각할 수있는 유일한 해결책은 모든 귀하의 포함, 그리고 귀하의 런타임 코드에 "대량 includer"를 포함합니다.

1

chdir을 수행하는 경우 디렉토리를 조회하고 dentry를 만듭니다. 나중에 dir/file에 대한 호출은 이미 dir의 dentry를 가져야합니다. 마찬가지로 dir/file1 및 dir/file2 .... dir/fileN에 대한 액세스를 수행하는 경우 조회가 dir에 대해 한 번만 수행되어야합니다. 따라서 성능 향상이 있을지는 의문입니다. 'Make'는 다른 이유로 chdir을 수행 할 수 있습니다.

+0

나는 이런 식으로 생각했습니다. 이 성능 차이를 측정 할 수있는 방법이 있습니까? –

+0

조회를 수행하는 프로그램을 가질 수 있습니다. 데이터 연산이 결과를 비뚤어지게하고 싶지 않기 때문에 명령으로 'stat'를 실행 해 볼 수 있습니다. 결과를 정규화하기 위해 수백만 개의 파일을 통계로 작성하는 것이 좋습니다. – user1952500

+0

또한 Postmark [http://www.fsl.cs.sunysb.edu/docs/auto-pilot/Postmark.html]가 수행하는 작업을 확인하십시오 – user1952500