インスタンスタイプと EBS 性能を変えて rsync + parallel の速度を比較してみた

インスタンスタイプと EBS 性能を変えて rsync + parallel の速度を比較してみた

2025.11.24

はじめに

テクニカルサポートの 片方 です。
以前ブログで、Amazon Linux 2023 環境で EBS ボリューム間の並列データ転送 (GNU parallel と rsync を組み合わせ) を実装して確認しました。
その際に、インスタンスタイプや EBS ボリュームの IOPS, スループット値の変更により、転送速度がどの様に変化するのか気になりましたので、検証してみました。

GNU parallel と rsync を組み合わせた実装方法については、以下をご参考ください。
https://dev.classmethod.jp/articles/ebs-al203-parallel-rsync-data-transfer/

先に結論から(速度計測の結果)

最も高速だったのは m5.2xlarge(8 vCPU)で並列数 32 の場合で、約 6 秒弱で完了しました。
一方で、m5.large(2 vCPU)では並列数を増やしても 17 秒前後が頭打ちとなり、明確な差が出ています。

また、EBS を gp3 の 3,000 IOPS / 125 MBps から 6,000 IOPS / 250 MBps に引き上げても、処理時間はほぼ変わらず、小さいファイルを大量に処理する本検証環境では、EBS の性能よりも CPU コア数の方が処理時間に影響しやすい結果となりました。

検証環境

  • OS : Amazon Linux 2023
  • インスタンスタイプ : m5.large, m5.2xlarge
  • ルート EBS ボリューム (ソース) : 50 GB, gp3, 3,000 or 6,000 IOPS, 125 or 250 MB/秒
  • 追加 EBS ボリューム (コピー先) : 25 GB, gp3, 3,000 or 6,000 IOPS, 125 or 250 MB/秒
  • テストファイル : 2,000 個

表にまとめると以下の通りです。

検証環境 インスタンスタイプ vCPU ルートEBS (ソース) 追加EBS (コピー先) 備考
1. m5.large(標準 EBS) m5.large 2 gp3 / 3,000 IOPS / 125 MB/s gp3 / 3,000 IOPS / 125 MB/s ベースライン構成
2. m5.large(EBS 性能アップ) m5.large 2 gp3 / 6,000 IOPS / 250 MB/s gp3 / 6,000 IOPS / 250 MB/s EBS のみ強化
3. m5.2xlarge(標準 EBS) m5.2xlarge 8 gp3 / 3,000 IOPS / 125 MB/s gp3 / 3,000 IOPS / 125 MB/s vCPU 数アップ
4. m5.2xlarge(EBS 性能アップ) m5.2xlarge 8 gp3 / 6,000 IOPS / 250 MB/s gp3 / 6,000 IOPS / 250 MB/s vCPU 数 + EBS 共に強化

検証コマンド

#!/bin/bash

echo "=========================================="
echo "2,000 ファイル並行度比較テスト"
echo "=========================================="

# 並行度: 1(非並列)
echo ""
echo "【並行度 1】非並列処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 1 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 4
echo ""
echo "【並行度 4】4 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 4 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 8
echo ""
echo "【並行度 8】8 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 8 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 16
echo ""
echo "【並行度 16】16 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 16 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 32
echo ""
echo "【並行度 32】32 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 32 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

echo ""
echo "=========================================="
echo "比較完了"
echo "=========================================="

※ 利用する際は適宜修正してください

使用した検証コマンドは、2,000 個の小さなファイルを rsync と GNU parallel を使ってコピーし、並行度(同時実行数)による処理速度の違いを測定しています。
具体的には次のことをしています。

  • /tmp に作成した test_file_*.txt(2,000個)を対象にする
  • 並行度(1 / 4 / 8 / 16 / 32)ごとにコピー処理を実施
  • parallel -j <並行数> で コピー処理を複数並列で実行
  • rsync の -R オプションで元のパス構造を保持したまま /mnt/data に転送
  • time コマンドで 処理にかかった実行時間を計測
  • 転送後の /mnt/data/tmp/ にあるファイル数を数えて コピーの完了を確認

https://www.gnu.org/software/parallel/man.html

計測してみた

前途で紹介している通りの、検証環境で計測しています。
01
02

1. m5.large(標準 EBS)

検証環境 インスタンスタイプ vCPU ルートEBS (ソース) 追加EBS (コピー先) 備考
1. m5.large(標準 EBS) m5.large 2 gp3 / 3,000 IOPS / 125 MB/s gp3 / 3,000 IOPS / 125 MB/s ベースライン構成
計測結果
sh-5.2$ df -h /mnt/data
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme1n1     25G   24K   24G   1% /mnt/data
sh-5.2$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme1n1       259:0    0  25G  0 disk /mnt/data
nvme0n1       259:1    0  50G  0 disk
├─nvme0n1p1   259:2    0  50G  0 part /
├─nvme0n1p127 259:3    0   1M  0 part
└─nvme0n1p128 259:4    0  10M  0 part /boot/efi
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ seq 1 2000 | xargs -I {} -P 32 bash -c 'echo "Test file {}" > /tmp/test_file_{}.txt'
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ #!/bin/bash

echo "=========================================="
echo "2,000 ファイル並行度比較テスト"
echo "=========================================="

# 並行度: 1(非並列)
echo ""
echo "【並行度 1】非並列処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 1 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 4
echo ""
echo "【並行度 4】4 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 4 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 8
echo ""
echo "【並行度 8】8 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 8 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 16
echo ""
echo "【並行度 16】16 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 16 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 32
echo ""
echo "【並行度 32】32 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 32 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "=========================================="file_*.txt 2>/dev/null | wc -l)"
==========================================
2,000 ファイル並行度比較テスト
==========================================

【並行度 1】非並列処理
開始: 05:16:17

real    1m54.780s
user    0m19.555s
sys     0m10.825s
終了: 05:18:11
転送ファイル数: 2000

【並行度 4】4 並行処理

開始: 05:18:12

real    0m27.636s
user    0m21.030s
sys     0m11.652s
終了: 05:18:39
転送ファイル数: 2000

【並行度 8】8 並行処理
開始: 05:18:40

real    0m18.453s
user    0m23.118s
sys     0m12.091s
終了: 05:18:58
転送ファイル数: 2000

【並行度 16】16 並行処理
開始: 05:18:59

real    0m17.160s
user    0m22.586s
sys     0m11.186s
終了: 05:19:16
転送ファイル数: 2000

【並行度 32】32 並行処理
開始: 05:19:16

real    0m17.122s
user    0m22.353s
sys     0m11.333s
終了: 05:19:33
転送ファイル数: 2000

==========================================
比較完了
==========================================
sh-5.2$
並列数 real user sys
1 1m54.780s 0m19.555s 0m10.825s
4 0m27.636s 0m21.030s 0m11.652s
8 0m18.453s 0m23.118s 0m12.091s
16 0m17.160s 0m22.586s 0m11.186s
32 0m17.122s 0m22.353s 0m11.333s

2. m5.large(EBS 性能アップ)

検証環境 インスタンスタイプ vCPU ルートEBS (ソース) 追加EBS (コピー先) 備考
2. m5.large(EBS 性能アップ) m5.large 2 gp3 / 6,000 IOPS / 250 MB/s gp3 / 6,000 IOPS / 250 MB/s EBS のみ強化
計測結果
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ #!/bin/bash

echo "=========================================="
echo "2,000 ファイル並行度比較テスト"
echo "=========================================="

# 並行度: 1(非並列)
echo ""
echo "【並行度 1】非並列処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 1 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 4
echo ""
echo "【並行度 4】4 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 4 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 8
echo ""
echo "【並行度 8】8 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 8 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 16
echo ""
echo "【並行度 16】16 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 16 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 32
echo ""
echo "【並行度 32】32 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 32 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "=========================================="file_*.txt 2>/dev/null | wc -l)"
==========================================
2,000 ファイル並行度比較テスト
==========================================

【並行度 1】非並列処理
開始: 05:32:57

real    1m52.991s
user    0m19.035s
sys     0m9.278s
終了: 05:34:50
転送ファイル数: 2000

【並行度 4】4 並行処理
開始: 05:34:50

real    0m26.870s
user    0m20.687s
sys     0m10.447s
終了: 05:35:17
転送ファイル数: 2000

【並行度 8】8 並行処理
開始: 05:35:17

real    0m18.140s
user    0m22.055s
sys     0m12.408s
終了: 05:35:36
転送ファイル数: 2000

【並行度 16】16 並行処理
開始: 05:35:36

real    0m16.934s
user    0m22.109s
sys     0m11.272s
終了: 05:35:53
転送ファイル数: 2000

【並行度 32】32 並行処理
開始: 05:35:53

real    0m17.328s
user    0m22.927s
sys     0m11.180s
終了: 05:36:11
転送ファイル数: 2000

==========================================
比較完了
==========================================
sh-5.2$
並列数 real user sys
1 1m52.991s 0m19.035s 0m9.278s
4 0m26.870s 0m20.687s 0m10.447s
8 0m18.140s 0m22.055s 0m12.408s
16 0m16.934s 0m22.109s 0m11.272s
32 0m17.328s 0m22.927s 0m11.180s

3. m5.2xlarge(標準 EBS)

検証環境 インスタンスタイプ vCPU ルートEBS (ソース) 追加EBS (コピー先) 備考
3. m5.2xlarge(標準 EBS) m5.2xlarge 8 gp3 / 3,000 IOPS / 125 MB/s gp3 / 3,000 IOPS / 125 MB/s vCPU 数アップ
計測結果
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ #!/bin/bash

echo "=========================================="
echo "2,000 ファイル並行度比較テスト"
echo "=========================================="

# 並行度: 1(非並列)
echo ""
echo "【並行度 1】非並列処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 1 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 4
echo ""
echo "【並行度 4】4 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 4 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 8
echo ""
echo "【並行度 8】8 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 8 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 16
echo ""
echo "【並行度 16】16 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 16 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 32
echo ""
echo "【並行度 32】32 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 32 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "=========================================="file_*.txt 2>/dev/null | wc -l)"
==========================================
2,000 ファイル並行度比較テスト
==========================================

【並行度 1】非並列処理
開始: 05:29:59

real    1m50.453s
user    0m16.370s
sys     0m7.614s
終了: 05:31:49
転送ファイル数: 2000

【並行度 4】4 並行処理
開始: 05:31:49

real    0m24.909s
user    0m16.550s
sys     0m7.771s
終了: 05:32:14
転送ファイル数: 2000

【並行度 8】8 並行処理
開始: 05:32:15

real    0m12.570s
user    0m16.731s
sys     0m8.066s
終了: 05:32:27
転送ファイル数: 2000

【並行度 16】16 並行処理
開始: 05:32:28

real    0m6.570s
user    0m18.351s
sys     0m9.430s
終了: 05:32:34
転送ファイル数: 2000

【並行度 32】32 並行処理
開始: 05:32:34

real    0m5.854s
user    0m19.134s
sys     0m9.838s
終了: 05:32:40
転送ファイル数: 2000

==========================================
比較完了
==========================================
sh-5.2$
並列数 real user sys
1 1m50.453s 0m16.370s 0m7.614s
4 0m24.909s 0m16.550s 0m7.771s
8 0m12.570s 0m16.731s 0m8.066s
16 0m6.570s 0m18.351s 0m9.430s
32 0m5.854s 0m19.134s 0m9.838s

4. m5.2xlarge(EBS 性能アップ)

検証環境 インスタンスタイプ vCPU ルートEBS (ソース) 追加EBS (コピー先) 備考
4. m5.2xlarge(EBS 性能アップ) m5.2xlarge 8 gp3 / 6,000 IOPS / 250 MB/s gp3 / 6,000 IOPS / 250 MB/s vCPU 数 + EBS 共に強化
計測結果
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ #!/bin/bash

echo "=========================================="
echo "2,000 ファイル並行度比較テスト"
echo "=========================================="

# 並行度: 1(非並列)
echo ""
echo "【並行度 1】非並列処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 1 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 4
echo ""
echo "【並行度 4】4 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 4 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 8
echo ""
echo "【並行度 8】8 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 8 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 16
echo ""
echo "【並行度 16】16 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 16 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "転送ファイル数: $(ls -1 /mnt/data/tmp/test_file_*.txt 2>/dev/null | wc -l)"

# 並行度: 32
echo ""
echo "【並行度 32】32 並行処理"
sudo rm -rf /mnt/data/tmp 2>/dev/null
echo "開始: $(date '+%H:%M:%S')"
time find /tmp/test_file_*.txt -type f | \
  parallel -j 32 rsync -avR {} /mnt/data/ > /dev/null 2>&1
echo "終了: $(date '+%H:%M:%S')"
echo "=========================================="file_*.txt 2>/dev/null | wc -l)"
==========================================
2,000 ファイル並行度比較テスト
==========================================

【並行度 1】非並列処理
開始: 05:40:36

real    1m52.262s
user    0m17.107s
sys     0m8.816s
終了: 05:42:28
転送ファイル数: 2000

【並行度 4】4 並行処理
開始: 05:42:28

real    0m25.595s
user    0m17.821s
sys     0m9.282s
終了: 05:42:54
転送ファイル数: 2000

【並行度 8】8 並行処理
開始: 05:42:54

real    0m12.823s
user    0m18.222s
sys     0m8.850s
終了: 05:43:07
転送ファイル数: 2000

【並行度 16】16 並行処理
開始: 05:43:08

real    0m6.623s
user    0m18.515s
sys     0m10.034s
終了: 05:43:14
転送ファイル数: 2000

【並行度 32】32 並行処理
開始: 05:43:14

real    0m5.987s
user    0m18.978s
sys     0m10.587s
終了: 05:43:20
転送ファイル数: 2000

==========================================
比較完了
==========================================
sh-5.2$
並列数 real user sys
1 1m52.262s 0m17.107s 0m8.816s
4 0m25.595s 0m17.821s 0m9.282s
8 0m12.823s 0m18.222s 0m8.850s
16 0m6.623s 0m18.515s 0m10.034s
32 0m5.987s 0m18.978s 0m10.587s

まとめ

今回の検証より、rsync + parallel(2,000 ファイル)の処理時間を比較 (real) すると、以下の通りでした。

検証環境 並列 1 (real) 並列 4 (real) 並列 8 (real) 並列 16 (real) 並列 32 (real)
1. m5.large(標準 EBS) 1m54.780s 0m27.636s 0m18.453s 0m17.160s 0m17.122s
2. m5.large(EBS 性能アップ) 1m52.991s 0m26.870s 0m18.140s 0m16.934s 0m17.328s
3. m5.2xlarge(標準 EBS) 1m50.453s 0m24.909s 0m12.570s 0m6.570s 0m5.854s
4. m5.2xlarge(EBS 性能アップ) 1m52.262s 0m25.595s 0m12.823s 0m6.623s 0m5.987s

主なポイントは以下の通りです。

  • m5.large(2 vCPU)では、並列度を 16〜32 に増やしても約 17 秒で頭打ち
    → vCPU 数が少ないため、parallel の同時実行数を増やしても効果が伸びにくい

  • m5.2xlarge(8 vCPU)では、並列32で約6秒と大幅に高速化
    → vCPU 数が増えることで、parallel の効果がそのまま速度に反映されやすくなる

  • EBS を 3,000 IOPS → 6,000 IOPS にしても速度はほぼ変わらない
    → user / sys の傾向もほぼ同じで、小ファイル 2000 個程度では EBS の性能がボトルネックにならない

処理速度に課題がある場合は、今回のように vCPU 数が影響するケースもあるため、インスタンスタイプのスケールアップを先ずは選択肢の一つとして検討してみてください。

https://aws.amazon.com/jp/ec2/instance-types/
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-resize.html

本ブログが誰かの参考になれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

この記事をシェアする

FacebookHatena blogX

関連記事