LoginSignup
6
2

More than 5 years have passed since last update.

Docker for Macのファイル共有が遅いので計測してみる

Posted at

この記事はWHITEPLUS Advent Calendar 2016 20日目になります。

開発環境整備担当 kai-zoa です。

多くの現場でそうだったように、リネットの開発環境も今年からDocker ToolboxからDocker for Macに移行したのですが、macOSだととにかくマウントしたボリュームのファイルアクセスが遅くて毎日不満です。

このあたり、共有ファイルシステムのマウントじゃなくてファイルを即時同期したり、もういっそLinux使うなどして一部やり過ごしてるようですね。

Qiita - docker-syncでホスト-コンテナ間を爆速で同期する

いまはDockerのosxfsが改良されますようにと願うばかりですが、一応Docker for Macのアップデートの度に改善を見守りたいので、見守り用に簡単にGoでベンチマークするコードを書いてみました。

ソース

簡単に165KBのgopher画像を読み取りだけします。

package main

import (
    "os"
    "testing"
)

func _read(path string, bufSize int) error {
    f, err := os.Open(path)
    if err != nil {
        return err
    }
    defer f.Close()

    buf := make([]byte, bufSize)
    for {
        n, err := f.Read(buf)
        if n == 0 {
            break
        }
        if err != nil {
            return err
        }
    }
    return nil
}

func BenchmarkReadContainerFile_Buf128(b *testing.B) {
    for i := 0; i < b.N; i++ {
        err := _read("/tmp/gophercolor.png", 128)
        if err != nil {
            panic(err)
        }
    }
}

func BenchmarkReadContainerFile_Buf1024(b *testing.B) {
    for i := 0; i < b.N; i++ {
        err := _read("/tmp/gophercolor.png", 1024)
        if err != nil {
            panic(err)
        }
    }
}

func BenchmarkReadVolumeFile_Buf128(b *testing.B) {
    for i := 0; i < b.N; i++ {
        err := _read("./gophercolor.png", 128)
        if err != nil {
            panic(err)
        }
    }
}

func BenchmarkReadVolumeFile_Buf1024(b *testing.B) {
    for i := 0; i < b.N; i++ {
        err := _read("./gophercolor.png", 1024)
        if err != nil {
            panic(err)
        }
    }
}

結果

./bench.sh
testing: warning: no tests to run
BenchmarkReadContainerFile_Buf128-4         2000            567241 ns/op
BenchmarkReadContainerFile_Buf1024-4       20000             76948 ns/op
BenchmarkReadVolumeFile_Buf128-4             500           2959713 ns/op
BenchmarkReadVolumeFile_Buf1024-4            500           2683988 ns/op
PASS
ok      bench-fio       6.927s

extremely slow!!

これからも見守っていきますが、そろそろ暫定的になにかしていかないとなぁ

明日

knakamigawaのフロントエンドの話ですっ

ホワイトプラスではエンジニアを募集しています

ホワイトプラスでは、新しい技術にどんどん挑戦したい!という技術で事業に貢献したいエンジニアを募集しております。!

6
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2