我写了一个简单的udp_recv测试演示,我发现了一件奇怪的事情
如果我将CPU亲和力设置为cpu0
,则cpu使用率为5%,但在设置与其他cpu的亲缘关系后,cpu使用率增加到9%~12%,尤其是设置为cpu20
,cpu使用率超过25%!
我使用perf -e cpu-lock top -p xxxx
检查火锅功能
当我将亲和力设置为cpu0
时,cpu使用率为5%,我得到了这个:
Samples: 20K of event 'cpu-clock', Event count (approx.): 742033834
20.41% [kernel] [k] fget_light
11.84% [kernel] [k] copy_user_enhanced_fast_string
8.63% [kernel] [k] sock_recvmsg
6.49% [kernel] [k] _raw_spin_unlock_irqrestore
5.81% [kernel] [k] aa_revalidate_sk
3.93% [kernel] [k] SYSC_recvfrom
3.85% [kernel] [k] sockfd_lookup_light
3.47% [kernel] [k] udp_recvmsg
然后我将CPU亲和力设置为cpu5
,cpu使用率为10%,我得到了这个:
Samples: 1K of event 'cpu-clock', Event count (approx.): 286637653
13.33% [kernel] [k] copy_user_enhanced_fast_string
10.51% [kernel] [k] _raw_spin_unlock_irqrestore
7.02% [kernel] [k] fget_light
5.55% [kernel] [k] system_call_after_swapgs
4.68% [kernel] [k] sock_recvmsg
4.65% udp_recv [.] process_udp_connection(int)
4.21% [kernel] [k] __slab_free
4.15% libc-2.15.so [.] __GI___libc_recvfrom
4.15% [kernel] [k] skb_copy_datagram_iovec
3.76% [kernel] [k] inet_recvmsg
3.45% [kernel] [k] __ticket_spin_lock
3.19% [kernel] [k] udp_recvmsg
2.91% [kernel] [k] SYSC_recvfrom
2.72% [kernel] [k] move_addr_to_user
2.38% [kernel] [k] put_compound_page.part.18
然后我将CPU Affinity设置为cpu20
,cpu使用率为27%,我得到了这个:
Samples: 238K of event 'cpu-clock', Event count (approx.): 2529242834
16.81% [kernel] [k] copy_user_enhanced_fast_string
8.46% [kernel] [k] udp_recvmsg
6.48% [kernel] [k] _raw_spin_unlock_irqrestore
4.59% [kernel] [k] skb_release_data.part.49
4.28% [kernel] [k] sock_recvmsg
4.12% [kernel] [k] __slab_free
3.28% libc-2.15.so [.] __GI___libc_recvfrom
3.14% [kernel] [k] SYSC_recvfrom
2.88% [kernel] [k] kmem_cache_free
2.85% [kernel] [k] __skb_recv_datagram
2.71% [kernel] [k] inet_recvmsg
2.71% [kernel] [k] system_call_after_swapgs
2.69% udp_recv [.] process_udp_connection(int)
2.58% [kernel] [k] fget_light
2.03% [kernel] [k] skb_free_datagram_locked
1.92% [kernel] [k] skb_release_head_state
我观察到函数copy_user_enhanced_fast_string
CPU百分比增加了。我认为这就是原因。
那么为什么CPU亲和力会如此影响呢?