Specialised Projects > Compiler Based Assembler

RDTSCP

(1/1)

MichaelW:
I recently became aware of the RDTSCP instruction. There is an Intel whitepaper here that discusses its use in cycle-counting code. My Core i3, with two physical cores and no HTT, supports RDTSCP. Assuming that RDTSCP returns a processor or core ID, or similar, in ECX,  I thought it would be interesting to use it to monitor the processor core that my process is running on, to see if the system does move processes between cores, as I have seen some people claim it does.

I started out to do this as a 64-bit app coded in JWASM, but in the time I had to spend on it I could not find a good set of 64-bit header files, so I switched to Pelles C and POASM.

First surprise, RDTSCP seems to always return zero in ECX, independent of the process/thread affinity. Intel refers to the value in ECX as IA32_TSC_AUX,  and per this page, "the Linux kernel initializes this to the core's number, starting from zero." Also, on that same page, the "invariant TSC" stuff is interesting.

Gunther:
Michael,

I have the Intel whitepaper since a long time in my Manual subdirectory and was therefore a bit surprised that you didn't know it. Anyway, here is the output on my machine:

--- Code: ---1       255
1
4923796230654   0

2       255
1
4923797664386   0

        1
        4923798708896   0
        1
        4923798938477   0
        1
        4923799514661   0
        1
        4923799789527   0
        1
        4923799998476   0
        1
        4923800198509   0
        1
        4923800406335   0
        1
        4923800599097   0
        1
        4923800824230   0
        1
        4923801211339   0


        1
        4923806399764   0
        1
        4923806817468   0
        1
        4923808551438   0
        1
        4923810258996   0
        1
        4923812142019   0
        1
        4923871502647   0
        1
        4923874142743   0
        1
        4923876262351   0
        1
        4923879064898   0
        1
        4923881090506   0

--- End code ---

Gunther

Navigation

[0] Message Index

Go to full version