注:本译文出自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. TERADATA SQL学习随笔<一>

    此博客内容简介及目录 http://www.cnblogs.com/weibaar/p/6644261.html 最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目 ...

  2. vue父子组件生命周期执行顺序

    之前写了vue的生命周期,本以为明白了vue实例在创建到显示在页面上以及销毁等一系列过程,以及各个生命周期的特点.然而今天被问到父子组件生命周期执行顺序的时候一头雾水,根本不知道怎么回事.然后写了一段 ...

  3. robotframework导入测试库使用方法

    1.新建一个测试库 course_mgr.py,存在一个函数listCourse 2.新建RF测试用例使用listCourse关键字 导入测试库如下方式 course_mgr若存在上级目录,则需要加上 ...

  4. PLSQL Developer导入dmp文件,一闪而过

    在导入数据的时候,一闪而过,也没有任何报错信息. 在环境变量里添加ORACLE_HOME=D:\app\product\11.2.0\dbhome_1就行,此路径是指oracle安装路径.我是用这种方 ...

  5. JavaScript的Document ,Histroy,Location对象

    1.  Document对象: a)         属性: 名称 描述 alinkColor 设置或检索文档中所有活动链接的颜色 bgColor 设置或检索 Document 对象的背景色 body ...

  6. L1-Day5

    1.他偷了那个装满钱的书包. [我的翻译]He stole the bag full of money. [标准答案]He stole that school bag full of money. ( ...

  7. 「luogu4462」[CQOI2018] 异或序列

    「luogu4462」[CQOI2018]异或序列 一句话题意 输入 \(n\) 个数,给定\(k\),共 \(m\) 组询问,输出第 \(i\) 组询问 \(l_i\) \(r_i\) 中有多少个连 ...

  8. JavaScript 事件委托详解

    基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click.keydown......)的函数委托到另一个元素: 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事 ...

  9. Linux查看显示编辑文本文件

    1:cat -bash-4.1$ cat --help 用法:cat [选项]... [文件]... 将[文件]或标准输入组合输出到标准输出. -A, --show-all           等于- ...

  10. 【算法】Attention is all you need

    Transformer 最近看了Attention Is All You Need这篇经典论文.论文里有很多地方描述都很模糊,后来是看了参考文献里其他人的源码分析文章才算是打通整个流程.记录一下. T ...