git 和 filesystem 的 Performance

前二天因為硬碟壞掉, 所以硬碟升級成 raid1. 而 file system 手賤換成 xfs.
這個星期我都在查詢 system 的 performance 問題.

因為我 git 的各項操作實在是太慢了.
慢到整個系統大概可以和 P5 比吧 (反正就是慢慢慢)

一開始我以為是 raid/disk 的問題, 不過在數次交叉測試下, 看起來兇手指向 File System
以下就是我的測試環境.

CPU: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz
OS: Ubuntu Linux 10.04 LTS
HDD1: Device Model: Seagate ST31000528AS (1T)
HDD2: Device Model: Seagate ST31000528AS (1T)
同一顆.

測試方式.

HDD1, HDD2 分別切了 40G 的 Primary 1 Partition.
第一次在 HDD1 測 ext4 , HDD2 測 xfs
第二次在 HDD1 測 xfs , HDD2 測 ext3
第二次測完後追加 ext3 和 btrfs
使用 time command 測試時間.
在 Copy 之前會先 mkfs disk .
硬碟內先行準備好一個 git repository 的測試資料, 然後再另建一個目錄 clone 這份測試資料(不細測 Read/Write)

測試資料.
9.1G 的 .git source tree. 包含 5G 的 .git database 還有 4.1G 的 source code/binary/image .. 等等資料. 約有 2800 個 commit.

以下是測試數據
First Round
sda1: ext4
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 3m30.381s
user 0m24.878s
sys 0m31.402s

sdb1: xfs
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk2/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 13m47.297s
user 0m31.510s
sys 0m24.482s

Round 2:
sda1: xfs
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 13m10.405s
user 0m32.122s
sys 0m19.761s

sdb1: ext4
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk2/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 1m25.192s
user 0m26.210s
sys 0m14.017s

sdb: ext3
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk2/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 3m5.792s
user 0m25.534s
sys 0m23.065s

sda: btrfs
# time git clone ../trunk/
Initialized empty Git repository in /mnt/disk/1/trunk/.git/
Checking out files: 100% (216892/216892), done.

real 1m13.981s
user 0m24.670s
sys 0m32.730s

簡單的做一個圖表做測試結果.

由此圖可知, 我的效能問題是出在 xfs 上.將 raid system 改成 ext4 後, 這個問題就解決了.

但是奇怪的是, xfs 雖然花了 13m, 但是實際 CPU 使用時間並不多. 這個問題也有可能是 ubuntu/Linux kernel 造成的.

ext4 和  btrfs 都各有一次不錯的表現. 尤其是 btrfs, 才 1m13 秒. 大家有常常使用 git 的, 可以考慮一下 btrfs.

受限於個人時間, 這個測試並不嚴謹, 不過己經可以解決我目前的問題, 至於這個數據, 簡單整理一下以後, 可以給常常使用 git 的朋友一個參考的資料.
接下來就是希望有人能夠花點時間做出更完整的數據, 或是順便 Debug 了.

On this day..

Comments

comments

Related Posts
  1. Using Google Chrome Google Chrome 12.0.742.122 on Windows Windows 7

    檔案系統一大, 選擇檔案系統就很痛苦. 尤其是 fsck 時, 在 ext3 只要週期一到, fsck, mkfs 起來就像永遠不會結束一樣 (ex 1T HD). XFS 與 JFS 在這邊的 fsck, mkfs 似乎就像飛的一樣快. ext4 我還沒空去 survey 這兩的動作的資料. 不知是否有人已經做過功課 ?

Reply to Y.C ¬
Cancel reply


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>