cov/cor中有遗漏值

在这篇文章中,我演示了许多想法和技术:

  1. 如何编写一个简单的非阻塞NIO客户端/服务器
  2. 协同遗漏的影响
  3. 如何测量百分位数的延迟(相对于简单平均)
  4. 如何在计算机上计时延迟回送

我最近正在为客户端服务器应用程序开发低延迟基准。 最初,我是在使用环回TCP的单台计算机上模拟基准测试。 我要量化的第一个指标是允许简单的环回延迟需要多少记录的延迟。 这样,我便可以更清楚地了解实际应用程序增加的延迟。

为此,我创建了一个程序(文章末尾的代码),该程序将一个字节从客户端传输到服务器,然后再传输回来。 重复执行此操作并处理结果。

该程序是使用非阻塞Java NIO编写的,以尽可能优化环回延迟。

比记录平均时间更重要的是,记录了百分比延迟。 (有关如何测量延迟的讨论,请参见此处的上一篇文章)。 至关重要的是,协调遗漏的代码因素。 (要了解更多关于此看到这里从吉尔·特内)。 简而言之,您不必从开始就开始计时,而应该从开始就开始计时。

这些是我2岁的MBP的结果。

Starting latency test rate: 80000
Average time 2513852
Loop back echo latency was 2514247.3/3887258.6 4,196,487/4,226,913 4,229,987/4230294 4,230,294 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 70000
Average time 2327041
Loop back echo latency was 2339701.6/3666542.5 3,957,860/3,986,626 3,989,404/3989763 3,989,763 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 50000
Average time 1883303
Loop back echo latency was 1881621.0/2960104.0 3,203,771/3,229,260 3,231,809/3232046 3,232,046 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 30000
Average time 1021576
Loop back echo latency was 1029566.5/1599881.0 1,726,326/1,739,626 1,741,098/1741233 1,741,233 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 20000
Average time 304
Loop back echo latency was 65.6/831.2 3,632/4,559 4,690/4698 4,698 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 10000
Average time 50
Loop back echo latency was 47.8/57.9 89/120 152/182 182 us for 50/90 99/99.9 99.99/99.999 worst %tile

将这些结果与我没有纠正遗漏的情况进行比较:

Starting latency test rate: 80000
Average time 45
Loop back echo latency was 44.1/48.8 71/105 124/374 374 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 70000
Average time 45
Loop back echo latency was 44.1/48.9 76/106 145/358 358 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 50000
Average time 45
Loop back echo latency was 43.9/48.8 74/105 123/162 162 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 30000
Average time 45
Loop back echo latency was 44.0/48.8 73/104 129/147 147 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 20000
Average time 45
Loop back echo latency was 44.7/49.6 78/107 135/311 311 us for 50/90 99/99.9 99.99/99.999 worst %tile
Starting latency test rate: 10000
Average time 46
Loop back echo latency was 45.1/50.8 81/112 144/184 184 us for 50/90 99/99.9 99.99/99.999 worst %tile

如您所见,吞吐量的影响被完全忽略了! 看起来,即使以每秒80,000条消息的速度运行,您的99.99个百分位数仍为374us,而实际上却远大于此。

实际上,只有在吞吐量接近每秒10,000时,您才能达到目标延迟。 如您所直观地理解的那样,在吞吐量和延迟之间需要权衡取舍。

此测试的代码如下:

package util;import java.io.EOFException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Arrays;/*** Created by daniel on 02/07/2015.* Simple program to test loopback speeds and latencies.*/
public class LoopBackPingPong {public final static int PORT = 8007;public void runServer(int port) throws IOException {ServerSocketChannel ssc = ServerSocketChannel.open();ssc.bind(new InetSocketAddress(port));System.out.println("listening on " + ssc);final SocketChannel socket = ssc.accept();socket.socket().setTcpNoDelay(true);socket.configureBlocking(false);new Thread(() -> {long totalTime = 0;int count = 0;try {System.out.println("Connected " + socket);ByteBuffer bb = ByteBuffer.allocateDirect(1);int length;while ((length = socket.read(bb)) >= 0) {if (length > 0) {long time = System.nanoTime();bb.flip();bb.position(0);count++;if (socket.write(bb) < 0)throw new EOFException();bb.clear();totalTime += System.nanoTime() - time;}}} catch (IOException ignored) {} finally {System.out.println("Total server time " + (totalTime / count) / 1000);System.out.println("... disconnected " + socket);try {socket.close();} catch (IOException ignored) {}}}).start();}public void testLatency(int targetThroughput, SocketChannel socket) throws IOException {System.out.println("Starting latency test rate: " + targetThroughput);int tests = Math.min(18 * targetThroughput, 100_000);long[] times = new long[tests];int count = 0;long now = System.nanoTime();long rate = (long) (1e9 / targetThroughput);ByteBuffer bb = ByteBuffer.allocateDirect(4);bb.putInt(0, 0x12345678);for (int i = -20000; i < tests; i++) {//now += rate;//while (System.nanoTime() < now)//    ;now = System.nanoTime();bb.position(0);while (bb.remaining() > 0)if (socket.write(bb) < 0)throw new EOFException();bb.position(0);while (bb.remaining() > 0)if (socket.read(bb) < 0)throw new EOFException();if (bb.getInt(0) != 0x12345678)throw new AssertionError("read error");if (i >= 0)times[count++] = System.nanoTime() - now;}System.out.println("Average time " + (Arrays.stream(times).sum() / times.length) / 1000);Arrays.sort(times);System.out.printf("Loop back echo latency was %.1f/%.1f %,d/%,d %,d/%d %,d us for 50/90 99/99.9 99.99/99.999 worst %%tile%n",times[times.length / 2] / 1e3,times[times.length * 9 / 10] / 1e3,times[times.length - times.length / 100] / 1000,times[times.length - times.length / 1000] / 1000,times[times.length - times.length / 10000] / 1000,times[times.length - times.length / 100000] / 1000,times[times.length - 1] / 1000);}public static void main(String... args) throws Exception {int port = args.length < 1 ? PORT : Integer.parseInt(args[0]);LoopBackPingPong lbpp = new LoopBackPingPong();new Thread(() -> {try {lbpp.runServer(port);} catch (IOException e) {Jvm.rethrow(e);}}).start();//give the server a chance to startThread.sleep(1000);SocketChannel socket = SocketChannel.open(new InetSocketAddress("localhost", port));socket.socket().setTcpNoDelay(true);socket.configureBlocking(false);for (int i : new int[]{80_000, 70_000, 50_000, 30_000, 20_000, 10_000})lbpp.testLatency(i, socket);System.exit(0);}}

翻译自: https://www.javacodegeeks.com/2015/07/the-effect-of-co-ordinated-omission-measure-loopback-latency-using-a-simple-nio-clientserver.html

cov/cor中有遗漏值

cov/cor中有遗漏值_协调遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟...相关推荐

  1. 协同遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟

    在这篇文章中,我演示了许多想法和技术: 如何编写一个简单的非阻塞NIO客户端/服务器 协调遗漏的影响 如何测量百分位数的延迟(相对于简单平均) 如何在计算机上计时延迟回送 我最近正在为客户端服务器应用 ...

  2. python 彩票 遗漏值_荐Python遗漏知识点一

    Python笔记之遗漏 print('name:', user_name, '年龄:', user_age, sep ='|' , end = ' ') f = open("poem.txt ...

  3. web 折线图大数据量拉取展示方案_【第2010期】QQ音乐Android客户端Web页面通用性能优化实践...

    前言 今日早读文章由QQ音乐客户端开发工程师@关岳分享,公号:云加社区(ID:QcloudCommunity,腾讯云官方开发者社区)授权分享. 正文从这开始~~ QQ音乐 Android 客户端的 W ...

  4. IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认值改变为submit了。

    IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认值改变为submit了. 参考文章: (1)IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认 ...

  5. 七层网络性能基准测试中的协调遗漏问题--Coordinated Omission

    前言 在讲述这个问题之前首先我们先要搞清楚七层网络测试协议的几个关键性性能测试指标和通用的关系模型.其次搞清楚四层协议,七层协议中性能测试给出的时延讲述的是个什么东西.最后讲述为什么大部分的性能测试工 ...

  6. JLBH示例2 –协调遗漏的会计处理

    在这篇文章中: 在运行JLBH时考虑或不考虑协调遗漏 一个示例,以数字说明协同遗漏的效果 关于流量控制的讨论 这是我用来描述如果不考虑协调遗漏而进行测量的情况下的示例: 假设您正在等待火车,但由于前面 ...

  7. python计算文件md5值_用python 正确计算大文件md5 值

    python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...

  8. 用同一uuid作为两个字段的值_分库设计中的主键选择

    在先前的文章<又拍网架构中的分库设计>中,我有提到过MySQL分库设计中的主键选择问题.在这篇文章里我想对这个问题进行展开讨论,以此作为对上一篇文章的一个补充. 前面提到又拍网采用了全局唯 ...

  9. bat获取命令返回值_全网都在找的redis字符串命令,总结在这了

    概述 redis一般用来做缓存,可能很多朋友都没有深入去学习redis的相关命令,只是涉及到安装部署而已,所以今天主要总结介绍一下redis字符串的一些命令. SET 语法:SET key value ...

最新文章

  1. sublime python3中读取和写入文件时如何解决编码问题
  2. 没用调用flush导致的数据保存丢失
  3. 利用zookeeper实现发布订阅模式
  4. vim cscope taglist 使用
  5. Attribute鲜为人知的两个特性记录
  6. c语言判断是否是回文字符串
  7. 年味十足的喜庆红色新年春节海报PSD模板
  8. python利用tensorflow识别图形_表情识别与性别识别 实时识别模型附源代码 基于python的tensorflow与keras...
  9. ubuntu14.04安装显卡驱动(转载)
  10. linux 以某个用户执行,Linux下以其他用户运行程序
  11. [MySQL]触发器
  12. c语言程序设计爱心图片,c语言爱心图片表白程序源代码
  13. 基于MATLAB的基础图像分析
  14. Ubuntu 18.04下QFIL刷机
  15. lisp princ详解_LISP – 输入和输出
  16. [经验教程]2022年淘宝/天猫/京东/拼多多等电商购物618年中大促活动是什么时候开始领取超级红包及优惠券入口?
  17. 浅谈NAT(网络地址转换)原理 + 个人的思考
  18. SQL Server 数据分区管理
  19. Linux命令行与shell脚本编程之笔记(4)
  20. 2011国信蓝点(桥)杯C语言试题

热门文章

  1. CF453C-Little Pony and Summer Sun Celebration【构造】
  2. jzoj3236-矮人排队【权值线段树】
  3. codeforces855 C. Helga Hufflepuff‘s Cup(树形dp)
  4. K8S Learning(4)——Namespace
  5. SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置
  6. JS中令人发指的valueOf方法介绍
  7. 如何构建一套高可用的 APP 消息推送平台
  8. JAVA面试常考系列六
  9. Spring Enable*高级应用及原理
  10. 从零开发一个laravel项目的增删改查、详情