Увеличение использования процессора udp_recv после установки соответствия процессору
Я написал простую тестовую демонстрацию udp_recv и обнаружил одну странную вещь
Если я установлю привязку процессора к cpu0
загрузка процессора составляет 5%, но после установки привязки к другим процессорам загрузка процессора увеличилась до 9%~12%, особенно для cpu20
использование процессора составляет более 25%!
я использую perf -e cpu-lock top -p xxxx
проверить функции hotpot.
Когда я устанавливаю близость к cpu0
загрузка процессора составляет 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
Затем я установил привязку процессора к cpu5
использование процессора составляет 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
, использование процессора составляет 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
Процент процессора увеличился. Я думаю, что это причина.
Так почему же влияние на процессор так сильно?