Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EFSへの書き込み速度を上げる(小ネタ)

 EFSへの書き込み速度を上げる(小ネタ)

JAWS-UG 浜松 AWS 勉強会 2021#6 2021/06/25

hmatsu47
PRO

June 22, 2021
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. EFS への書き込み速度を上げる(小ネタ)
    JAWS-UG 浜松 AWS 勉強会 2021#6 2021/06/25
    まつひさ(hmatsu47)

    View Slide

  2. 自己紹介
    松久裕保(@hmatsu47)
    https://qiita.com/hmatsu47
    名古屋で Web インフラのお守り係をしています
    (ほかに書くことがなくなったので省略)
    2

    View Slide

  3. 今日の内容
    ● EFS とは
    ● EFS は書き込みが遅い
    ○ Amazon Linux 2 の /usr/ を普通に rsync
    ■ 1 ゾーンで約 15 倍、標準(1 リージョン)で約 29 倍遅い
    ● 処理を並列化してみると…
    ○ xargs を使って並列で rsync
    ■ 1 インスタンスの EC2 からのアクセスでも高速化が可能
    3

    View Slide

  4. EFS とは
    ● フルマネージドの分散・共有ファイルシステム
    ○ https://aws.amazon.com/jp/efs/
    ● NFSv4 プロトコルでアクセス可能
    ○ NFS v4.0 および v4.1 をサポート
    ● 高可用性・高耐久性
    ○ 1 ゾーンストレージクラスと標準ストレージクラス
    ■ 1 ゾーン内または 1 リージョン内で冗長化
    ○ 耐久性は 99.999999999%
    4

    View Slide

  5. EFS の弱点
    ● とにかく書き込みが遅い
    ○ 分散・共有ファイルシステムなので…
    ● 例えば、Amazon Linux 2 で普通に rsync してみると
    ○ m5.large で /usr/(1.1GB)から別のファイルシステムにコピー
    rsync -avz /usr/ /mnt/【コピー先】/usr/
    ○ 対 EBS(gp3 IOPS:3000) : 00 分 54 秒
    ○ 対 EFS(1 ゾーン・バースト) : 13 分 51 秒(15.4 倍遅い)
    ○ 対 EFS(標準・同) : 25 分 58 秒(28.9 倍遅い)
    5

    View Slide

  6. 処理を並列化してみる
    ● rsync を xargs と組み合わせる
    ls -1 /usr | xargs -I {arg} -P 【並列数】 -n 1 rsync -avz /usr/{arg}
    /mnt/【コピー先】/usr/
    6
    コピー先 通常(1 並列) 2 並列 4 並列
    EBS(gp3 IOPS:3000) 00:54 - 00:42 - 00:39 -
    EFS(1 ゾーン・バースト) 13:51 15.4 倍遅い 09:09 13.1 倍遅い 06:23 9.8 倍遅い
    EFS(標準・同) 25:58 28.9 倍遅い 16:35 23.7 倍遅い 11:28 17.6 倍遅い

    View Slide

  7. 処理を並列化してみる
    7

    View Slide

  8. 補足など
    ● 並列数をもっと増やすとさらに高速化する
    ○ m5.large (2vCPU)のように vCPU 数の少ないインスタンスで
    も 10 ~ 16 並列ぐらいは行ける
    ■ /usr/ 直下のディレクトリの数が少なく中のファイル容量や数のバランスが
    悪いので今回は 4 並列まで(バランスが良いと線形に性能向上する)
    ● 一部の NFS クライアントでは並列化の効果が出ない
    ○ RHEL 6 など
    ○ 処理を直列化してしまうため
    8

    View Slide

  9. 参考:読み取り(find)並列化
    ● 通常 : find -type f -exec cat {} \;
    ● 並列 : find -type f -print0 | xargs -0 -I {arg} -P 【並列数】 -n 1 cat {arg}
    ※都度 OS を再起動し、OS のディスクキャッシュがクリアされた状態で計測
    9
    読み取り対象
    通常
    (1 並列)
    2 並列 4 並列 8 並列
    EBS(gp3 IOPS:3000) 00:46 00:24 00:17 00:16
    EFS(1 ゾーン・バースト) 02:43 01:05 00:36 00:28
    EFS(標準・同) 02:47 01:10 00:35 00:26

    View Slide

  10. 参考:読み取り(find)並列化
    10

    View Slide

  11. まとめ
    ● 処理を並列化すると速くなる
    ○ 1 インスタンスからのアクセスでも
    ○ vCPU 数が少なくても
    ■ 一部 OS で速くならない点には注意
    ● 書き込みと読み取りでは少し傾向が違う
    ○ EBS との差は読み取りのほうが小さい
    ○ 読み取りでは 1 ゾーンと標準の性能差はない
    ■ 帯域の上限に達するまでは
    11

    View Slide