Linux, 工作, 生活, 家人

Linux, Ubuntu

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 了.

1 留言

  1. Y.C

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

發佈留言