On Sat, 3 Nov 2012, Shan Wei wrote: > this_cpu_ptr is faster than per_cpu_ptr(p, smp_processor_id()) > and can reduce memory accesses. > The latter helper needs to find the offset for current cpu, > and needs more assembler instructions which objdump shows in following. > > per_cpu_ptr(p, smp_processor_id()): > 1e: 65 8b 04 25 00 00 00 00 mov %gs:0x0,%eax > 26: 48 98 cltq > 28: 31 f6 xor %esi,%esi > 2a: 48 c7 c7 00 00 00 00 mov $0x0,%rdi > 31: 48 8b 04 c5 00 00 00 00 mov 0x0(,%rax,8),%rax > 39: c7 44 10 04 14 00 00 00 movl $0x14,0x4(%rax,%rdx,1) > > this_cpu_ptr(p) > 1e: 65 48 03 14 25 00 00 00 00 add %gs:0x0,%rdx > 27: 31 f6 xor %esi,%esi > 29: c7 42 04 14 00 00 00 movl $0x14,0x4(%rdx) > 30: 48 c7 c7 00 00 00 00 mov $0x0,%rdi
this_cpu_read() etc even avoids the use of this_cpu_ptr() reducing the 6 instructions earlier to 1.