最近のgRPCでベンチマークをとってみた(C++のみ)

gRPCの速度ってどのくらいなんだろ、と思っていたところ、mattnさんの以下の記事を発見しました。早速、githubからcloneさせていただいて試したのですが、やはり1年ほど前の記事であるため、ヘッダファイルやらメソッドなどに変更が入っていてそのままでは通りませんでした。

mattn.kaoriya.net

ということで、とりあえずmakeが通るようにして測ってみました。(とりあえず、というのはSSLの有効化が出来ておらず、TCPでの接続になっているからです)

https://github.com/nori0428/grpc-example-cpp

 

さて、これでベンチマークをとったところ、

MBP: 2.53GHz Core2Duo, Yosemite(v10.10.5) Mem: 4GBの環境で、

$ time seq 1000 | xargs -n 1 ./client mattn

real 0m9.839s

user 0m3.208s

sys 0m3.520s

$ time seq 1000 | xargs -n 1 ./client

real 0m5.806s

user 0m1.914s

sys 0m1.362s

こんな感じでございました。IDLからRPCコードの自動生成が楽でいいですね。

 と以上で終わりなんですが、ここは弊社作msgpack-rpc互換ライブラリの性能と比べたくなるじゃないですか。ということで、

https://github.com/nori0428/lrpc-example-cpp

ほぼ同じことするサンプルを作ってみました。なお、めんどくさくてstd::make_sharedとか使ってるので、c++11有効な環境でお試しくださいませ。

結果ですが、

$ time seq 1000 | xargs -n 1 ./client mattn

real 0m7.659s

user 0m2.346s

sys 0m2.522s

$ time seq 100 | xargs -n 1 ./client

 real 0m1.754s

user 0m0.778s

sys 0m0.435s

 

transportはHTTP/2ではなくWebSocketですし、ListPersonの方はstreamの読み方等がちょっと違った感じなのであれですが、速度的に勝てたのはmsgpackさまさま、という気持ちです。このlinear-cppでは他にもいろいろ余計なことしてるので、他のmsgpack-rpcライブラリではもっと速度が出るんじゃないかな、と思います。

 

ではでは、皆様よいお年を。