| HOME / 정보공유 / AIX 명령어 모음

fdpr
fdpr fdpr 명령 목적 사용자 레벨 응용프로그램의 실행 시간 및 실제 메모리 이용도 향상을 위한 성능 조정 유틸리티 구문
가장 일반적인 사용법
fdpr -p ProgramName -x Command
위상 1 및 3 플래그와 함께 사용
fdpr -p ProgramName [ -armember ArchiveMemberList ] [ -M Segnum ] [ -o OutputFile ] [ -nI ] [ -tb ] [ -pc ] [ -pp ] [ -toc ] [ -bt ] [ -disasm ] [ -profcount ] [ -map ] [ [ -03 ] [ -nop ] [ -opt-fdpr-glue ] [ -inline ] [ -i_resched ] [ -killed_regs ] [ -RD ] [ -tocload | -aggressive_tocload ] [ -regs_release ] [ -ret_prologs ] ] [[ -Rn ]| [ -R0 | -R1 | -R2 | -R3 ]] [ -v ] -s [ -1 | -3 ] [ -x Command ]
위상 2 플래그와 함께 사용
fdpr -p ProgramName [ -armember ArchiveMemberList ] [ -M Segnum ] [ -o OutputFile ] [ -nI ] [ -tb ] [ -pc ] [ -pp ] [ -toc ] [ -bt ] [ -disasm ] [ -profcount ] [ -map ] [ [ -03 ] [ -nop ] [ -opt_fdpr_glue ] [ -inline ] [ -i_resched ] [ -killed_regs ] [ -RD ] [ -tocload | -aggressive_tocload ] [ -regs_release ] [ -ret_prologs ] ] [[ -Rn ]| [ -R0 | -R1 | -R2 | -R3 ]] [ -v ] [ -s [ -2 |-12|-23] -x Command
설명
fdpr 명령(피드백 지정 프로그램 재구조화)은 사용자 레벨 응용프로그램의 실행 시간과 실제 메모리 이용도를 향상시키는 데 유용한 성능 조정 유틸리티입니다. fdpr 프로그램은 프로그램이 일반적인 작업 로드에 사용되는 동안 프로그램의 작동에 관한 정보를 수집한 다음, 그 작업 로드에 대해 최적화된 새로운 버전의 프로그램을 작성하여 프로그램의 실행 가능한 이미지를 최적화합니다. fdpr에 의해 작성된 새로운 프로그램은 일반적으로 더 빨리 수행되며 실제 메모리도 덜 사용합니다.
주의: fdpr 명령은 고급 최적화 기법을 프로그램에 적용하므로 예상했던 것과 다른 결과를 초래하는 프로그램이 될 수 있습니다. 이 도구를 사용하여 순서를 재지정한 프로그램은 적절한 주의를 기울여 사용해야 하며, 기대한 기능성을 검증하기 위해서는 최소한 원래의 프로그램을 테스트할 때 사용했던 것과 동일한 테스트 세트로 정밀하게 다시 테스트해야 합니다. 순서 재지정된 프로그램은 지원되지 않습니다.
fdpr 명령은 다음 세가지 상이한 위상으로 최적화된 실행 가능 프로그램을 구축합니다.
위상 1: 도구화된 실행 가능 프로그램 작성
위상 2: 도구화된 프로그램을 수행하고 프로파일 데이터 작성
위상 3: 최적화된 실행 가능 프로그램 파일 작성
이 위상들은 별도로 수행되거나 부분적 또는 전체 조합으로 수행될 수 있지만, 순서대로 수행되어야 합니다(즉, -1 그리고 나서 -2 그리고 나서 -3 또는 -12 그리고 나서 -3). 디폴트는 세 가지 위상 모두를 수행하는 것입니다.
주: 위상 1에서 작성되어 위상 2에서 수행되는 도구화된 실행 가능 프로그램은 일반적으로 원래 프로그램보다 몇 배 느리게 수행됩니다. 도구화된 프로그램에 필요한 실행 시간이 증가함으로 인해서, 실행 지속시간을 최소화하면서도 필요한 코드 영역은 충분히 실행하는 방식으로 실행 가능 프로그램을 호출해야 합니다. fdpr 명령 사용자는 또한, 실행 가능한 경우 프로그램의 시간 종속 측면을 제거해야 합니다.
플래그
-1, -2, -3 수행할 위상을 지정합니다. 디폴트는 모두 3 위상(-123)입니다. 후속 위상이 필요한 중간 파일에 액세스할 수 있도록 개별 위상을 수행할 때 -s 플래그를 사용해야 합니다. 이 위상들은 순서대로 수행되어야 합니다(예를 들어, -1, 그리고 나서 -2, 그리고 나서 -3, 또는 -1, 그리고 나서 -23).
-MSegNum 프로파일링을 위해 공유 메모리를 대응시킬 곳을 지정합니다. 디폴트는 0x30000000입니다. 순서 재지정할 프로그램 또는 -x 플래그로 호출한 명령 문자열이 충돌되는 공유 메모리 주소를 사용하는 경우, 대체 공유 메모리 주소를 지정하십시오. 일반적인 대체 값은 0x40000000, 0x50000000에서 0xC0000000까지입니다.
-nI 분기 반전을 허용하지 않습니다.
-o OutFile 최적화 프로그램으로부터의 출력 파일 이름을 지정합니다. 디폴트는 program.fdpr입니다.
-pProgramName 최적화할 실행 가능 프로그램 파일 또는 공유 오브젝트 파일이나 공유 오브젝트/실행 가능 프로그램을 포함한 공유 라이브러리의 이름을 포함합니다. 이 프로그램은 언스트라이프 실행 가능 프로그램이어야 합니다.
-armember ArchiveMemberList -p 플래그에 의해 지정된 공유 아카이브 파일 내에서 최적화될 아카이브 멤버를 나열합니다. -armember를 지정하지 않으면 아카이브 파일의 모든 멤버가 최적화됩니다. ArchiveMemberList에서 항목들 사이는 공백으로 분리시켜야 합니다.
-Rn 최적화 프로그램을 호출하는 대신 입력을 출력으로 복사합니다.
주: The -Rn 플래그는 -R0, -R1, -R2, 또는 -R3 플래그와 함께 사용할 수 없습니다.
-R0,-R1,-R2,-R3 최적화 레벨을 지정합니다. -R3이 가장 적극적인 최적화입니다. 디폴트는 -R0입니다. 자세한 내용은 "최적화"를 참조하십시오.
-tb 재순서 코드로 역추적 테이블의 재구축을 강제로 수행합니다. -tb을 생략할 경우, Try and Catch 매카니즘을 사용하는 C++ 응용프로그램에 대해서만 역추적 테이블이 포함됩니다.
-pc CSECT 경계를 보존합니다. -R1/-R3하고 사용할 때만 유효합니다.
-pp 프로시저의 경계를 보존합니다. -R1/-R3하고 사용할 때만 유효합니다.
-toc TOC 포인터 수정이 가능합니다. -R0/-R2하고 사용할 때만 유효합니다.
-bt 분기 테이블 수정이 가능합니다. -R0/-R2하고 사용할 때만 유효합니다.
-03 모든 최적화 플래그를 켭니다.
-inline Hot 기능의 인라인을 수행합니다.
-nop 순서가 재지정된 코드에서 NOP 명령을 제거합니다.
-opt_fdpr_glue 코드 순서 재지정시 FDPR Glue의 Hot BB를 최적화합니다.
-killed_regs 나중에 호출 기능에 의해 종료되는 호출 대상 기능의 프롤로그 내에 있는 레지스터에 대한 명령을 피합니다.
-regs_release 기능 내에 자주 사용되지 않는 레지스터를 위해 기능의 프롤로그/에필로그에서 저장/복원 명령을 제거합니다.
-tocload TOC를 통한 간접 로드 명령을 즉시 추가 명령으로 대체합니다.
-aggressive_tocload tocload 최적화를 수행하고 불필요한 TOC 항목을 제거하여 TOC 크기를 줄입니다.
-RD .data 및 .bss 섹션에서 정적 데이터의 순서를 재지정합니다.
-i_resched 코드 순서 재지정 후, 명령 스케줄 재지정을 수행합니다.
-ret_prologs 기능의 에필로그에 대한 직접 조건부 분기 명령으로 종료되는 기능의 프롤로그를 최적화합니다.
-map 각각의 구 주소->새로운 주소를 갖는 기본 블록의 맵을 .map의 접미사가 붙은 파일에 인쇄합니다.
-disasm 어셈블되지 않은 버전의 입력 프로그램을 .dis의 접미사가 붙은 파일에 인쇄합니다.
-profcount 프로파일링 계수기를 접미사가 붙은 .counters 파일에 인쇄합니다.
-s fdpr 명령에 의해 작성된 임시 파일을 제거할 수 없도록 지정합니다. 이 플래그는 fdpr를 독립된 위상에서 수행할 때 사용해야 합니다.
-v 상세 출력을 지정합니다.
-x Command 도구화 프로그램 호출에 사용되는 명령을 지정합니다. -x 플래그 다음의 모든 인수는 호출에 사용됩니다. -x 플래그는 -s 플래그가 -2 플래그와 함께 사용될 때 필요합니다.
최적화
fdpr 명령은 4가지 레벨의 최적화를 제공합니다. -R1, -R2, 및 -R3 플래그는 가장 공격적인 최적화와 가장 가능성이 많은 속력 증가를 제공합니다. 그러나, 일부 경우에서 이 최적화 레벨을 사용하면 실행 가능 프로그램이 예상했던 대로 작동하지 않을 수도 있습니다. 어셈블러 코드(특히, 동적 분기 계산을 수행하는 코드)를 포함하는 프로그램 또는 비 표준 컴파일러로부터 작성된 프로그램이 재순서화를 유발하는 예외 유형이 될 수 있습니다. 또한, -R1 및 -R3 플래그는 디버그 정보를 포함하지 않는 실행 가능 파일을 작성하므로 dbx 명령에서는 지원되지 않습니다.
-R0 플래그를 사용할 경우, 이 플래그는 원래 프로그램 구조를 유지하고 분기표 및 기능 설명자 포인터 조정사항을 제거하여 기능성과 디버그 능력을 보존하려 하기 때문에 성능이 약간 저하될 수도 있습니다. 기능상의 오류일 수도 있지만 가능성은 매우 작습니다. 또한, 이 옵션은 원래의 프로그램보다 20-40% 정도 큰 재순서화된 실행 가능 프로그램을 작성합니다.
-R0와 -R2 플래그 모두 역추적 항목이 포함되는 프로그램의 원래 구조가 보존되는 프로그램 순서 재지정 기술을 사용합니다. 프로그램을 통해 고도로 실행된 코드 경로를 나타내는 재순서화 코드는 실행 가능 파일의 맨 끝에 추가됩니다. 이 기법은 디버그 기능을 보존하는 중에 전역 코드 재순서화(프로시저 경계에 종속되지 않으며 중간에 역추적 항목이 없는)를 허용함으로써 근접한 최적 성능 향상을 제공합니다. 또한, 원래 프로그램 구조를 "safety net"로서 사용하여 발견되지 않고 (또는) 수정되지 않은 동적으로 (수행시간) 전산화된 분기 명령을 포착하여 광범위한 프로그램 클래스에 대한 프로그램 기능성이 유지됩니다. -R2 플래그는 이동된 코드로 분기한 모든 동적으로 전산화된 분기를 정정하려 합니다. 그러나, 일부 프로그램(특히 어셈블러 프로그램)의 경우, 이러한 동적 분기를 제대로 식별하기가 어려우며 이러한 클래스의 프로그램에 -R2 플래그를 사용하면 기능상에 오류가 발생할 수 있습니다. 또한, 자체 수정 코드 양식을 사용하는 프로그램의 순서를 재지정해도 예기치 않은 기능상의 오류가 생길 수 있습니다.
-qfdpr 컴파일러 플래그로 구축된 실행가능 프로그램은 보장된 기능성으로 재순서화된 프로그램을 생성하는데 fdpr 를 도울 수 있는 정보를 포함합니다. 이 컴파일러 플래그를 사용할 경우, fdpr의 옵션 -R0의 기능적 장점은 -R1, -R2 및 -R3 옵션까지 확장됩니다. 그러나, -qfdpr이 사용되면, 이 플래그로 구축된 오브젝트 모듈의 순서가 재지정됩니다. -qfdpr 플래그를 사용할 경우에는 프로그램 내의 모든 오브젝트 모듈에 대해 사용해야 합니다. -qfdpr 플래그를 사용할 경우, 정적 링크는 성능을 향상시키지 못합니다.
순서를 재지정할 프로그램을 구축할 때 정적 링크를 사용하면 추가로 성능이 향상될 수 있습니다. fdpr 프로그램은 지정된 실행 가능 프로그램 내의 명령어만을 순서 재지정하므로, 이 프로그램이 호출하는 동적으로 연결된 공유 라이브러리 루틴은 순서 재지정되지 않습니다. 이러한 라이브러리 루틴을 실행 가능 프로그램에 정적으로 연결하면 프로그램의 명령어와 프로그램이 사용하는 모든 라이브러리 루틴 양자의 순서 재지정이 가능해집니다. 정적으로 연결된 프로그램 구축에는 단점뿐만 아니라 장점도 있습니다. 자세한 사항은 AIX 5L 버전 5.1 성능 관리 안내서를 참조하십시오.
출력 파일
fdpr 명령으로 생성된 파일 중 -x 플래그에서 지정한 명령을 수행하여 생성된 파일만 제외하고 모든 파일은 현재 디렉토리에 저장됩니다. 최적화 프로세스중에 원래의 프로그램은 이름을 바꾸어 보관되며, 최종 위상이 성공적으로 종료된 후에만 원래 프로그램 이름으로 복원됩니다.
fdpr 명령으로 생성된 프로파일 파일은 프로그램을 실행하기 전에 프로그램을 수행하는데 사용되는 스크립트가 작업 디렉토리를 변경시킬 수 있으므로, 명백히 현재 디렉토리의 이름을 사용합니다.
fdpr 명령에 의해 생성 및/또는 사용되는 파일은 다음과 같습니다.
program 최적화될 언스트라이프 실행 가능 프로그램 이름.
__program.save 원래의 실행 가능 프로그램의 보관된 버전.
__program.save.histo 중간 파일.
__program.save.bt 중간 파일.
__program.prof 프로파일 파일 이름.
__program.instr 도구화 버전 프로그램 이름.
__program.save.dis -disasm 플래그의 사용으로 작성되는 디폴트 분리형 파일 이름.
__program.save.map -map 플래그의 사용으로 작성되는 디폴트 맵핑 파일 이름.
__program.save.counters -profcount 플래그의 사용으로 작성되는 프로파일 계수기 파일 이름.
program.fdpr 최적화한 실행 가능 출력 파일의 디폴트 이름.
강화된 디버깅 기능
최적화 프로그램에 대한 특정 클래스의 디버깅 기능을 사용 가능하게 하기 위해, fdpr은 .text 구역에 이루어진 변경사항이 반영되도록 기호 테이블을 갱신합니다.
fdpr 순서 재지정중에 재배치된 기호의 주소를 지정하는 기호 테이블의 항목 필드는 .text 구역에서 새로운 주소를 지정하도록 수정됩니다.
또한, 순서 재지정중에 기능 또는 파일이 분할되는 경우, fdpr은 기호 테이블에 분할 기능/파일의 각 새로운 부분에 대한 새로운 항목을 작성합니다. 동일한 기능의 새로운 부분에는 다음 명명 규칙에 따라 기호 테이블에 새로운 기호 이름이 제공됩니다.
[ ] [fdpr|orig
-R0/-R2 최적화 플래그의 경우, 모든 새로운 순서 재지정되는 코드는 .text 구역의 맨 끝에 추가되며, 접미사 문자열 [fdpr]는 [orig] 문자열이 원래 텍스트 영역에 있는 주소를 참조하는 반면 새로운 항목은 추가된 텍스트 영역의 주소를 참조함을 나타냅니다. -R1/-R3 최적화 플래그의 경우, 모든 새로운 항목에는 [fdpr] 접미사가 붙습니다.
예를 들어, 원래 기능이 세 부분으로 분할된 경우, 기호 테이블에는 각 부분에 하나씩 모두 3 항목이 있게 됩니다.
[Index] m Value Scn Aux Sclass Type Name
Original Entry:
[456] m 0x00000230 2 1 0x02 0x0000 .main
Restructured Entries:
[456] m 0x00000304 2 1 0x02 0x0000 .main
[1447] m 0x00003328 2 1 0x02 0x0000 .main[1] [fdpr]
[1453] m 0x000033b4 2 1 0x02 0x0000 .main[2] [fdpr]
디버그 지원
-R0 및 -R2 최적화 플래그의 사용은 dbx 디버그 프로그램이 사용하는 추가 정보가 프로그램 파일에 포함되어 있는 실행가능한 프로그램을 작성합니다. 이 추가 정보를 사용하여 dbx가 순서 재지정된 명령어 주소를 원래의 위치로 대응시키고 역추적 항목을 원래의 텍스트 구역에 유지함으로써 제한된 디버그 버전을 제공할 수 있습니다. dbx 명령은 대부분의 순서 재지정된 명령어 주소를 다음과 같이 원래의 실행 가능 프로그램이 있는 해당 주소에 대응시킵니다.
0xRRRRRRRR = fdpr[0xYYYYYYYY]
여기서 0xRRRRRRRR는 재순서화된 주소를 표시하고 fdpr[0xYYYYYYYY]는 원래 주소를 표시합니다. 또한, dbx는 원래의 명령어 영역에서 역추적 항목을 사용하여 스택을 역추적하는 중에 연관된 프로시저 이름을 찾습니다. 자세한 정보는 "예제" 절을 참조하십시오.
예제
다음은 fdpr 명령의 일반적인 사용 예입니다.
이 예를 사용하여 사용자가 세 개의 위상을 모두 수행할 수 있습니다. 이 예제에서, test1는 언스트라이프 실행 가능 파일이고 test2는 test1를 호출하는 쉘 스크립트입니다. 현재 작업 디렉토리는 /tmp/fdpr입니다.
test2 script file:
# code to exercise test1
test1 -expand 100 -root $PATH file.jpg -quit
# the end of test2
fdpr 명령을 수행하십시오(디폴트 최적화 사용).
fdpr -p test1 -x test2
이렇게 하면 새로 순서 재지정된 실행 가능 프로그램 test1.fdpr이 작성됩니다.
한 번에 한 위상씩 수행하려면, fdpr의 위상 1을 실행한 후 필요한 임시 파일을 보관하십시오.
fdpr -s -1 -p test1
이 명령 문자열은 원래 프로그램의 이름을 __test1.save으로 변경하고 test1 이름으로 기계화된 버전을 작성합니다.
위상 2를 저장하여 임시 파일을 저장하는 방법은 다음과 같습니다.
fdpr -s -2 -p test1 -x test2
이 명령은 test1의 도구화 버전을 실행하는 test2 스크립트 파일을 실행하여 프로파일 데이터를 수집합니다.
위상 3을 실행하여 임시 파일을 저장하는 방법은 다음과 같습니다.
fdpr -s -3 -p test1
다시, 이 결과로 새로 순서 재지정된 실행 가능 프로그램 test1.fdpr이 작성됩니다.
처음 두 위상을 수행한 다음 위상 3을 수행하는 방법은 다음과 같습니다.
fdpr -s -12 -p test1 -x test2
임시 파일을 보관하면서 최적화 레벨 3을 사용하여 위상 3을 실행하십시오.
fdpr -s -3 -R3 -p test1
-R0 또는 -R2 최적화 플래그로 구축된 fdpr 재순서화된 프로그램을 수행하는 중 오류가 발생하면, dbx 명령을 사용하여 다음과 같이 오류가 어떤 프로시저에서 발생하였는지(원래 텍스트 섹션 또는 재순서화된 텍스트 섹션) 확인할 수 있습니다.
dbx program.fdpr
위 명령으로부터 다음과 유사한 출력이 작성됩니다.
Type 'help' for help.
reading symbolic information ...warning: no source compiled with -g
[using memory image in core]
Segmentation fault in proc_d at 0x10000634 = fdpr[0x10000290]
0x10000634 (???) 98640000 stb r3,0x0(r4)
(dbx)
0x10000634 = fdpr[0x10000290] 의 주소 매핑 정보는 0x10000634 주소에 있는 명령이 재순서화된 텍스트 섹션에 있으며, 원래는 (원래 프로그램의) 0x10000290 in proc_d 주소에 거주했다는 것을 표시합니다. 원래 프로그램에서 dbx를 수행하고 맵핑된 주소(위의 예제에서 0x10000290)를 사용하면 디버깅을 도울 수 있는 추가 정보를 제공할 수 있습니다.
프로그램이 현 위치에 도착한 방법을 판별하는 데 사용되는 스택 역추적은 다음과 같이 작성됩니다.
(dbx) where
이로써 다음의 출력이 작성됩니다.
proc_d(0x0) at 0x10000634
proc_c(0x0) at 0x10000604
proc_b(0x0) at 0x100005d0
proc_a(0x0) at 0x1000059c
main(0x2, 0x2ff7fba4) at 0x1000055c
(dbx)
dbx의 stepi 부속 명령을 다음과 같이 재순서화된 실행 가능 프로그램의 명령을 단계적으로 실행하는데 사용할 수 있습니다.
(dbx) stepi
이로써 다음의 출력이 작성됩니다.
stopped in proc_d at 0x1000061c = fdpr[0x10000278]
0x1000061c (???) 9421ffc0 stwu r1,-64(r1)
(dbx)
이 예제에서, dbx는 프로그램이 순서 재지정된 텍스트 구역(원래는 0x10000278에 위치함)의 주소 0x1000061c에 있는 proc_d 루틴에서 정지되었음을 나타냅니다.
파일
/usr/bin/fdpr fdpr 명령을 포함합니다.
program 최적화할 언스트라이프 실행 가능 프로그램 이름.
__program.save 원래의 실행 가능 프로그램의 보관된 버전.
__program.save.histo 중간 파일.
__program.save.bt 중간 파일.
__program.prof 프로파일 파일 이름.
__program.instr 도구화 버전 프로그램 이름.
__program.save.dis -disasm 플래그의 사용으로 작성되는 디폴트 분리형 파일 이름.
__program.save.map -map 플래그의 사용으로 작성되는 디폴트 맵핑 파일 이름.
__program.save.counters -profcount 플래그의 사용으로 작성되는 프로파일 계수기 파일 이름.
program.fdpr 최적화한 실행 가능 출력 파일의 디폴트 이름.
관련 정보
dbx 명령.