1. 程式人生 > >Vagrant共享目錄檔案系統sshfs、nfs、vboxfs、native fs效能比較測試

Vagrant共享目錄檔案系統sshfs、nfs、vboxfs、native fs效能比較測試

工作中使用vagrant作為開發環境,一直比較懶,直接用的預設方式共享目錄,但隨著專案越來越大,而且我的筆記本一般又不關機,都是直接合上,導致系統越來越慢,不但在guest中慢(比如切換目錄要1秒),連在host上開啟目錄也變得很慢。

終於有一天實在受不了,決定查查原因,網上看了很多文章,包括官網的文件,瞭解到大概有這樣幾種共享目錄的方式:

NFS、RSync、SMB、sshfs、vboxfs、unionfs

其中

  • RSync和Unionfs不是我的菜,因為它們是基於同步原理,同樣的檔案,host和guest中都得留一份。(當然我也沒配置成功,說是ssh無許可權,但我用預設私鑰ssh是正常的)
  • SMB也不是我的菜,因為它會留下一下匿名的共享賬戶,安全性很成問題(當然我也沒配置成功,只要設定type為smb,vagrant啟動時就會卡在啟動第一步:clean port什麼的)
  • nfs官方說明:NFS folders do not work on Windows hosts.不過有個外掛vagrant-winnfsd安裝一下就可以支援了。
  • sshfs資料很少,僅有的幾篇文章中說它的效能不錯。
  • vboxfs為預設的共享目錄檔案系統,都說效能很差,我日常應用時,如果長時間不重啟系統,也會覺得有點卡。

不過一直很少有看到對這幾種系統的效能作一個全面對比的評測。

所以我決定用幾個簡單的測試大體看看sshfs、nfs、vboxfs、native的效能到底有多大區別。

測試環境為:Vagrant 1.9.7, VirtualBox 5.1.26, 每次切換掛載的檔案系統前用df -T 檢視檔案系統,防止vb使用預設檔案系統掛載。

測試A:大量檔案及目錄的資訊讀取                         (命令:sync;time du -h /www

測試B:大量檔案及目錄的資訊讀取(warm)         (命令:sync;time du -h /www

測試C:大量檔案的內容讀取                                   (命令:sync;time ./read.sh

測試D:大量檔案的內容讀取(warm)                   (命令:sync;time ./read.sh

測試E:1GB連續檔案的寫入                                   (命令:sync;time bash -c "(dd if=/dev/zero of=/tmp/test.dd  bs=50K count=20000;sync)"

測試F:10000個100KB檔案的寫入                         (命令:sync;time ./write.sh

測試G:10000個100KB檔案的刪除                         (命令:sync;time rm /www/test -R

其中我選擇了一個我日常開發所在的專案目錄 /www來掛載到virtualBox中,總大小為2.88GB, 共80079個檔案, 12254個資料夾,含有多個深層目錄,對它的一次遍歷也是挺耗時的。兩個指令碼如下:

#! /bin/bash
###read.sh
#read file in directory recursively
function read_dir(){
    for file in `ls $1`
    do
        if [ -d $1"/"$file ]
        then
            read_dir $1"/"$file
        else
            cat $1"/"$file > /dev/null
        fi
    done
}
read_dir /www

#!/bin/bash
###write.sh
#large amount of small file write
for (( i = 1; i <=10000; i++ ))
do
    dd if=/dev/zero of=/www/test/${i}.dd  bs=100K count=1;sync
done

測試成績如下:
檔案系統Benchmark
結果格式
h:m:s.ms
sshfs
(目錄大小為2.8GB)
nfs
(目錄大小為2.8GB)
vboxfs
(目錄大小為2.8GB)
native
(目錄大小為3.3GB)
測試A
大量檔案及目錄的資訊讀取
10:14 1:15 1:35 23 s
測試B
(warm A)
10:12 1:28 1:35 19 s
測試C
大量檔案的內容讀取
1:45:17.58 7:55.11 9:22.67 9:15.17
測試D
(warm C)
1:46:11.21 7:53.79 9:23.76 8:36.96
測試E
1GB連續檔案的寫入
1:05.9013
15.5 MB/s
29.5498 s
34.7 MB/s
30.3650 s
33.7 MB/s
4.30492 s
238 MB/s
測試F
10000個100KB檔案的寫入 
17:12.82 2:12.43 2:16.95 2:09.65
測試G
10000個100KB檔案的刪除
34.227 s 10.152 s 14.860 s 1.096 s

從資料上看nfs和vboxfs的差距並不大,但是nfs寫入時會有莫名其妙的問題,有時在java中無法建立中文目錄,也不報錯,但是同樣的程式碼僅僅將共享目錄換成vboxfs就可以正常建立中文目錄。因此我覺得還是繼續用預設的vboxfs吧,我把pm2的watch和webpack的watch都關閉掉,感覺也流暢了不少,只是在目錄切換時還是會停留1-2s,懷疑是git的原因。


由於時間和精力有限,沒能做更多的測試,如有不對處歡迎指正。

相關推薦

Vagrant共享目錄檔案系統sshfsnfsvboxfsnative fs效能比較測試

工作中使用vagrant作為開發環境,一直比較懶,直接用的預設方式共享目錄,但隨著專案越來越大,而且我的筆記本一般又不關機,都是直接合上,導致系統越來越慢,不但在guest中慢(比如切換目錄要1秒),連在host上開啟目錄也變得很慢。 終於有一天實在受不了,決定查查原因,

開啟 NFS 檔案系統提升 Vagrant 共享目錄效能

開發十年,就只剩下這套架構體系了! >>>   

nfs啟動:u-boot啟動後從ubuntu tftp下載核心及裝置樹,檔案系統掛載在nfs伺服器目錄

U-Boot# setenv netargs "setenv bootargs console=${console} ${optargs}    root=/dev/nfs  rootfstype=nfsroot    nfsroot=${serverip}:${rootpath}   ip=${ipaddr

NFS介紹NFS服務端安裝配置NFS配置選項exportfs命令NFS客戶端問題 FTP介紹用vsftpd搭建ftpxshell使用xftp傳輸檔案使用pure-ftpd搭建ftp服務

一、NFS介紹 NFS(Network File System)即網路檔案系統,是FreeBSD支援的檔案系統中的一種,它允許網路中的計算機之間通過TCP/IP網路共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS伺服器上的檔案,就像

mini6410基於linux2.6.36核心通過NFS啟動根檔案系統總結(四製作根檔案系統及通過NFS掛載檔案系統

本系列文章有本人yinjiabin製作,轉載請註明出處: http://blog.csdn.net/yinjiabin/article/details/7489563根檔案系統一般包括: 1)基本的檔案系統結構,包含一些必須的目錄,比如:/dev,/proc,/bin,/

基於busybox製作mini2440根檔案系統及使用nfs掛載

  常見的檔案系統有yaffs2, jffs2,他們是適用於根檔案系統映象存在於NAND Flash上的情況。而傳統的Linux EXT2/EXT3檔案系統格式適用於傳統的block裝置,比如SD卡或者硬碟。 cramfs同時適用於以上兩種情況。其不管採用哪種格式,核心都必

AIX 5L支援的5種檔案系統:JFS,JFS2,NFS,CDRFS,UDFS

JFS(Journaled File System):          日誌型檔案系統JFS2(Enhanced Journalted File System): 增強的日誌型檔案系統NFS(Network File System):              網路檔案系統CDRFS(C

C#訪問共享目錄 得到共享目錄檔案列表和修改裡面的檔案

建一個IdentityScope類,並引用相應的包using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Intero

jz2440開發板製作燒寫根檔案系統,使用NFS啟動

1在製作根檔案系統時,需要用到mkyaffs2image命令(這個命令檔案需要去相應資料夾中去拷貝)  將相應命令檔案拷貝到/bin/ 目錄中    增加可執行許可權 chmod +x /bin/mkyaffs2image 2mkyaffs2image命令用法 mkyaff

busybox檔案系統與簡單驅動學習(1)-busybox檔案系統搭建與nfs掛載配置

一、busybox編譯安裝 2、參考資料:訊為4412精英版開發手冊9.5章節 3、實際操作環境:Ubuntu14.04、交叉編譯環境 arm-none-linux-gnueabi-(直接用訊為提供的,也可以網上用其他的)、busybox版本

C# 讀取共享目錄檔案

建立連線 public static bool connectShareDoc(string path, string userName, string passWord) {

linux不同伺服器間共享目錄配置過程,通過nfs共享目錄

假設有機器:22.5.242.1(目錄 /appfs盤需要和其他ip共享)、22.5.242.2、22.5.242.3 22.5.242.1機器的/appfs 目錄硬碟需要共享給 22.5.242.2機器和22.5.242.3機器 方法: 1)在22.5.242.1 機器

Linux 虛擬檔案系統四大物件:超級塊inodedentryfile之間關係

更多嵌入式原創文章,請關注公眾號:一口Linux # 一:檔案系統 ## 1. 什麼是檔案系統? 作業系統中負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。 通常檔案系統是用於儲存和組織檔案的一種機制,便於對檔案進行方便的查詢與訪問。 檔案系統是對檔案儲存裝置的空間進行組織和分配,負責

java自動裝箱自動拆箱和正常情況效能比較

自動裝箱和自動拆箱是java5.0版本引入的,能自動將基本型別轉換為對應的基本型別包裝物件,那麼我們比較一下他們的效能情況。 package com.wmmad.test; import junit.framework.TestCase; /** * @author ma

對於SynchronizedReentrantLockAtomicCAS在併發下面的效能比較測試

對於Synchronized、ReentrantLock、Atomic、CAS在併發下面的效能比較,在JDK1.6和JDK1.8下面測試通過。 我們考慮一個最簡單的併發場景,對物件自增欄位在併發下面的處理: 介面:Counter public interface Co

Vagrant在Windwos下支持使用NFS/SMB共享文件夾從而解決目錄共享IO緩慢的問題

隱患 1.0 erl set ring htm minute 情況 如果 此問題是在擁有相同配置的環境中,項目在win10跑的慢而在win7就正常的情況下發現的,一步步調試之後發現是文件操作的相關行為變的很慢,於是考慮到可能是系統問題,後來在如下鏈接找到了解決辦法:http

Atitit 分散式檔案系統 hdfs nfs fastfs 目錄 1. 分散式檔案系統 1 2. 什麼是FastDFS 1 2.1. FastDFS特性: 1 2.1.1. fastdfs是否可在

Atitit 分散式檔案系統 hdfs nfs fastfs   目錄 1. 分散式檔案系統 1 2. 什麼是FastDFS 1 2.1. FastDFS特性: 1 2.1.1. fastdfs是否可在windows系統下安裝?可以的話,哪位可以..._百度知道 2

Atittit HDFS hadoop 大資料檔案系統java使用總結 目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start

Atittit HDFS hadoop 大資料檔案系統java使用總結   目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start-dfs.cmd 2 3.1. 配置core-site

常見檔案系統對比分析(NFSGFSNAS)

本章我們來分析下常見檔案系統對比分析,這裡我們主要講解NFS、GFS、NAS相關概念及區別。 《一》NFS NFS 是Network File System的縮寫,中文解釋是網路檔案系統,它是FreeBSD支援的檔案系統中的一種,它允許網路中的計算機之間通過TCP/IP網路共享資源。在N

01: 儲存技術與應用 iSCSI技術應用 udev配置 NFS網路檔案系統 Multipath多路徑 NFS網路檔案系統 udev配置

Top NSD CLUSTER DAY01 1 案例1:配置iSCSI服務 1.1 問題 本案例要求先搭建好一臺iSCSI伺服器,並將整個磁碟共享給客戶端: 伺服器上要額外配置一塊硬碟 服務端安裝target,並將新加的硬碟配置為iSCSI 的共享磁碟 在客