注:本译文出自15多年前,尚未用最新软硬件平台进行重新测试,只提供方法论层面的参考,具体性能指标不具备参考意义。

多个PVSS数据点属性读写的优化处理

本文档概述了测试三种读取和写入多个PVSS数据点属性方法速度的结果。原文:https://edms.cern.ch/ui/file/1076836/1/fwConfigsPerformanceAttributes.pdf

目标

这些测试的目的是找到读取和写入大量数据点属性的最快方法。

被测试的三种方法如下:

方法1

一次读取/写入数据点属性。这是通过多次调用dpSetWait 或dpGet 函数来实现的:

dpSetWait(string dp1,< type1 > var1);

dpGet(string dp1,< type1 >&var1);

方法2

一次读取/写入所有数据点属性。这是通过用属性和值的动态数组调用dpSetWait 或dpGet 来实现的。

dpSetWait(dyn_string dpnames,dyn_anytype values);

dpGet(dyn_string dpnames,dyn_anytype&values);

方法3

一次读取/写入所有数据点属性。这是通过调用dpSetWait 或dpGet 来实现的。这与方法2的不同之处在于它不使用动态数组。

dpSetWait(string dp1,<type1> var1,string dp2,<type2> var2,string dp3,<type3> var3,

...

string dpN,<typeN> varN);

dpGet(string dp1,<type1>&var1,string dp2,<type2>&var2,string dp3,<type3>&var3,

...

string dpN,<typeN>&varN);

方法2和3的优点在于,无论您希望编写/读取多少属性,dpSetWait 或dpGet 函数都只会调用一次。使用方法1时,函数会被调用多次,因为要设置属性。测试这些方法背后的动机是调查哪种方法提供了最快的结果。

预计通过只调用一次函数,读/写操作的开销就会减少,并且应该更快地执行。

测试程序

所描述的所有三种方法都用不同数量的属性进行测试。要写入/读取的属性数量为:

测试序号 属性的个数
1 1
2 10
3 100
4 500
5 1000
6 2000
7 3000
8 4000
9 5000
10 6000
11 7000
12 8000
13 9000
14 10000

重复测试以读取和写入两个不同的数据点属性。

第一个属性:   _smooth .._ type

第二个属性: _original .._value

编写一个CTRL脚本来自动运行方法1和方法2的测试。这些测试的结果输出到文件进行分析。

方法3的测试无法轻易实现自动化,因为脚本总是为每个新数量的属性进行重新编码以进行读取/写入。避免使用evalScript(),因为使用这个函数可能改变获得的结果。

测试重复3次,结果取平均值以尽量减少发生的任何随机波动的影响。

由于第一个属性(_smooth .._ type )与数据点配置有关,决定在写入属性时测试两个不同的值。这两个值写成如下:

第一个值:         DPCONFIG_SMOOTH_SIMPLE_MAIN

第二个值:        DPCONFIG_NONE

这样做是为了查看发送一个创建配置的值与删除配置的值之间是否存在显着差异。

对于第二个属性(_original .._ value ),只写入了一个值。这是从rand()函数的值中生成的浮点值。

结果

_smooth .._type 属性

上图显示了通过设置DPCONFIG_SMOOTH_SIMPLE_MAIN 的_smooth .._ type 属性添加许多平滑配置的结果。

首先,注意到方法2和方法3之间的性能差别很小。

可以看出(特别是在右侧显示的较小值的细节中),只涉及dpSetWait 函数(方法2和3)的一次调用的方法对于少量属性更快。但是,对于大量的属性,方法1显着更快。

有人指出,方法1所用的时间随着要设置的属性数量线性增加。而方法2和方法3所花费的时间似乎随着属性数量增加到约2的幂(与≈N 2成比例)成比例地增加。方法1变得最快的点位于正在写入3000个属性的位置。

上面的图结果显示,用于通过设置DPCONFIG_NONE 去除许多平滑CONFIGS _smooth .._类型属性。

从这些测试中获得的结果与添加配置的结果非常相似(如前所述)。

上图显示了读取_smooth .._ type 属性的结果。

对于方法1,读取属性所用的时间与写入属性所用的时间相似。方法2和3阅读属性比写作速度快得多。

与之前方法1相比,其他方法对于少量属性的速度要慢,但对于更多属性,它比其他方法稍快。这一次,方法1成为最快方法的地方大约有8000个属性。

再一次,很明显,方法1遵循线性增长模式,而方法2和3所需的时间与属性数量(N 2)的平方成比例地增加。从这种模式推断,可以预测,在属性数> 10000的情况下,方法2和3将再次变得比方法1慢得多。

_original .._value属性

由于测试这些方法需要大量时间,因此决定方法3不会使用_original .._ value 属性进行测试。从早期的结果中可以看出,它的性能与方法2非常相似。

写入_original .._ value 属性的结果再次遵循_smooth .._ type 属性显示的趋势。写入原始.._值属性的时间比平滑配置属性更快。

方法1成为最快的方法的地方大约有5000个属性。

再次,方法2所花费的时间按比例增加到大约N 2,并且对于较大数量的属性而言变得比方法1慢得多。

当从_original .._ value 属性获得值时,与其他测试不同,方法2在整个过程中速度最快。

该属性的值被缓存在事件管理器中,并且可以很快读回。从收集的数据中不清楚方法2所用的时间是否与N 2成比例地增加。无论哪种方式,从收集的数据来看,对于大于10000的属性,方法2似乎会比方法1快得多。目前>> 10000的情况还不清楚哪些方法的属性数量会更快。

注意:

测试运行的系统是运行Windows XP的1.4GHz Athlon和256MB RAM。被测试的PVSS版本是PVSS 3.0 RC 1。

测试在具有1GB RAM的2.4GHz Pentium 4机器上重复,再次运行Windows XP,但是这次使用PVSS 3.0 Beta。所得到的操作时间更快,方法2和方法3的性能优于方法1,但性能更高。但是,模式仍与原始测试结果相同(方法1 - 线性,方法2和3 - 多项式)。

结论

预计使用一个dpSetWait 或一个dpGet 函数调用来写入或读取多个属性会比逐个执行更快。

对于较小数量的属性,情况就是这样。方法2和3明显比方法1更快。

然而,由于方法2和方法3所花费的时间与属性数量的平方成正比地增加,在几乎所有情况下,这些方法比读取/写入10000个属性的方法1要慢。

对未来的疑问

是否有推荐的解决方案来读取或写入大量的属性?

为什么方法2和方法3需要多项式时间(在这种情况下与N 2成比例)?如果这些方法可以像目前少数属性一样快并显示方法1的线性行为,那么这将提供一个非常快速的解决方案。

多个PVSS数据点属性读写的优化处理的更多相关文章

  1. EF CodeFirst系列(4)--- 数据注释属性

    EFCodeFirst模式使用的是约定大于配置的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型.然后我们也可以通过配置领域类来覆盖默认约定. 覆盖默认约定主要用两种手段: 1.数据注释属 ...

  2. 数据处理:2.异常值处理 & 数据归一化 & 数据连续属性离散化

    1.异常值分析 异常值是指样本中的个别值,其数值明显偏离其余的观测值.异常值也称离群点,异常值的分析也称为离群点的分析. 异常值分析 → 3σ原则 / 箱型图分析异常值处理方法 → 删除 / 修正填补 ...

  3. 在Delphi中调用"数据链接属性"对话框设置ConnectionString

    项目需要使用"数据链接属性"对话框来设置ConnectionString,查阅了一些资料,解决办法如下: 1.Delphi 在Delphi中比较简单,步骤如下: 方法1: use ...

  4. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定

    Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...

  5. Python基础 | 数据文件的读写

    目录 txt txt的读入 txt的写出 csv xls\xlsx 在线网页数据 常用的工具 爬虫的步骤 pdf pdfrw PyPDF2 提取文档信息 word文档 其他统计软件生成文件 本文总结使 ...

  6. 在 Istio 中实现 Redis 集群的数据分片、读写分离和流量镜像

    Redis 是一个高性能的 key-value 存储系统,被广泛用于微服务架构中.如果我们想要使用 Redis 集群模式提供的高级特性,则需要对客户端代码进行改动,这带来了应用升级和维护的一些困难.利 ...

  7. 营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理

    摘要:你知道吗,MySQL在实际工作时候的两种数据读写机制? 本文分享自华为云社区<MySQL日志顺序读写及数据文件随机读写原理>,作者:JavaEdge . MySQL在实际工作时候的两 ...

  8. 详解Oracle数据货场中三种优化:分区、维度和物化视图

    转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...

  9. [转帖]etcd 在超大规模数据场景下的性能优化

    etcd 在超大规模数据场景下的性能优化   阿里系统软件技术 2019-05-27 09:13:17 本文共5419个字,预计阅读需要14分钟. http://www.itpub.net/2019/ ...

随机推荐

  1. 使用Kubeadm部署Kubernetes1.14.1集群

    一.环境说明 主机名 IP地址 角色 系统 k8s-node-1 192.170.38.80 k8s-master Centos7.6 k8s-node-2 192.170.38.81 k8s-nod ...

  2. Docker实践之01-入门介绍

    目录 一.Docker概述 镜像 容器 仓库 二.安装Docker 1.在CentOS上安装Docker 2.在Ubuntu上安装Docker 3.启动docker 4.建立Docker用户组 5.测 ...

  3. 微信小程序button组件样式

    点击微信按键组件才能出授权,所以自定义样式就是必须的了,来自网友的帮助,如下图 <button class='btn1' open-type='contact'> <image cl ...

  4. IIS 常用命令

    Ø  简介 本文主要介绍 IIS 常用的命令,主要包含以下内容: 1.   IIS  重启方法 2.   站点重启方法 3.   应用程序池重启方法 1.   IIS 重启方法 1)   重启 IIS ...

  5. BUAA-OO-电梯调度

    BUAA-OO-电梯调度 1.设计策略 需求分析 设计一个系统,使其可以根据乘客的当前楼层和目的楼层,为乘客分配电梯资源并运送其至目的楼层. 自顶向下 根据需求,可以将整个系统分成三个部分: 处理乘客 ...

  6. spring.http.multipart.maxFileSize提示无效报错问题处理

    在SpringBoot项目中,配置spring.http.multipart.maxFileSize用于限定最大文件上传大小. 但是,SpringBoot版本不同,关于这一块的配置也不相同. 1.Sp ...

  7. P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    对于一个牛,它存在两种状态:1.处于联通分量 2.不处于联通分量.对于处于联通分量的牛,求出联通分量的大小:对于不处于联通分量的牛,求出其距离联通分量的路程+联通分量大小. 不同的联通分量,染上不同的 ...

  8. 在NOARCHIVELOG和ARCHIVELOG模式之间选择

    本节介绍在选择以NOARCHIVELOG或ARCHIVELOG模式运行数据库时必须考虑的问题,并包含以下主题: 在NOARCHIVELOG模式下运行数据库 在ARCHIVELOG模式下运行数据库 是否 ...

  9. Mathematica 2

    如今的数值分析,如果没有高等代数的基础,都不好意思打招呼说自己是 "有数学基础". 高等代数,解决问题的一大神器. 1,初等变换 2,特征值 | A-λE | = | λE - A ...

  10. 示波器X1探头和X10探头

    示波器探头有X1和X10档,当测量一个信号时应该如何选择? 1.先我们看它们的区别? X1档,表示信号没有经过衰减进入示波器 X10档,表示信号衰减10倍进入示波器(当示波器也设置为X10档,直接读数 ...