unix domain socketよりもlocal宛のtcp socketの方が速いこともある


こんばんは!
毎日投稿するぞって思ってるんですけどなかなか難しいですね。3日ぶりの更新となってしまいました(-_-;)

さて、今回は前回(unix domainのソケット通信)前々回(ソケット通信)の続きとしてUNIXソケットとTCPソケットの性能比較を行っていきたいと思って書き始めたんですよ、で、いざ性能測定してみたら自分の信じてた常識が崩壊して途方に暮れながら記事を書いている今日この頃です。

流石に長ったらしい検証コードの後ろに結果書くのは見にくいかと思ったので先に結果から説明しますと、タイトルにも書いたんですけど、ループバックアドレス(127.0.0.1)宛のTCPソケット(IPv4)の方がUNIXドメインソケットの方が速かったんですよ。
今までプロセス間通信としてUNIXドメインソケットを愛用してきただけに衝撃的でした。

以下結果です。

データ[KiB]
(各100万回)
TCP[sec]UNIX[sec]
11.01.33
41.562.17
164.206.91

一応各10回ずつの測定で、docker上のCentOS7での結果です。テストコードはboost等のライブラリは使用していない生のCで書いてます。

UNIXドメインソケットの方が速いと今まで信じてきていたので本当に衝撃の結果でした(2回目)。


以下、テストに使用したソースコードです。

サーバ側ソース

クライアント側ソース

本当にTCPソケットの方が速いのか、docker上だからなのか、テストコードがおかしいのか…等を含め追加で調査したいと思います。
なにかご存知の方がいらしたら教えてください。。。

午前二時のテンションで検証なんてするもんじゃないな…そうだ踏切でも行ってこよう(錯乱)

Leave a Reply

Your email address will not be published. Required fields are marked *