Sambaのファイル共有の速度を測定してみる

自宅サーバーにsambaを使ったファイル共有サーバーを用意しているのですが,その速度を測ったことがなかったと思い,やってみることにしました.

環境

実験に使った環境は次のようになっています.

kotaro@ginga:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

kotaro@ginga:~$ uname -a
Linux ginga 4.15.0-169-generic #177-Ubuntu SMP Thu Feb 3 10:50:38 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

kotaro@ginga:~$ smbd --version
Version 4.7.6-Ubuntu

測定

予め転送するファイルを共有フォルダ(/mnt/share)上に作っておきます.サイズは少し大きめに1000MBとします.

kotaro@ginga:~$ dd if=/dev/zero of=/mnt/share/zero ibs=1M obs=1M count=1000

kotaro@ginga:~$ ls /mnt/share/zero -lh
-rwxrw-r-- 1 root root 1000M  315 11:12 /mnt/share/zero

それではこのファイルを読みだすスピードを測ってみましょう.

sambaサーバーと同一LANセグメントにあり有線LAN(1GbitEthernet)で繋がれているデスクトップPCで測ってみます.

koutarou@koutarou-desktop/INS> dd if=/home/koutarou/share/zero of=/dev/null ibs=1M obs=1M count=1000
1000+0 レコード入力
1000+0 レコード出力
1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.79496 s, 107 MB/s
[03/15/22 11:53]/home/koutarou

koutarou@koutarou-desktop/INS> dd if=/home/koutarou/share/zero of=/dev/null ibs=1M obs=1M count=1000
1000+0 レコード入力
1000+0 レコード出力
1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.66189 s, 109 MB/s
[03/15/22 11:53]/home/koutarou

koutarou@koutarou-desktop/INS> dd if=/home/koutarou/share/zero of=/dev/null ibs=1M obs=1M count=1000
1000+0 レコード入力
1000+0 レコード出力
1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.82612 s, 107 MB/s
[03/15/22 11:53]/home/koutarou

koutarou@koutarou-desktop/INS> dd if=/home/koutarou/share/zero of=/dev/null ibs=1M obs=1M count=1000
1000+0 レコード入力
1000+0 レコード出力
1048576000 bytes (1.0 GB, 1000 MiB) copied, 10.3424 s, 101 MB/s

~110MB/s(880Mbps)くらいは出ているので有線接続の速度よりも少し遅いくらいです.

(補足)ディスクアクセス速度

そもそものディスクアクセス速度も測ってみようと思います.

ディスク構成

各デバイスの情報は下のようになっています.

kotaro@ginga:~$ sudo lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0   2.7T  0 disk
└─sda1    8:1    0   2.7T  0 part
  └─md0   9:0    0   1.8T  0 raid1 /mnt
sdb       8:16   0   1.8T  0 disk
└─md0     9:0    0   1.8T  0 raid1 /mnt
sdc       8:32   0 232.9G  0 disk
├─sdc1    8:33   0   225G  0 part  /
├─sdc2    8:34   0     1K  0 part
└─sdc5    8:37   0   7.9G  0 part  [SWAP]

データ用のHDDとして3TB(/dev/sda WesternDigital WD30EFAXRT 3TB)と2TB(/dev/sdb WesternDigital WD20EZRZ 2TB)のものをlinuxソフトウェアRAIDの機能を使って2TBのRAID1アレイを組んでいます.

これだと3TBのディスクの方が無駄になってしまいますが,以前2TBディスクが2つだったのを3TBディスク2つにする途中なのでこうなっています. 一気に変えようとも思いましたが,それだと壊れる時期も一緒になってしまうのではないかと考え,1年程空けることに.

また,システム用として250GBのSSD(/dev/sdc WesternDigital WDS250G2B0A)を置いてあります.

read速度測定

readだけ計るのでhdparmコマンドを用いて測定します.

linuxjm.osdn.jp

Tオプションを付けることで「ディスクアクセスなしでカーネルのバッファから読み出す速度」を測定できます. また,tオプションで「ディスクアクセスありでカーネルのバッファから読み出す速度」を測定できます.

RAID1ディスクでは,少しブレはありますが大体平均して130MB/sくらいは出そうです.少なくとも1GigabitEthernetと比べてボトルネックとなることはなさそうです.

kotaro@ginga:~$ sudo hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   16924 MB in  1.99 seconds = 8494.59 MB/sec
 Timing buffered disk reads: 484 MB in  3.00 seconds = 161.25 MB/sec

/dev/md0:
 Timing cached reads:   16300 MB in  1.99 seconds = 8180.02 MB/sec
 Timing buffered disk reads: 326 MB in  3.01 seconds = 108.35 MB/sec
kotaro@ginga:~$ sudo hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   16052 MB in  1.99 seconds = 8056.70 MB/sec
 Timing buffered disk reads: 404 MB in  3.01 seconds = 134.33 MB/sec

3TBディスク単体では,RAIDディスクよりも速く200MB/sくらいは出そうです.

kotaro@ginga:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   16550 MB in  1.99 seconds = 8306.80 MB/sec
 Timing buffered disk reads: 574 MB in  3.01 seconds = 190.77 MB/sec
kotaro@ginga:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   16858 MB in  1.99 seconds = 8460.74 MB/sec
 Timing buffered disk reads: 680 MB in  3.01 seconds = 226.28 MB/sec
kotaro@ginga:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   16876 MB in  1.99 seconds = 8470.53 MB/sec
 Timing buffered disk reads: 644 MB in  3.00 seconds = 214.39 MB/sec

2TBディスク単体では,RAIDディスクと同じかそれよりも少し遅いといった感じでしょうか.110MB/sくらい出る感じです.RAIDよりも遅いことなんてあるのかとも思いましたが,カーネルのキャッシュも含めた速度なので単純にありえないとも言えなさそうです.

kotaro@ginga:~$ sudo hdparm -tT /dev/sdb

/dev/sdb:
 Timing cached reads:   17242 MB in  1.99 seconds = 8654.25 MB/sec
 Timing buffered disk reads: 360 MB in  3.00 seconds = 119.92 MB/sec
kotaro@ginga:~$ sudo hdparm -tT /dev/sdb

/dev/sdb:
 Timing cached reads:   16828 MB in  1.99 seconds = 8446.57 MB/sec
 Timing buffered disk reads: 360 MB in  3.01 seconds = 119.53 MB/sec
kotaro@ginga:~$ sudo hdparm -tT /dev/sdb

/dev/sdb:
 Timing cached reads:   16624 MB in  1.99 seconds = 8343.88 MB/sec
 Timing buffered disk reads: 300 MB in  3.00 seconds =  99.96 MB/sec

250GB SSD単体では1回しか測ってないのであまり有意な検証ではありませんがSSDらしく500MB/sくらい出るようです.

kotaro@ginga:~$ sudo hdparm -tT /dev/sdc

/dev/sdc:
 Timing cached reads:   16846 MB in  1.99 seconds = 8455.77 MB/sec
 Timing buffered disk reads: 1546 MB in  3.00 seconds = 515.18 MB/sec