帮酷LOGO
  • 显示原文与译文双语对照的内容
A TCP performance profiling tool.

  • 源代码名称:tcpdive
  • 源代码网址:http://www.github.com/fastos/tcpdive
  • tcpdive源代码文档
  • tcpdive源代码下载
  • Git URL:
    git://www.github.com/fastos/tcpdive.git
  • Git Clone代码到本地:
    git clone http://www.github.com/fastos/tcpdive
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/fastos/tcpdive
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • tcpdive TCP性能配置文件工具

    目录

    简介

    背景

    由于移动 Networking(2G/3G/4G/WiFi), 云计算和 等等 等技术的快速演变,网络条件已经发生了很大变化。 因此,一些公司一直在优化TCP以获得更好的用户体验。

    但是,当谈到TCP性能优化时,我们可能会失望地发现有很少合适的工具可用。 tcpdump。netstat和ss等实用程序并不关注TCP协议本身。 它们可以提供关于TCP内部的一些性能信息。

    出于上述原因,我们决定开发 tcpdive - 一个TCP性能分析工具。 通过监视和分析从运行的linux内核收集的大量数据,Tcpdive旨在提供对TCP的洞察。 基于 systemtap,tcpdive无需修改内核,这使得部署和使用变得很容易。

    优势

    现有工具相比,tcpdive具有一些优点:

    • TCP内部组件性能的更多信息。
    • 对TCP性能改进的定量评价。
    • 描述TCP层的HTTP处理,它与HTTP应用无关。
    • 易于部署,易于使用。
    方案

    Tcpdive已经在新浪的生产环境中部署到:

    • 提高微博图像服务质量的提高。
    • 提高微博视频服务质量的提高。
    • 有线和无线网络中TCP的性能比较。
    • 描述不同应用程序的TCP流量。

    命令行功能

    传输

    下面列出的性能指标用于描述连接的TCP传输。
    对于每个性能指标的平均值,请参考传输协议。

    Transmission

    丢失和重新传输

    TCP使用两种主要机制来检测和恢复损失。

    • 快速重传,由dupacks触发
    • 超时,由计时器触发

    第一个是快速重传,TCP在接收到一定数量的重复内容后执行丢失段的重传。 当快速重新传送失败或者者发送者没有接收到足够的重复is时,TCP将使用第二个机制。

    Retrans Mechanism

    Tcpdive可以区分快速重传和超时,找出连接在各种重传机制上花费了多少时间。 对于每个性能指标的平均值,请参考重传协议。

    Loss and Retransmission

    拥塞控制

    Cubic是一种TCP拥塞控制算法,目前在Linux中。
    作为算法的NAME,三次函数的窗长函数是三次函数,由三个组成部分组成:

    • 第一个是凹槽,在最后一个拥塞事件之前窗口快速斜坡到窗口大小。
    • 中间是凹和凸之间的一个平台,使窗口大小在一段时间内稳定。
    • 最后一个是它探测更多带宽的凸点。

    Tcpdive主要通过三次设计和实现来探讨tcp控制的拥塞。
    下面列出的性能指标用于对立方进行。 对于每个性能指标的平均值,请参考拥塞协议。

    Congestion Control

    如果我们想要更多的动画,而不是一些平均性能指标的动画,该怎么办? Tcpdive支持五种关键点,我们可以用它来描述连接的波动。 要找出关键点可以传达什么信息,请参考拥塞协议。

    Advanced Congestion Control

    HTTP进程

    我们都知道,HTTP是基于请求响应的协议。 这意味着客户端将通过发送请求来发起通信,而HTTP服务器将通过发送响应来响应。 尽管tcpdive设计用于描述TCP协议的性能,但它还可以用于监视每个http请求和响应。 HTTP保持活动状态是 suppported。

    HTTP Processing

    对于一对http请求和响应,提供下面列出的性能指标。

    HTTP performance indicators

    Tcpdive可以在一定程度上配置HTTP处理,如上所示。
    注意,所有工作都是在TCP层完成的,这意味着它与HTTP应用。

    用法

    内核版本

    尽管不需要内核修改,但tcpdive本身是内核版本依赖。
    目前,tcpdive是以 kernel kernel kernel为核心的,这是我们生产环境的主要系统。 将来将支持更多内核版本。 所以先检查你的内核版本。
    如果你没有这个内核版本,请从这里下载相关内核 rpm。

    封装

    要快速启动,只需要运行时
    要充分使用 tcpdive,需要一些额外的软件包:

    • gcc
    • elfutils
    • systemtap
    • 内核开发
    • 内核调试信息
    • kernel-debuginfo-common

    如果 elfutils。和systemtap不存在,使用rpm命令安装它们。
    内核调试器和这个内核版本的kernel-debuginfo-common包可以从这里下载到。

    快速启动

    在rpm中安装 tcpdive-2.6.32-431.17.1.el6-1.0-stable.x86_64.rpm。
    修改/usr/bin/tcpdive 以更改默认配置。

    LOG_NAME="tcpdive.log" # log file name
    LOG_SIZE="500" # per log file's upper size(MB)
    LOG_NUM=20 # max number of log files
    PORTS="80" # server ports concerned, eg. 80,8080

    让tcpdive来工作吧。

    tcpdive {start|stop|status}

    运行"tcpdive启动"后,你将在当前目录中找到一个日志。 对于日志中的每个行,它表示从多个维度( 如传输。丢失和重传) 和HTTP处理中的一个TCP连接。 对于默认的日志格式,请参阅日志记录。

    完整指南

    为了充分利用 tcpdive,建议使用一些灵活和constomized的方法。
    确保已经安装了软件包

    运行"。/tcpdive。sh -h"以查看tcpdive的帮助信息。
    请注意,有两种日志格式支持:检查日志文件以获得更详细的信息。

    USAGE:
    . /tcpdive.sh [options] [modules] [filters]
    OPTIONS:
     -h # show help
     -V # show version
     -v # verbose mode for debugging
     -t <sec> # stop itself after running specified time
     -m # compile as tcpdive.ko instead of running directly
     -d # detailed logging instead of default format
    MODULES:
     -L # Loss and Retransmission
     -H # HTTP Performance (1.0/1.1)
     -C # Congestion Control
     -A <num> # Advanced CC (depict <num> critical points)
     -R # Monitor Reset Packet
    FILTERS:
     -l <msec> # lifetime of connection should greater than <msec>
     -i <msec> # trans time of response should greater than <msec>
     -s <num> # take one sample from <num> connections
     -p <ports> # server ports cared, use comma to separate
     -f <laddr>:<lport>-<raddr>:<rport> [-f <...>] # should be last
     eg. -f *.*.*.*:80-10.210.136.*:*

    1.直接运行

    直接编译并运行,如果未指定-t选项,则使用Ctrl+C停止。 下面是一些例子。

    ./tcpdive.sh -L -t 60//or
    ./tcpdive.sh -d -L -H -p 80//or
    ./tcpdive.sh -v -L -H -C -f *.*.*.*:8080-10.210.136.*:*

    MODULE

    通过指定-m选项,我们可以获得名为 tcpdive.ko的MODULE,而不是直接运行。

    ./tcpdive.sh -L -t 60 -m//or
    ./tcpdive.sh -d -L -H -p 80,8080 -m//or
    ./tcpdive.sh -v -L -H -C -R -A 10 -m

    加载 tcpdive.ko 并在后台运行 tcpdive。

     staprun -D -o log tcpdive.ko//or
     staprun -D -S 500,20 -o log tcpdive.ko port_str="80,8080"

    要停止tcpdive的运行,请使用以下命令。

    ps aux|grep stap|grep tcpdive|grep -v grep|awk '{print $2}'|xargs kill

    。RPM方式

    若要在生产环境中部署 tcpdive,请使用 make_rpm.sh 插件配置和制作rpm包。

    sh script/make_rpm.sh

    安装rpm后,可以使用方便的方法。

    tcpdive {start|stop|status}

    性能

    我们主要通过比较系统资源的使用与否来评估 tcpdive。
    虽然tcpdive在一定程度上增加了CPU使用率,但对其他系统资源没有显著影响。 通常使用tcpdive的功能,如传输。丢失和重传和HTTP处理在以下测试中被启用。

    实验室

    Nginx的简要配置:

    • 工作号设置为CPU内核数,在我们的实验台中是 12.
    • HTTP保持存活对于短连接测试是禁用的。

    10-Gigabit网卡与绑定的tx/rx队列一起使用。 运行在客户机上的Http_load从 Nginx 获取 1KB 文件,以不同的并发度来改变服务器的CPU负载。

    下图展示了每个核心CPU使用量的增加和在不同情况下由tcpdive引起的QPS的衰减。

    Lab Evaluation

    上图显示tcpdive的每个核心CPU消耗小于 10%,而QPS没有显著影响,这在大多数情况下是可以接受的。 但是,对于每个核心CPU使用已经非常高的情况,建议使用 tcpdive,因为QPS将减少大量的空间来为服务器提供空间。

    在线

    如上所述,tcpdive已经部署在新浪的生产环境中。
    一个典型的场景是在HAProxy服务器上使用 tcpdive,它充当图像服务的负载均衡器。
    下图显示了 24-core 服务器在 24小时内的核心CPU使用率的波动。
    两个 10-Gigabit 网卡与它们的tx/rx队列一起使用。

    Online Evaluation

    基于月份观测,我们结论tcpdive在生产环境中足够稳定且足够鲁棒。

    联系人

    博客:zhangskd.com
    电子邮件:zhangskd@gmail.com

    如果你有任何问题,请在我的博客上留言或者发邮件给我。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语