Skip to content

Instantly share code, notes, and snippets.

@takatoshiono
Created September 18, 2016 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takatoshiono/647b98f25c8d12e61e7fefbf606429fd to your computer and use it in GitHub Desktop.
Save takatoshiono/647b98f25c8d12e61e7fefbf606429fd to your computer and use it in GitHub Desktop.
Mac の wc と go-wc を比較する

Mac の wc と比較する

対象

ベンチスクリプト

#!/bin/sh

COMMAND=$1
FILE=$2
MAX=$3
for i in `seq 1 $MAX`; do
    $COMMAND $FILE >/dev/null
done

vimrc (約3.4KB)

https://github.com/takatoshiono/dotfiles/blob/master/vimrc

だいたい倍遅い

➜  bench-go-wc  time ./bench.sh wc vimrc 1000
./bench.sh wc vimrc 1000  0.78s user 1.13s system 75% cpu 2.528 total
➜  bench-go-wc  time ./bench.sh wc vimrc 1000
./bench.sh wc vimrc 1000  0.79s user 1.14s system 76% cpu 2.515 total
➜  bench-go-wc  time ./bench.sh wc vimrc 1000
./bench.sh wc vimrc 1000  0.79s user 1.16s system 76% cpu 2.535 total
➜  bench-go-wc  time ./bench.sh go-wc vimrc 1000
./bench.sh go-wc vimrc 1000  0.77s user 2.53s system 65% cpu 5.051 total
➜  bench-go-wc  time ./bench.sh go-wc vimrc 1000
./bench.sh go-wc vimrc 1000  0.77s user 2.52s system 65% cpu 5.049 total
➜  bench-go-wc  time ./bench.sh go-wc vimrc 1000
./bench.sh go-wc vimrc 1000  0.78s user 2.53s system 65% cpu 5.063 total

MySQLダンプファイル (約416M)

5倍くらい遅いし、実行中にメモリを900Mくらい使っていた。

➜  bench-go-wc  time ./bench.sh wc dump.sql 10
./bench.sh wc dump.sql 10  17.29s user 0.67s system 99% cpu 18.040 total
➜  bench-go-wc  time ./bench.sh go-wc dump.sql 10
./bench.sh go-wc dump.sql 10  91.87s user 4.01s system 104% cpu 1:31.42 total
@takatoshiono
Copy link
Author

takatoshiono commented Sep 21, 2016

ボトルネックの部分を goroutine にしてみたら、大きいファイルで効果があった。小さいファイルだと意味がない。
ただCPUをその分たくさん使ってるので、ずるしてる感じはする。
takatoshiono/go-wc@5cb8d78

➜  bench-go-wc  time ./bench.sh go-wc vimrc 1000
./bench.sh go-wc vimrc 1000  0.76s user 2.82s system 65% cpu 5.429 total
➜  bench-go-wc  time ./bench.sh go-wc vimrc 1000
./bench.sh go-wc vimrc 1000  0.75s user 2.78s system 66% cpu 5.316 total
➜  bench-go-wc  time ./bench.sh go-wc dump.sql 10
./bench.sh go-wc dump.sql 10  79.22s user 2.29s system 350% cpu 23.275 total
➜  bench-go-wc  time ./bench.sh go-wc dump.sql 10
./bench.sh go-wc dump.sql 10  81.62s user 2.57s system 340% cpu 24.744 total

ちなみに wc はもうちょっと速い。

➜  bench-go-wc  time ./bench.sh wc dump.sql 10
./bench.sh wc dump.sql 10  17.49s user 0.70s system 99% cpu 18.366 total

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment