性能指标

  • 带宽(Bandwidth):每秒收发的数据量,MB/s。(只关注数据量,不关注消息数)
  • 吞吐量(Throughput):消息/s、查询/s(QPS)、事物数/s(TPS)
  • 延迟(Latency):毫秒级延迟,百分位延迟
  • 资源使用率(Utilization):资源的利用程度(比例),如磁盘使用率、CPU使用率、额外开销(例如在拷文件时,需要实时压缩和加密产生的开销)
  • (Overhead)
    测试数据应小于Overhead,如果测试结果大于Overhead,则考虑可能有数据压缩
    如果远小于Overhead且CPU使用率很低,则考虑程序在网络带宽和CPU带宽是均不理想
    如果远小于Overhead且CPU使用率很高,则考虑程序在计算上消耗很大(例如SSH在拷文件时,数据加密涉及CPU计算)

为什么选择 TTCP

  • 使用了基本的sockets APIs:socket,listen, bind, accept,connect,read/recv,write/send,shutdown,close 等等
  • 协议带有格式,不只是字节流,相较于echo具有tcp分包处理等
  • ttcp 本身是由 tcp/ip 实现的程序,具有一些典型的行为。可以阅读其代码学习它的一些优秀实现
  • 协议简单,可以由多种语言实现,针对测试结果对比个语言实现的runtime开销
  • 无并发连接,client与server之间只有一个tcp socket

TTCP 使用的协议

  • SessionMessage:告诉服务器发送 1024 条数据,每条数据的长度是 8192 字节
  • PayloadMessage
    【length】:8192,表示第二个成员的 data 的长度
    【length本身占4个字节】:4
  • Ack(=8192)
    ttcp发送数据会有一个Ack应答(已经收到了 8192 个字节)
    相对于netcat只发送不接收而言,理论上讲ttcp检测出的带宽要慢于netcat测出的结果(收到 ack 才会发送下一个数据),特别对于网络有延迟的情况而言,发送数据和Ack都会有延迟产生

代码实现

  • 直线型的阻塞IO示例:
    muduo/examples/ace/ttcp/ttcp_blocking.cc (C with sockets API)
    recipes/tpc/ttcp.cc (C++ with a thin wrapper)
    muduo-examples-in-go/examples/ace/ttcp/ttcp.go (Go)

  • 非阻塞IO库示例:
    muduo/examples/ace/ttcp/ttcp.cc

  • 以上示例都不支持并发连接,前三个示例每个连接起一个线程来处理就可以支持并发,第四个在设计上收到最后一条消息就退出,将退出语句注释掉可以支持并发。

Linux C/C++网络编程实战-陈硕-笔记3-回顾基础的 Sockets API相关推荐

  1. Linux C/C++网络编程实战-陈硕-笔记20-使用非阻塞IO

    基于IO复用(非阻塞IO)实现的 netcat 使用非阻塞IO可以有效避免上述情况的发生.但非阻塞IO在编程上要比阻塞IO更难,并且在程序的维护上比较痛苦.一般使用非阻塞IO编程时建议使用一些封装好的 ...

  2. Linux C/C++网络编程实战-陈硕-笔记15-如何正确使用 TCP

    netcat netcat 除了读取 socket 描述符,还要读取 stdin 和 stdout 并发模型 thread-per-connection IO 复用和非阻塞 IO 配合 如何安全的关闭 ...

  3. Linux C/C++网络编程实战-陈硕-笔记10-网络时间同步

    网络时间同步(NTP)原理 Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1). 当此NTP报文到达Device ...

  4. Linux C/C++网络编程实战-陈硕-笔记2-一个TCP的简单实验

    实验环境 命令 dd命令: 用于读取.转换并输出数据. 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输出. 参数: if=文件名:输入文件名,默认为标准输入.即指定 ...

  5. Linux C/C++网络编程实战-陈硕-笔记11-Roundtrip代码分析

    代码 UDP, two threads recipes/tpc/roundtrip_udp.cc UDP with muduo, single thread muduo/examples/roundt ...

  6. Linux C/C++网络编程实战-陈硕-笔记17-多个版本的Netcat概览

    操作模式 对于 netcat 程序,存在两种模式,即 服务端 和 客户端, 它们的区别在于连接建立的方式. 一旦连接建立,客户端/服务器 的行为都是一样的,使用两个并行的循环处理: 从标准输入,写到 ...

  7. Linux C/C++网络编程实战-陈硕-笔记7-TCP自连接

    TCP 自连接 tcp连接两段使用了同一端口进行连接,而tcp并没有报错并且连接成功.即localhost:x --> localhost:x 只存在于 tcp 本地通信,而且客户端先于服务端启 ...

  8. 网络编程实践陈硕笔记零

    1.理查德森的unix网络编程有两样不足:一消息格式处理,特别是非阻塞IO上处理TCP分包问题:二是并发模型稍显陈旧,传统高并发采用事件驱动加非阻塞IO方式. 2.程序员面对的网络术语 Etherne ...

  9. 【网络编程实践--陈硕】学习笔记 | 汇总目录

    本文参考<网络编程实践>–陈硕(Muduo作者)视频课程所写.基于课程内容所做归纳和整理. <网络编程实战>配套页面:http://chenshuo.com/pnp Blog ...

最新文章

  1. Nginx源码分析:epoll事件处理模块概述
  2. c#)Excel常用格式操作
  3. linux 常用命令整理----链接文件
  4. Java程序员时刻铭记的Git常用命令
  5. 打破“创新困局”,让你的企业创意盎然的六个新角色
  6. android 状态栏、标题栏、屏幕高度
  7. 漫画科普:芯片是如何设计出来的
  8. PCIE总线-PCI、PCIE关系及信号定义
  9. 拼多多年货节上线,“百亿补贴”加码iPhone 12等产品
  10. Python面试题_中级版
  11. 如何使用bash / sed脚本删除文本文件的第一行?
  12. 时间序列分析及应用r语言pdf_R语言时间序列分析(十一):指数平滑法
  13. 用Linux编写简单的atm取款机系统,详细解析C++编写的ATM自动取款机模拟程序
  14. PC端后台管理系统实现
  15. 台式电脑主板插线步骤图_电脑主板跳线接法图文教程(安装过程)
  16. knockoutjs入门要点
  17. 双边滤波器和高斯滤波器
  18. “磁碟机”病毒详尽分析报告
  19. 74CMS4.1.2.4版本黑盒测试
  20. Excel怎么求和?5大常用的Excel求和公式

热门文章

  1. 【064】中国京剧戏考-京剧国粹的剧本、剧照、人物资料库
  2. 人贱人爱”漫画小夫妻 -《螺丝爱螺母》
  3. MPLS协议原理与配置详解
  4. 狂神JUC八种锁的理解
  5. css上滑事件,css transition 实现滑入滑出
  6. struct2cell
  7. 如何提取出一首歌曲的梅尔频谱
  8. 《从道法术器分层看待计算机科学与技术》
  9. Windows ftp、vsftp、tftp 客户端 登录与使用
  10. Enhancing Text-based Reinforcement Learning Agentswith Commonsense Knowledge