• 网络调优


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

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

  • 相关阅读:
    bzoj1336: [Balkan2002]Alien最小圆覆盖
    bzoj3564: [SHOI2014]信号增幅仪
    [HDU5353]
    [codeforce1072D]
    [dp001]逛公园
    树上问题泛做
    [BZOJ2599]race
    [CEOI2019]MAGIC TREE
    [BZOJ2836]魔法树
    QTREE3
  • 原文地址:https://www.cnblogs.com/honpey/p/7899005.html
Copyright © 2020-2023  润新知