I think Decrementer runs because every time I read the DEC register (SPR 22), different value returned.
In the timer_interrupt, set_dec(decrementer_count) was called to reload the value of DEC register. I also tried to change decrementer_count value to 100, and then the value of DEC register I read out will always smaller than 100 (I tried many times). if I mask the call of set_dec in timer_interrupt, then I can read out big values (such as 0xFxxxxxxx, 0xExxxxxxx) for the DEC register. From this test, I guess the timer_interrupt was called after the exception generated. But the value of timestamp always be 0. It's hard to believe since in timer_interrupt, after calling set_dec, timestamp++ should be excuted.