网络调优

网络性能在云计算中扮演者越来越重要的角色,除了改进网络延迟和吞吐量,另一个常见的任务是消除可能由丢包引起的时延异常。网络分析是跨硬件和软件的,这里的硬件是指物理网络,包括网络借口卡、交换机、路由器和网关。软件是指内核协议栈,通常是TCP/IP,以及每个锁涉及的协议的行为。

【为啥网络中的这些函数都叫啥xmit呢?英语看来没过关啊:XMIT = [计]=TransMIT 发送、传送

接收:

napi_gro_receive_entry:

napi_gro_frags_entry:

netif_receive_skb:

netif_receive_skb_entry:

netif_rx

netif_rx_entry

netif_rx_ni_entry

发送相关:

net_dev_queue:

函数: dev_queue_xmit,  ip_skb_dest_mmu

trace_net_dev_queue 这个 tracepoint 在函数 net_dev_queue 这里是ipv4最主要的函数了;

这个函数发生在ip层向链路层之间做传递的时候发生;

dnsmasq  1755 [003]  6547.732801: net:net_dev_queue: dev=lo skbaddr=0xffff880035b41800 len=88
                  91d05d __dev_queue_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  91d2e0 dev_queue_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95d255 ip_finish_output2 (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95e076 ip_finish_output (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95ea6e ip_output (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95e235 ip_local_out (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95f439 ip_send_skb (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  9869cd udp_send_skb (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 【使用ping操作,首先会使用dnsmasq 发送数据,这里也能看到dns发现使用的是udp协议】

987907 udp_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 994e05 inet_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 8fe098 sock_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 8feb41 ___sys_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 8ff491 __sys_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 8ff4e2 sys_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) a244f2 entry_SYSCALL_64_fastpath (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic) 7fe5e798e450 __sendmsg_nocancel (/lib/x86_64-linux-gnu/libc-2.23.so) 555a4477b18c _init (/usr/sbin/dnsmasq) 555a4477d77c _init (/usr/sbin/dnsmasq) 555a4478199c _init (/usr/sbin/dnsmasq) 555a4476657b _init (/usr/sbin/dnsmasq) 7fe5e78a6830 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.23.so) 555a447676b9 _init (/usr/sbin/dnsmasq)

 net_dev_start_xmit:

在 dev_hard_start_xmit 函数中,xmit_one 函数中。这里应该说是下发skb的第二步,因为这里包可能会被缓存【拥塞的控制,NET层的拥塞控制是在链路层做的?

dnsmasq  1755 [003]  8757.164914: net:net_dev_xmit: dev=wlp4s0 skbaddr=0xffff8800875a8700 len=73 rc=0
                  91cb76 dev_hard_start_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  94150f sch_direct_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  91cf7d __dev_queue_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  91d2e0 dev_queue_xmit (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  925df8 neigh_resolve_output (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95d116 ip_finish_output2 (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95e076 ip_finish_output (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95ea6e ip_output (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95e235 ip_local_out (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  95f439 ip_send_skb (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  986aa6 udp_send_skb (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  987907 udp_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  994e05 inet_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  8fe098 sock_sendmsg (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  8fe681 SYSC_sendto (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  8ff19e sys_sendto (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
                  a244f2 entry_SYSCALL_64_fastpath (/usr/lib/debug/boot/vmlinux-4.4.0-21-generic)
            7fe5e798e4b3 __sendto_nocancel (/lib/x86_64-linux-gnu/libc-2.23.so)
            555a4477c6fb _init (/usr/sbin/dnsmasq)
            555a4477d2b1 _init (/usr/sbin/dnsmasq)
            555a4478191b _init (/usr/sbin/dnsmasq)
            555a4476657b _init (/usr/sbin/dnsmasq)
            7fe5e78a6830 __libc_start_main (/lib/x86_64-linux-gnu/libc-2.23.so)
            555a447676b9 _init (/usr/sbin/dnsmasq)

net_dev_xmit: (来自函数xmit_one)

都是传输的过程,net_dev_xmit 和 net_dev_start_xmit 是相互配合的一对,是为了统计一个计时:

2908 static int xmit_one(struct sk_buff *skb, struct net_device *dev,
2909             struct netdev_queue *txq, bool more)
2910 {
2911     unsigned int len;
2912     int rc;
2913 
2914     if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
2915         dev_queue_xmit_nit(skb, dev);
2916 
2917     len = skb->len;
2918     trace_net_dev_start_xmit(skb, dev);          //-------------- START --------------------------------
2919     rc = netdev_start_xmit(skb, dev, txq, more);
2920     trace_net_dev_xmit(skb, rc, dev, len);       //--------------- END ---------------------------------
2921 
2922     return rc;
2923 }

 这里会有个钩子?怎么看系统中的钩子函数是哪一个?

原文地址:https://www.cnblogs.com/honpey/p/7899005.html