문제

최종 실행 파일에 연결하기 전에 정적 라이브러리로 구축하는 엄청난 양의 자동 생성 코드가있는 프로젝트가 있습니다. 우리는 GCC/GNAT 5.04A를 사용하여 파일이 너무 많아서 작업을 배치로 나누고 AR을 여러 번 호출하여 라이브러리를 구성하여 (명령 줄 길이 제한을 피하기 위해) : 예 :

 [echo] Archiving codegen                   
 [echo] Deleting old codegen archive                     
   [ar] Using ar found in /usr/bin          
   [ar] Batch 1 of 7 completed in 37.871 s  
   [ar] Batch 2 of 7 completed in 55.796 s  
   [ar] Batch 3 of 7 completed in 89.709 s  
   [ar] Batch 4 of 7 completed in 256.894 s 
   [ar] Batch 5 of 7 completed in 196.704 s 
   [ar] Batch 6 of 7 completed in 248.334 s 
   [ar] Batch 7 of 7 completed in 243.759 s 
   [ar] Archiving took: 1129.067 s          
   [ar] Using ranlib found in /usr/bin      
   [ar] Indexing took: 247.223 s            
 [echo] Done with codegen                   

우리는 잠재적 인 속도 개선을 찾고 있습니다. 아카이브가 성장함에 따라 각 배치는 객체를 추가하기 전에 검색 할 것이 더 많기 때문에 더 길고 더 오래 걸리는 것으로 보입니다. 아카이브를 삭제하는 것이 이전 아카이브를 제자리에 업데이트하는 것보다 빠른 이유 인 것 같습니다. 보다 속도를 높이기 위해 우리는 "QCS"를 AR 명령에 사용합니다. Man Page에 따르면, "Q"(빠른 요약이어야 함)에 따르면 실제로 "R"( "교체 사용")의 동의어입니다. "C" 인덱스를 생성합니다 (끝에 "ranlib"을 다시 사용하여 커버합니다.

이 작업을 더 빨리 만들기 위해 내장형 툴을 사용하는 편리한 방법이 있습니까? "빠른 부속"모드가 작동한다면 아마도 우리가 원하는 것일 것입니다.

도움이 되었습니까?

해결책

우리는 타이밍 문제의 큰 부분이 파일의 위치라는 것을 발견했습니다. 위의 숫자는 NAS 장치에있는 객체 및 아카이브 파일 용입니다. 로컬 하드 디스크 (임시 스토리지)에서 동일한 작업을 수행하면 시간이 ~ 20-40 초로 줄어 듭니다. 모든 파일을 복사하고 로컬 아카이브를 수행하고 결과를 복사하는 데 NAS에서 직접 보관하는 것보다 더 오래 걸리지 만 전체 빌드 프로세스를 로컬 임시 저장소로 옮기는 것을보고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top