zoukankan      html  css  js  c++  java
  • 网络调优

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

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

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/honpey/p/7899005.html
Copyright © 2011-2022 走看看