从以太网捕获数据分析后原始数据文件保存入文件。现在的设计是:1、线程1负责捕获,尽快的从数据源捕获数据,有自己的内核级buffer、用户级数据buffer(20MB)
2、线程2负责处理,从线程1读取数据,处理速度非匀速,由于数据的不确定性,这里微观上可以认为是不均匀的
3、线程3负责File写盘,根据线程2提交的数据缓存到一定数量(1~3MB)后写入
各个线程之间使用CRITICAL_SECTION、EVENT进行同步控制。在大数据量情况下始终觉得性能不是很好,具体可能的瓶颈不在捕获和处理这里。但又对于文件写入这块的设计不得要领,始终觉得有那么一层窗户纸没有突破。请教各位DD指教,分析各种方案的效率和场景。

解决方案 »

  1.   


    问题还没有定位。现在的处理是从硬盘读取文件然后处理再写回硬盘新的文件,所以涉及到read and write,具体的硬盘IO性能肯定是有所下降的,每分钟处理数据最好能够达到2~3GB的性能,硬盘考虑采用HDD ARRAY RAID 0配置。我现在在台式机以及笔记本上测试都感觉性能似乎没有达到一个较为理想的程度,所以一直想理理这块的设计实现思路优化下。由于测试环境限制,不能到真实的环境里面测试。现在我的怀疑是,两个线程之间的数据交接有问题,线程切换或者别的?我也不太清楚。有点头昏。如果从理论层面分析,目前的方案先请DX看看。
      

  2.   

    要提高读写效率主要是集中读和集中写,读或写中间不要穿插,每次读或写数据量越大越好,你需要考虑一下系统的物理内存情况,合理分配缓冲区大小。按目前的硬盘性能来看,使用FILE_FLAG_NO_BUFFERING标志打开文件,每次连续读或写500MB左右数据,在基本无碎片的情况下,用两块硬盘RAID0可以达到每分钟2GB以上的复制(读出再写入)速度。