Pincpt: A Tool For Checkpointing Architectural State
1 Introduction
Pincpt is a tool for checkpointing architectural state of an x86 application. The checkpoints are human-readable and are intended to initialize a user-mode CPU performance simulator. Currently pincpt only works with 32-bit Linux single-threaded applications.
2 Download
Pincpt is a SourceForge project. Go to the files section to download the latest release. SourceForge also hosts the documentation.
3 Dependences
Pincpt requires the Pin binary instrumentation tool. The preferred version is 2.8 (build 33586). Pincpt may require slight modifications to work with later versions of Pin due to the ever-changing Pin interface.
4 Building
To build pincpt, you will need to specify the Pin directory by
either: setting the PIN_KIT
variable in the environment,
specifying it on the make
command line, or putting it into the
makefile directly.
5 Usage
pin -t /blah/pincpt/obj-ia32/pincpt.so [pincpt options] -- <application> <application arguments>
5.1 Options
- -help
- show all pincpt options
- -o <dir>
- output directory where the checkpoint will be written
- -d <0 or 1>
- unhelpful debug mode
In addition to the options above, pincpt uses the Pin controller interface for specifying when the checkpoint should be taken. This interface supports taking a checkpoint after a specified number of instructions, once a particular instruction is encountered, using a PinPoint file, etc.
5.2 Examples
-
Checkpoint
ls
after a 10000 instructions:pin -t /blah/pincpt/obj-ia32/pincpt.so -skip 10000 -- /bin/ls
-
Often it's desirable to checkpoint a benchmark at some point in
the source code (for example, after the initialization
routine). This can be done by inserting a rarely used NOP at that
point in the source code and telling pincpt to checkpoint at that
instruction. In the example below, we use the rare NOP instruction
xchg ecx, ecx
which is encoded as0x87c9
.pin -t /blah/pincpt/obj-ia32/pincpt.so -start_itext 87c9 -- benchmark
6 Checkpoint Format
Pincpt stores the checkpoint as a directory. Inside the directory,
the main
file contains the human readable part of the checkpoint
and the .dat
files contain compressed memory data.
The main
file is in a hierarchical indented format (see example at
the end). The supplied hconfig.*
and gtree.*
files provide a C
interface for reading this hierachical format.
An example main
file:
generator pincpt processes process pid 8948 cwd /tmp brk 0x822c000 standard_streams stdin 0 stdout 1 stderr 2 file_descriptors 0 path /dev/pts/13 offset -1 flags 0x8002 1 path /dev/pts/13 offset -1 flags 0x8002 2 path /dev/pts/13 offset -1 flags 0x8002 3 path /tmp/input offset 24576 flags 0x0 4 path /tmp/output offset 36864 flags 0x1 threads thread tid 8948 registers edi 0x3 esi 0x20612 ebp 0xbfb12348 esp 0xbfb12310 ebx 0x270f edx 0x80c24b0 ecx 0x400 eax 0x20 cs 0x73 ss 0x7b ds 0x7b es 0x7b fs 0x0 gs 0x33 eflags 0x246 eip 0x8048350 mxcsr 0x1f80 fpcw 0x37f fpsw 0x20 fptag 0x0 fpip_off 0xb682d68d fpip_sel 0x73 fpopcode 0x55d fpdp_off 0xbfb12328 fpdp_sel 0x7b st0 0x00000000000000000000 st1 0x00000000000000000000 st2 0x00000000000000000000 st3 0x00000000000000000000 st4 0x00000000000000000000 st5 0x00000000000000000000 st6 0x3ffbccccccccccccd000 st7 0x3ffeeb42f1b3e44ab17d ftw 0x0 mm0 0x0000000000000000 mm1 0x0000000000000000 mm2 0x0000000000000000 mm3 0x0000000000000000 mm4 0x0000000000000000 mm5 0x0000000000000000 mm6 0xccccccccccccd000 mm7 0xeb42f1b3e44ab17d xmm0 0x00000000000000000000000000000000 xmm1 0x00000000000000000000000000000000 xmm2 0x00000000000000000000000000000000 xmm3 0x00000000000000000000000000000000 xmm4 0x00000000000000000000000000000000 xmm5 0x00000000000000000000000000000000 xmm6 0x00000000000000000000000000000000 xmm7 0x00000000000000000000000000000000 signals blocked pending thread_local_storage 6 entry_number 6 base_addr 0x820a830 limit 1048575 seg_32bit 1 contents 0 read_exec_only 0 limit_in_pages 1 seg_not_present 0 useable 1 memory range start 0x6b9000 end 0x6d4000 permissions rx mapped_to path /lib/ld-2.5.so offset 0x0 data 0.dat range start 0x6d4000 end 0x6d5000 permissions rx mapped_to path 1409042 offset 0x1 data 1.dat range start 0xbfafe000 end 0xbfb14000 permissions rw data 2.dat environment "HOME=/u/blah" "EDITOR=ed"
7 Version History
Version | Changes |
1.0a | Fixed bug affecting x87, MMX, and XMM register values. |
1.0 | Initial release. |