AmiBroker + RAMDisk: 让系统回测更快

Discussion in 'AmiBroker' started by espresso, Jul 22, 2010.

  1. 下面这个帖子的大部分内容来自下面这个帖子:
    用64位软件做系统测试和自动交易,大家对硬件有何建议?
    http://www.hylt.net/vb/showthread.php?t=28064

    单独整理出来方便大家参考。

    众所周知Amibroker是做系统回测最快的一个平台,最近随着64位系统和大内存的逐渐普及,不少朋友开始考虑升级自己的PC到64位系统。这里是我目前使用的一个方法,实践证明效果非常明显,特地分享给大家,希望能为各位节省一点你最宝贵的资源:时间。 :D

    先介绍一下内存硬盘,其基本原理很简单,就是从内存里面划一块,然后虚拟成一个硬盘,实现和硬盘完全一样的功能,因为所有的读写操作都转化成内存读写,其速度非常快。

    使用内存硬盘唯一的缺点是突然掉电之后就完蛋。关机前必须把上面需要保留的文件拷贝回硬盘,要不一关机就全部丢失了。

    到底内存硬盘有多快呢?看具体的数据。

    另,如果你google “RAM disk”的话,会找到有很多,其中不少是收费的,但其实性能还没有免费的RAMDISK好。

    我用的是这个RAMDISK
    http://memory.dataram.com/products-a...ftware/ramdisk

    下面有一个12种RAM DISK的I/O性能比较链接,你可以看到我用的这个免费的RAMDISK (第6个)非常不错:
    顺序读写速度比普通硬盘(7200RPM)至少快20倍
    512K块读写读写速度快45-60倍
    4K碎块读写速度快230-520倍!

    这种速度上的差异,再加上amibroker的话,做系统回测可以说是最完美的组合。
    内存硬盘应该也可以和其他基于.net的平台一起使用,速度也可以提升,但是没有实验过,不知道具体效果。


    参考:12内存硬盘软件性能比较
    12 RAM Disk Software Benchmarked for Fastest Read and Write Speed
    http://www.raymond.cc/blog/archives/...d-write-speed/
     
  2. 进入下一个主题之前再来个小热身,喜欢网上看电影和连续剧,喜欢p2p下载的朋友注意啦 ;)

    假设你的RAMDISK配置好了之后,把pps, pplive, emule这些P2P软件的工作目录转到内存硬盘上面,看电影和下载的速度倒是不一定有明显提升(因为这最终由你的网速决定),但关键是减少非常多的硬盘读写,长期而言,对硬盘有很好的保护。

    下面让我们用 ramdisk 来提速 amibroker !!
     
  3. 下面的这个方法是在64位的Windows 7里面实现

    基本要求:64bit Windows 7 (至少Home Premium版本)+ 至少4GB内存

    *) 安装 VMware Server 2.0 (64bit)
    *) 用RAMdisk建一个1.5GB或者2GB的内存硬盘 (这个是关键 )
    *) 在VMware里面安装Windows XP (32bit),分配1GB内存(足够了),然后装一堆需要的软件,包括amibroker (32bit)
    *) 然后把Windows XP的工作目录定位到内存硬盘上面,这样的话,所有这个Windows XP上的I/O都变成在内存里面的操作了。
    *) 备份一个当前的Windows XP的镜像。

    然后你就可以在这个虚拟出来的Windows XP里面做任意的实验,即使你的这个XP因为任何原因坏掉,不必重新安装,只要把原来的备份重新装回去,一切又恢复如新。

    只要你的PC有足够资源,完全可以同时运行2,3个虚拟出来的Windows XP,然后里面装不同的实验环境。

    我自己PC上面的Windows 7里面非常干净,只有一些基本的软件,还有就是VMware。VMware Server非常好,而且是免费的。
     
  4. RAMDisk在32位Windows系统里面很难帮amibroker提速的主要原因是我们不能完全控制amibroker的工作目录,这样就不能把磁盘上的操作转到内存里面。

    但是在64bit的Windows里面,其最小内存是4GB,这样就可以借助VMware去虚拟出一个Windows XP,并把整个Windows XP虚拟机的工作目录放在内存硬盘上面,这就实现了把绝大部分磁盘操作都转到内存里面的目的。


    ========================================
    不过,上面的方法可能对于很多朋友而言有点过了,Amibroker即使不用任何的RAMdisk也是我所知道的做系统回测的最快的开发平台。;)
     
  5. *) 然后把Windows XP的工作目录定位到内存硬盘上面
    --是指那些XP的工作目录?还是指VM的工作目录,xp虚拟机的IO是不是都在VM的工作目录中?
     
  6. 网上有很多讨论,比如是否把windows的temp目录,paging file这些东西放到RAMDISK里面,最后的结论是最好不要这样,因为这些目录的用途太复杂,很多应用程序都把东西扔到temp目录里面,重启之后也试图去用,结果导致很多问题。paging file也是非常重要的wnidows系统文件,放在ramdisk上面就怕突然掉电。

    对于RAMDISK的用法就是越单纯,越简单越好,而且是要放那些可以丢失的临时文件。
    我就把pps的那个臭名昭著的1G的临时文件放在RAMDISK上面,下次重启之后,pps又自动建一个放在那里。 :D

    手工保存文件非常快,从RAMDISK拷贝一个1GB的文件到硬盘,最多不会超过10秒。
     
  7. espresso 兄真是热心,谢谢
     
  8. AmiBroker 是利用数组方式对数据进行处理。在回测的时候,数据变成数组的话,应该就已经读入内存了吧?

    需要确定瓶颈在哪里,才能作出提高的应对。AmiBroker 的IO可能不是主要因素。
     
  9. How does vmware compare with virtual box?
     
  10. it should be comparable. I've been enjoyed vmware for quite a while. don't bother to change it. :)
     
  11. 其实都差不多。我现在也不怎么用vbox了,更多的用kvm。
     
  12. I've been using vbox but it's not quite perfect, so I did a quick research on vmware. Looks like vmware server is discontinued and the currently free version is vmware player 3.0.

    http://vmfaq.com/entry/5/
     
  13. 多谢Funnymentals 的链接,vmware的产品是非常好,但是它的产品线的确是有点让人迷惑。

    vmware player是免费的,面向普通桌面应用,支持3D加速的虚拟环境,如果要获得一些更多功能的话,再花$189升级成vmware workstation

    vmware server是免费的,面向企业服务器级的虚拟环境,如果要获得企业级vmware vSphere的话,就再花$$$$。

    你给的那个链接非常详细,但是说server 2.x不是很准确,它其实指的是vCenter,现在被vSphere取代了....VMware到2013年终止对vCenter 2.x 的技术支持,对2.5的支持到2015年。这不是vmware server。

    放心吧,用vmware server不会错,世界500强几乎都部署了vmware的产品,这么多公司给你买单让vmware继续研发,vmware放这些免费版本出来一是打击竞争对手,而是培养潜在用户,它一点不会吃亏的。而且这些免费版本都能升级到收费的虚拟环境中,在性能和可靠性方面一点都不含糊。
     
  14. vmware现在还把ESXi也免费了,以前是收费的产品。这个东西可以直接安装在裸机上(没有任何OS,比如windows, linux),然后在ESXi上面再虚拟出其他的操作系统....算了,说这个太跑题了,和自动交易,交易系统不沾边,而且也不是我的重点。

    我自己用vmware server就足够了。:)
     
  15. vmware 或者别的虚拟机能不能把几台独立的PC虚拟成一台机器?
    我知道用集群方式可以这样做,现在问如果虚拟机方式能不能这样?虚拟机方式如果能,可能设置和管理方面都更简单。
     
  16. 假如你配置1GB内存给winxp,然后让winxp在vmware中启动,vmware就会在指定的工作目录中创建一个1GB的文件以和winxp的内存对应。我说的就是把这个1GB的磁盘文件放在内存硬盘中,这样就把对应于磁盘IO都放在了内存里面。

    这么说估计你还是不能全明白,;) 如果你有兴趣的话,先把vmware装起来(网上很多资料,随便一搜就一堆),然后把winxp在vmware里面运行起来,大概就明白我说的啦
     
  17. gzpony兄怎么想要在vmware里面模拟集群?的确是可以的。windows/linux集群都可以。
    但是设置和管理不是更简单,而是有点复杂了。

    另,不能把独立的物理pc虚拟成一台机器或者一个集群(这需要硬件的支持,比如SAN),但是像刚才说的,可以把几个虚拟的pc做成一个集群。
     
  18. 呵呵,是好奇问问。

    看到有时候,要是购买速度为1倍处理速度的PC,要付出的价钱往往要超出1倍以上,可能是几倍才行。
    所以突发奇想,要是几台速度低点的PC用虚拟化捆绑起来使用,也许更好?
    而很多软件不支持集群,要是虚拟化后看起来像是一台PC,那软件都能支持了。
     
  19. 明白,谢谢:)
     
  20. 没这么简单。两台电脑之间的连接速度远低于电脑内部的总线速度。
    在集群世界里面,1+1一般都是<2,如果弄不好,<1都是可能的。
    一般1+1如果能达到1.9,就算是非常好的成绩了。