帮酷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  |  如果智培  |  酷兔英语