实时数据采集系统设计与实现
数据采集组
实时数据采集系统设计与实现
TM
汇 报 人 : 黄文君 导 师 : 王华忠
2012-11-16
初 步 方 案
TM
目录
后续计划 系统实现 系统设计 需求分析
数据存储形式在聚变领域更国际化,易访问 Mdsplus:存储数据多样化;多语言访问;存储效率高 数据存储访问更实时,高效
原始dat文件
buf(Flag_c++)->存储起来 V(prod_sem)//cons_sem++
核心代码: 封装了三个信号量操作
存储模式修改 -生产者/消费者代码
采集线程
存储线程
存储函数修改
新函数特点: 优点: 存储数据的同时,存储了时间。无需像以前需提前存储时间轴 通过DIM_OF命令就能拿到时间,就能拿到缩略数据 代码足够简单,增大了服务端代码的移植性 缺点: 速度稍微慢了些(0.5MB,0.026948变到了0.04s),但是由于存储 模式的修改,影响不大。只是稍微增大了延时时间。
-生产者/消费者模式分析
我不是 龟速!
存储模式修改
生产者
消费者
Flag_p = 0 P(prod_sem)//prod_sem— 产生数据->buf(Flag_p++) V(cons_sem)//cons_sem++
信号量: prod_sem=m cons_sem=0
Flag_c= 0
P(cons_sem)//prod_sem—
消费者
Occupied(5s-10s)(20s-25s)
双缓冲模式:
存储模式修改 -双缓冲模式性能分析
分析1:当采用双缓冲时,如果消费者速度慢,Occupied数据没拿走,生产者又 写数据进去了,那数据丢失了。如果多缓冲,那生产者,消费者每次检查缓冲数 据过多,代价更大 分析2:两者都需要时刻主动循环检查缓冲区状况,这样浪费计算机资源,盲目性 比较大 分析1 : (具体分析)以每台服务器承担两台采集机而言: 每个通道大小:250K*5s*2B=2.5MB 服务器承载数据量大小为2.5MB*100(通道数/台)*2台=500MB
再将服务端程序与其它型号采集机进行调试,完善服务端程序。
10/4/2018
Thank
缩略数据代码细节
10/4/2018
存储模式修改 -细节修改
1:多进程调用比多线程调用,并发存储速度要快。所以将原来的多线程 程序改成现在的多进程
2:利用mdsplus的分布式特性,将east树的脉冲树的写入,转换成对多 颗子树(east_ts1,east_ts2..)的单独写入,减少并发性
3:时间片拼接机制 由于理论上每片60MB时Mdsplus读写性能最好,但是由于采集卡限制, 实际中每片数据量250K*2s*2B=1MB;将小时间片拼接成一个更大的buf (内存);时间片选择更加灵活 4:为了提高服务器端代码的通用性,在采集端将数据重新组装好,服务 端只需存储数据,无需理解采集端
缩略数据修改
存在的必要性:类似于google Map(先显示信号整体趋势[2000个点],再细看)
SetTimeContext(起,终,(终-起)/2000) DIM_OF MdsValue(时间) MdsValue(数据) Build_signal(数据,时间)
解决方案:用空间换时间。
单独存储缩略数据,供用户第一次访问;这样所有用户第一次访问数据(A001)时, 都不需要自己抽取数据,而只需要访问缩略数据(A001_s)即可 和以前不同点:尽量保持写数据进程的通用性,也为了提高写数据进程的速度。 将写缩略数据进程剥离出来,写数据进程每隔20s通过消息队列通知写缩略进程。 缩略进程就负责抽取数据;然后写数据进程继续工作,不影响写数据进程速度。
1:目前,采集存储模块基本搭建完毕。
采集控制台,主控制模块(控制模型树重建+脉冲树简历),采集机程序, 服务器程序(主存储程序+写缩略数据程序)初步运行正常
2:下一步: 首先对采集存储模块进行压力测试(多台采集机对一台服务器),并 逐步完善采集存储模块; 然后将数据发布模块与采集存储模块组合起来,进行性能分析;
Compress算法
Lzo文件
Decompress算法
预期:为EAST的持续放电设计一套基于mdsplus的实时 数据采集系统 (系统要求:实时,高采样率,稳定)
10/4/2018
采集控制台
数据存储服务器
2000多道信号
①Request
MOVE
客户端 EastScope WebScope
数据发布服务器
以千兆网络端口(传输速度125MB/S),端口接收时间5s(但网络拥塞处理机制)
但是存储速度,每个通道大概0.04s~0.08s(<100MB/s),但是当并发程度大时, 会出现速度的不确定性(会出现5s内无法将所有通道数据存储起来)。双缓冲模 式没有缓冲存储机制,如果当前缓冲没有存储完毕,数据会被覆盖。
跨网段:所网,采集网
NAS数据存储
数据发布 模块
采集存储 模块
-分时间片机制+双缓冲
基本原理: 将整个长的时间片分成一段段的时间片,以时间片为 单位,这样就能实时看到某个时间片的数据,无需等到一炮 实验结束后,才能看到数据
。。。。 0~5s 5~10s 995~100s)(15~20S)