對我當前工程進行全部測試需要花費不少時間。既然有 26 GB 空閑內存,為何不讓其發揮余熱呢? 可以通過把文件系統保存在大內存中來加速測試的執行效率。
但優點也是缺點,tmpfs 只把結果保存在內存中,所以你必須自己編寫腳本來把結果回寫到磁盤上進行保留。而且這些腳本必須良好書寫和執行,否則就要失去部分或全部的工作成果了。
一種常見的方法是直接在tmpfs文件夾中工作,然后把工作成果備份到磁盤上的一個文件夾中。當您的機器啟動時你從那個備份文件夾恢復tmpfs文件夾。啟動之后用cron同步tmpfs文件夾和磁盤文件夾。
我發現這個設置有點復雜容易出錯。在啟動的時候,或者對于crom,我從沒有真正的相信?,F在我用一種簡單得多的設置,根本不用cron。
在我的機器上運行一個單項測試,使用IDE并發布于web服務器,其性能通常是合理的,只有運行全部測試需要許多時間。
我發現最佳之處是在磁盤上設置一個workspace,與/dev/shmand目錄下運行所有測試的tmpfs同步。這或多或少使我的設置無需改變,并消除了可能松散的工作,這些僅僅是因為我在正確設置方面太垃圾了。
性能提升的結果是合理的:
$ nosetests && run_tests.py........................................................................................................................................................................................................................................................----------------------------------------------------------------------Ran 248 tests in 107.070sOK........................................................................................................................................................................................................................................................----------------------------------------------------------------------Ran 248 tests in 19.423sOK
現在比原來提高了 5 倍速度。
使用 python 來進行設置非常簡單:
#!/bin/bash -eWORK=src/pyLOG=$(pwd)/test.logTARGET=$(hg root)SHADOW=/dev/shm/shadow/$TARGETdate > $LOGmkdir -p $SHADOWcd $SHADOWrsync --update --delete --exclude=".*" --exclude=ENV --archive $TARGET ./..if [ ! -d ENV ]then virtualenv ENVfi. ENV/bin/activatecd $WORKpython setup.py develop >> $LOGnosetests $* | tee -a $LOGexit ${PIPESTATUS[0]}
我只要重復同步到/dev/shm目錄,設置測試環境(virtualenv and python setup.PY)和運行測試(nosetests)。
在tmpfs文件夾里仍可用命令行運行單個測試。也可以把這個從你的IDE中踢走,但你會失去你的測試運行和調試的能力。如我之前所說,我現在不需要這些。
我希望我對tmpfs的這個變通使用能幫助你建立一個更快速的開發環境,而無須遭受所有的腳本麻煩。
新聞熱點
疑難解答