网络性能评价方法

网络性能评价的实现

网络的优劣会影响网络交互的延迟时间、稳定性和速度,从用户体验上集中表现为打开页面的速度缓慢。比如在较差的网络并发的请求数会被降低,以避免网络性能因为阻塞而进一步恶化。

针对不同网络品质的优化的前提就是要有一种方法来度量网络的品质。

目前度量网络的品质的方法如果仅以网络连接类型来区分,比如2G, 3G, Wifi等,无法有效感知到当时的网络状态。在同一网络连接类型下,网络的品质仍有大幅波动,可能会因为阻塞以及线路上问题导致延迟上抖动(jitter)、丢失数据包、数据包损坏等情况。在现实场景中,比如繁忙时段,或者处在信号不好的区域时(如交通工具上),使用网络类型来判断当时的网络品质会有很大偏差。

本文基于对一段时间的网络数据的记录,进行算法处理,可以测出一个衡量当时网络状态的指标(MI: Measurement Index)。具体应用到移动设备上时,考虑到计算量的问题,可以使用近似算法减小计算的复杂度。

目前的使用的算法是结合历史数据进行统计,即运行指数平滑算法。这样理论上因为同时使用了本次及之前的历史的数据进行计算,可以将单次统计的数据量减少。

网络数据的定义是通过模拟测试环境录制得来。其中包括两个主要内容:

1. 定义网络评测的参数

2. 定义网络状态区间范围

在实际应用时,还需要考虑数据采集的区间和数据量,以及数据的平滑处理。

网络评测的参数

经过对比评估以下六个参数对应于latency和bandwidth的设定,得到数据如下:

1. Speed, 传输速率:由收完数据的时间除去所收取的数据大小。

2. Header Received: 收到响应头的时间 (即TTFB)。

3. Connected: 连接到主机的时间。

4. Sent: 在Java层完成调用完成发送请求的时间。

5. DNS Resolved: DNS解析的时间。

6. Finished: 整个请求完成的时间。

对比分析各参数中位数与网络状态(rate)后,发现以下参数与网络状态的关联关系,其中Header Received的关联关系为正相关。

所以定义由Header Received时间定为网络衡量指标

定义网络状态区间范围

关于网络状态范围,由于网络的波动性,不能限定在具体的一个值的区分。这里使用K中值分类法(R Script: compareData.R)。

将数据分为四个簇,依次取出其设定范围。再以目前测试发现最大值分布在12000左右(约为6000延迟), 所以使用13000,即最大延迟数,进行归一化处理。

下图表示的为分为四个簇的情况(每一项数据为一个URL测试5次所得结果):

其中cluster 4最佳,cluster 1为最差的区间, 为保守起见,在目前的实现将cluster 1与cluster 2合并来看。

定义数据分析的时间段

依次采集分析2x1URL, 5x1URL,5x2URLs, 5x4URLs及3x1URL数据。对比各种情况下数据聚合的情况。其中2x1URL 表现数据不足,四个簇不能很好的分隔:

这时的每一项值的数据量为50条左右。

当3x1URL时,每一项值的数据量为80条上下,四个簇重合部分已经有很好的改善:

由上面可知,如果使用独立样本进行计算,50笔数据较难获得有效的样本数据,至少需要80笔数据,才能得出较合适的统计。而移动网络下,特别是2G网络下,80个请求会耗时太久,不利于及时体现当前网络数据。

目前的使用的算法是结合历史数据进行统计,即运行指数平滑算法。这样理论上因为同时使用了本次及之前的历史的数据进行计算,可以将单次统计的数据量减少。

定义数据的样本大小及采集周期

目前选定最小采集样本为15笔请求,包含失败的请求,其中失败的请求视为一次最大延迟记录(取值见上面的讨论)。 最小采集周期为30秒,最大采集周期为4分钟。

考虑到网络的变化特性,一是不能太快跳变,二是及时逼近。另外在移动网络下,数据量可能达不到采集的要求,必须有效地利用历史数据。所以系数的选择需要考虑到两个方面:一是收敛速度,二是兼顾历史数据(利用历史数据进行计算,并避免数据不准导致的误判。)。

这里存在三个变量: 采集的周期(t),采集的样本数(n)及平滑系数(a)。

采集样本数是指最小可以用于统计运算的数据数量。根据模拟测试(R脚本为simulatorPhase.R), 判断数据集的大小的波动性可以在平滑系数的辅助下达到一定的稳定性(平滑系数越小,数据分布越稳定,但收敛速度越慢.)。 比如下图中使用样本数15、平滑系数0.3的组合可以达到样本数20、平滑系数0.4组合的标准差范围。(平滑系数越大标准差越大!)

采集样本为20,平滑系数为0.4(总数据量4000),结果的标准差为579.87(非定值):

采集样本为15,平滑系数为0.4(总数据量4000),结果的标准差为589.16(非定值):

采集样本为15,平滑系数为0.3(总数据量4000),结果的标准差为576.41(非定值):

采集样本为15,平滑系数为0.6(总数据量4000),结果的标准差为872.23(非定值):

采集周期是指最小的数据采集时间,在此时间内只负责收集数据,不进行计算。在采集周期内可能并不会收集到足够的数据,就会延长到一个最大采集周期。

采集的周期的大小取决于最小采集样本的大小。目前设定为30秒。

最大采集周期的选定,取值于移动网络下,以无图模式一分钟浏览一个新浪新闻页面,达到采集样本数量的时间,即4分钟。

下图为上述参数在实际测试过程中观察到的Measurement Index分布的情况, 在数据演化将近6次(约3分钟)后维持到6385上下。

定义数据的平滑系数

不同的平滑系数会一个处理波动时的浮动范围,表示无法明确判别的区域,归为较好的网络处理。由此定义了实现时使用的模糊区间。

测试对比了多个候选的系数。以0.3及0.65为例说明如下。

平滑系数:0.3

指数0.3是假设网络环境相对稳定,但受网络抖动的影响会有波动。

在计算时选择经过多样本获得的历史数据的比重大于新取得的单样本数据。缺点是会造成逼近速度变缓, 近8次逼近到目标值(相差200以内)。

再模拟两次数据统计的波动。单次统计数据约为2000,若分成两次统计,可能会遇到一次3500,后一次500的大幅波动。应用系数0.3后统计结果保持在平均值2000的上下200的范围, 对应于指数上下浮动0.03。

以下为其示意图:

8次逼近所需时间视最小采集周期而定,一般情况下约为4分钟时间。

考虑大幅波动时的标准差,以3000~1500的波动为例,其标准差为:447.56。

系数0.3最大的优势在于适应小样本数据的情况。详细之前的讨论。为了弥补主要的缺点,将在一个网络下第一次计算时,先使用系数0.5, 再调整为0.3。效果如下:

以下为实际测试结果(latency:2000,bandwidth 80kbps, standard MI:~2500):

平滑系数:0.65

当选取0.65作为系数时,当前值所占的比重更高。需要3次运算逼近到设定值(130以内,占比小于1%)。

如上模拟两次数据统计的波动。这时统计结果保持在平均值2000的上下约800(逼近于777)的范围。即设定的界定值前后800对应于性能指数上下浮动0.06。

考虑大幅波动时的标准差,以3000~1500的波动为例,其标准差为:381.9。较系数取0.5时并没引入太多的误差,却将收敛所用的次数降低了2次。

与实际场景的对应

与现实场景的对应关系如下(收集的现场数据):

Scenario Latency Index
包含地铁繁忙时间的数据(2G) 500~6000 19~100
地铁一般场景(2G) 100~400 5~64
公司座位 200~500 32~52
3G&Wifi 50~80 0~4

下面为其分布示意图(横轴依次代表上表中的五项,请忽略第3项数据):

参考

时间: 2024-12-23 20:49:04

网络性能评价方法的相关文章

Android模拟器设置网络代理方法

在服务器上启动模拟器的时候加了--http-proxy,但是不起作用.所以搜了下面的方法 四种方法: 一:将网络连接代理设置写入配置数据库 (适合启动模拟器无界面) 1.通过命令行或者通过双击emulatoer可执行文件,打开模拟器 2.在命令行执行adb shell 打开android的控制台 (确保环境变量设置正确,即已经把Android_SDK/tools 添加到了PATH(Linux)/path(Windows)) 3.执行 ls -l /data/data/com.android.pr

iOS开发——网络请求方法汇总

在实际的项目开发中,连接网络是每一款App必不可少的基本功能.对于客户端的网络请求而言,无非是有两个实现方向:使用网络请求框架或者不使用网络请求框架.在这篇博客中,我将用苹果自带的网络请求方式(不使用第三方框架)下对iOS网络请求方法做一个汇总.我将在之后的博客中介绍使用AFNetworking框架进行请求的实现.代码已经上传至:https://github.com/chenyufeng1991/iOS-NetworkRequest   . [使用XML请求Webservice,可用GET或PO

Debian下配置网络的方法

1.网络配置 配置网卡修改 /etc/network/interfaces 添加如下 # #号后面是备注,不要添加哦! auto eth0 #开机自动激活 iface eth0 inte static #静态IP address 192.168.0.56 #本机IP netmask 255.255.255.0 #子网掩码 gateway 192.168.0.254 #路由网关 #因为我是通过路由上网的,所以配置为静态IP和网关 如果是用DHCP自动获取,请在配置文件里添加如下: iface et

通过335x wifi热点访问外部网络的方法

335x中wifi作为热点后,其他设备通过该wifi热点,可以访问外部网络的方法 大家好!首先,很高兴得到电子工程世界论坛和电鱼电子公司的支持,让我有一次宝贵的测评335x wifi热点的机会.然后,话不多说,让我们进入正题. 注意:前方高能!干货满满哦~ 1.335x前边已经移植好了hostapd:直接使用就可以 热点名为rtwap,密码为87654321 2.dhcpd 配置文件修改 创建空文件/var/db/dhcpd.leases mkdir -p /var/db touch /var/

SAIL-AM335x中wifi作为热点后,其他设备通过该wifi热点,可以访问外部网络的方法

今天与大家分享的是sail-am335x中wifi作为热点后,其他设备通过该wifi热点,访问外部网络的方法,具体的方法步骤如下: 1.335x前边已经移植好了hostapd:直接使用就可以热点名为rtwap,密码为87654321 2.dhcpd 配置文件修改 创建空文件/var/db/dhcpd.leases mkdir -p /var/db touch /var/db/dhcpd.leases 3.ifconfig eth0 up udhcpc -i eth0 ifconfig wlan0

中小型企业5种网络***预防方法

确定安全需求的基准对于面向小型企业销售的用于网络***防护的众多安全解决方案,企业所有者很容易不知所措.首先了解您的业务需求很重要,这样您才能知道需要哪种IT基础架构来满足这些需求.通过在IT和安全性支出上花钱,很容易浪费您的宝贵资源.了解哪些业务领域需要技术支持.这样,您将能够确定所需的软件和硬件.另外,知道您的数据将驻留在哪里.您将使用本地服务器还是云存储?从基础架构的清晰画面中,可以确定需要哪些安全解决方案来保护每个组件.如果您的小型办公室网络只有三个工作站,那么获取为大型企业构建的安全解

iOS学习之判断是否有网络的方法

在实际开发中, 会有这样一个需求: 用户在有网的状态下会直接从网络请求数据, 在没网的情况下直接从本地读取数据. 下边的方法可以判断是否有网络. - (BOOL)connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress

docker网络配置方法总结

docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这上面的其他网卡间自动转发数据包的虚拟以太网桥,它可以使容器和主机相互通信,容器与容器间通信.问题是,如何让位于不同主机上的docker容器可以通信.如何有效配置docker网络目前来说还是一个较复杂的工作,因而也涌现了很多的开源项目来解决这个问题,如flannel.Kubernetes.weave.

linux虚拟机网络配制方法及遇到问题的解决方法

linux虚拟机网络问题 刚安装一个vmware虚拟机,并在上面安装了一个redhat linux操作系统. 安装完后配制了下网络. 首先观察windows上的网络配制. ip:192.168.1.109 nemask:255.255.255.0 gateway:192.168.1.1 通过这些东西可以看出虚拟机也应该在同一个网段(192.168.1.0),同一个网关(192.168.1.1) 子网掩码当然也应该是255.255.255.0 配制方法分两种: 一.临时配制: 配制ip,子网掩码