Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
世界最速級 memcached 互換サーバー作った
Search
yasukata
December 06, 2025
Technology
0
470
世界最速級 memcached 互換サーバー作った
2025 年12 月 6 日 Kernel/VM探検隊@北陸 Part 8 発表資料
yasukata
December 06, 2025
Tweet
Share
More Decks by yasukata
See All by yasukata
NIC の高速化とシステムソフトウェア研究 ~ 2010 年くらいからの振り返り ~
yasukata
0
33
Other Decks in Technology
See All in Technology
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
330
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
14k
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
290
タスク管理も1on1も、もう「管理」じゃない ― KiroとBedrock AgentCoreで変わった"判断の仕事"
yusukeshimizu
4
1.5k
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
140
トップマネジメントとコンピテンシーから考えるエンジニアリングマネジメント
zigorou
4
720
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
110
Windows ネットワークを再確認する
murachiakira
PRO
0
290
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
AWSをCLIで理解したい! / I want to understand AWS using the CLI
mel_27
2
160
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.5k
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
2.9k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Designing for humans not robots
tammielis
254
26k
Chasing Engaging Ingredients in Design
codingconduct
0
130
Designing for Timeless Needs
cassininazir
0
150
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
The untapped power of vector embeddings
frankvandijk
2
1.6k
How to make the Groovebox
asonas
2
2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
320
Technical Leadership for Architectural Decision Making
baasie
3
270
Between Models and Reality
mayunak
2
230
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
Transcript
世界最速級 memcached 互換サーバー作った yasukata Kernel/VM探検隊@北陸 Part 8 ‒ 2025 年
12 ⽉ 6 ⽇ https://github.com/yasukata/mimicached
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
キーバリューペアを 保存してください
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント キーバリューペアを 保存してください key: “foo”
value: “bar”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント 保存できました key: “foo” value:
“bar”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント キーバリューペアを 保存してください key: “hoge”
value: “moge” key: “foo” value: “bar”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント キーバリューペアを 保存してください key: “hoge”
value: “moge” key: “foo” value: “bar”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント 保存できました key: “foo” value:
“bar” key: “hoge” value: “moge”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge”
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” キー“hoge”に対応する バリューを教えてください
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” キー“hoge”に対応する バリューを教えてください キーが合致しない
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” キーが合致する キー“hoge”に対応する バリューを教えてください
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” “moge” です
memcached • キーとバリューのペアを保存する機能を提供 memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” データを主にメモリ (DRAM) 上に配置するため ディスクを主な記憶装置とするストレージシステムと⽐較して⾼速
⽬標 • スループットで最速を⽬指す memcached サーバー クライアント key: “foo” value: “bar”
key: “hoge” value: “moge” 指標:1秒間にどれだけ多くのリクエストへ応答できるか
既存の memcached 実装のスループット • 2台の同じ構成のマシン • CPU: 2つの 16-core Intel
Xeon Gold 6326 CPU @ 2.90GHz • NIC: Mellanox ConnectX-5 100 Gbps NIC • OS: Linux 6.8 • ⽚⽅のマシンで memcached サーバーを実⾏ • memcached 1.6.39 • もう⼀⽅のマシンでベンチマークプログラムを実⾏ • https://github.com/yasukata/mimicached?tab=readme-ov-file#network-benchmark-client • ベンチマークプログラムは 32 CPU コアを利⽤
既存の memcached 実装のスループット キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 %
(全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:32 0 50000 100000 150000 200000 250000 1 スループット [リクエスト毎秒] CPU コア数 memcached memcached が 1CPU コアを利⽤する場合は 概ね 220 K リクエスト毎秒
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 リクエスト
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 TCP/IP 受信処理 リクエスト
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 TCP/IP 受信処理 memcached プロトコル パース リクエスト
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です TCP/IP 送信処理
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です TCP/IP 送信処理 各要素の⽐率はどれくらい?
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です TCP/IP 送信処理 これらを含まない場合の性能を測ってみる
応答処理を構成する主な要素 サーバー クライアント 時間 TCP ping TCP/IP 受信処理 TCP pong
TCP/IP 送信処理 これらを含まない場合の性能を測ってみる
応答処理を構成する主な要素 サーバー クライアント 時間 TCP ping TCP/IP 受信処理 TCP pong
TCP/IP 送信処理 これらを含まない場合の性能を測ってみる
応答処理を構成する主な要素 サーバー クライアント 時間 TCP ping TCP/IP 受信処理 TCP pong
TCP/IP 送信処理 これらを含まない場合の性能を測ってみる サーバーアプリの処理は なるべく⼩さくなるように データを受け取ったら データを送り返すだけにする
応答処理を構成する主な要素 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト
バリューサイズ:8バイト 並列 TCP 接続数:32 0 50000 100000 150000 200000 250000 1 スループット [リクエスト毎秒] CPU コア数 memcached memcached が 1CPU コアを利⽤する場合は 概ね 220 K リクエスト毎秒
応答処理を構成する主な要素 memcached が 1CPU コアを利⽤する場合は 概ね 220 K リクエスト毎秒 0
50000 100000 150000 200000 250000 300000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:32 TCP ping-pong: 16 バイトのデータを往復 TCP で ping-pong のように データを往復させるだけの場合は 約 250 K リクエスト毎秒
応答処理を構成する主な要素 memcached が 1CPU コアを利⽤する場合は 概ね 220 K リクエスト毎秒 0
50000 100000 150000 200000 250000 300000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:32 TCP ping-pong: 16 バイトのデータを往復 memcached の場合と 単純なデータの往復の場合の 差は⼤きくない TCP で ping-pong のように データを往復させるだけの場合は 約 250 K リクエスト毎秒
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です TCP/IP 送信処理 memcached の場合と 単純なデータの往復の場合の 差は⼤きくない
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください TCP/IP 受信処理 memcached プロトコル パース キー バリュー 検索 memcached プロトコル 応答⽣成 “moge” です TCP/IP 送信処理 これらのための処理時間の⽐率はおそらく⼩さい memcached の場合と 単純なデータの往復の場合の 差は⼤きくない
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください “moge” です これらのための処理時間の⽐率はおそらく⼩さい memcached の場合と 単純なデータの往復の場合の 差は⼤きくない TCP/IP 受信処理 TCP/IP 送信処理 イメージとしてはこんな感じ
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください “moge” です TCP/IP 受信処理 TCP/IP 送信処理 TCP/IP 通信の処理時間を短くできれば単位時間あたりに もっとたくさんのリクエストに応答できるのでは?
応答処理を構成する主な要素 memcached サーバー クライアント key: “foo” value: “bar” key: “hoge”
value: “moge” 時間 キー“hoge”に対応する バリューを教えてください “moge” です TCP/IP 通信の処理時間を短くできれば単位時間あたりに もっとたくさんのリクエストに応答できるのでは? イメージとしてはこんな感じ
既存の memcached 実装の構成 TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
memcached ユーザー空間 カーネル
既存の memcached 実装の構成 TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
memcached ユーザー空間 カーネル 研究コミュニティでは 汎⽤ OS の TCP/IP スタック実装の 性能の改善の余地が指摘されている
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
memcached ユーザー空間 カーネル TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ mimicached ユーザー空間 主な構成要素を全てユーザー空間に配置
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached 主な構成要素を全てユーザー空間に配置 性能に最適化された実装を利⽤ ポイント
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached DPDK を利⽤ ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 https://github.com/yasukata/iip-dpdk
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 50000 100000 150000 200000 250000 300000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) DPDK を利⽤ https://github.com/yasukata/iip-dpdk
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 50000 100000 150000 200000 250000 300000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) DPDK を利⽤ https://github.com/yasukata/iip-dpdk Linux カーネルの TCP/IP スタックを利⽤
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 500000 1000000 1500000 2000000 2500000 3000000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) TCP ping-pong (iip) DPDK を利⽤ https://github.com/yasukata/iip-dpdk Linux カーネルの TCP/IP スタックを利⽤
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 500000 1000000 1500000 2000000 2500000 3000000 1 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) TCP ping-pong (iip) 約 3 M 約 250 K DPDK を利⽤ https://github.com/yasukata/iip-dpdk 単純な TCP メッセージの 往復では 10 倍以上の 性能向上
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 10000000 20000000 30000000 40000000 50000000 60000000 70000000 1 16 32 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) TCP ping-pong (iip) マルチコア環境 でも⾼い性能 DPDK を利⽤ https://github.com/yasukata/iip-dpdk
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 10000000 20000000 30000000 40000000 50000000 60000000 70000000 1 16 32 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) TCP ping-pong (iip) マルチコア環境 でも⾼い性能 DPDK を利⽤ https://github.com/yasukata/iip-dpdk なんでそんなに速くなるの?と思われましたら https://www.iij.ad.jp/dev/report/iir/060/02.html https://eng-blog.iij.ad.jp/archives/25852 https://speakerdeck.com/yasukata/nic-nogao-su-hua-tosisutemusohutoueayan-jiu-2010-nian-kuraikaranozhen-rifan-ri 関連研究について ⾃作 TCP/IP スタック実装について
mimicached: memcached 互換サーバー TCP/IP スタック memcached プロトコルパーサー キーバリュー操作 NIC デバイスドライバ
mimicached ⾃作 memcached 互換サーバー https://github.com/yasukata/memcached-protocol-parser https://github.com/yasukata/iip https://github.com/yasukata/mimicached ⾃作ハッシュテーブル実装 ⾃作プロトコルパーサー実装 iip: ⾃作 TCP/IP スタック実装 0 10000000 20000000 30000000 40000000 50000000 60000000 70000000 1 16 32 スループット [リクエスト毎秒] CPU コア数 memcached TCP ping-pong (Linux TCP) TCP ping-pong (iip) マルチコア環境 でも⾼い性能 DPDK を利⽤ https://github.com/yasukata/iip-dpdk この TCP/IP スタックを使うと memcached のワークロードは どれくらい速くなる?
0 500000 1000000 1500000 2000000 1 スループット [リクエスト毎秒] CPU コア数
memcached mimicached 計測結果 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:1 CPUコアあたり 32 接続
0 10000000 20000000 30000000 40000000 50000000 1 16 32 スループット
[リクエスト毎秒] CPU コア数 memcached mimicached 計測結果 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:1 CPUコアあたり 32 接続
0 10000000 20000000 30000000 40000000 50000000 1 16 32 スループット
[リクエスト毎秒] CPU コア数 memcached mimicached 計測結果 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:1 CPUコアあたり 32 接続 10 倍以上のスループットの向上
0 10000000 20000000 30000000 40000000 50000000 1 16 32 スループット
[リクエスト毎秒] CPU コア数 memcached mimicached 計測結果 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:1 CPUコアあたり 32 接続 注意:向上率はワークロード依存 以下はキーバリュー操作時間が短く ⽐較的⼤きな向上率になりやすい ワークロード設定 10 倍以上のスループットの向上
0 10000000 20000000 30000000 40000000 50000000 1 16 32 スループット
[リクエスト毎秒] CPU コア数 memcached mimicached 計測結果 キーバリューペア数:1000 件 リクエストの分布:⼀様にランダム SET/GET ⽐率:GET 100 % (全件ヒット) キーサイズ:8バイト バリューサイズ:8バイト 並列 TCP 接続数:1 CPUコアあたり 32 接続 注意:向上率はワークロード依存 以下はキーバリュー操作時間が短く ⽐較的⼤きな向上率になりやすい ワークロード設定 他のワークロード設定でも概ね ⼤きな性能の改善は⾒られます 10 倍以上のスループットの向上
世界最速級? • 個⼈の観測範囲では、以下のカテゴリにおいては世界最速級 • 実装のカテゴリ • TCP 接続を介した memcached リクエストに応答できる
• CPU が TCP/IP スタックと memcached の処理を実⾏する
世界最速級? • 個⼈の観測範囲では、以下のカテゴリにおいては世界最速級 • 実装のカテゴリ • TCP 接続を介した memcached リクエストに応答できる
• CPU が TCP/IP スタックと memcached の処理を実⾏する • そのように考える理由 • ⾼速な TCP/IP スタック実装を使った上記カテゴリの実装がそもそも少ない
世界最速級? • 個⼈の観測範囲では、以下のカテゴリにおいては世界最速級 • 実装のカテゴリ • TCP 接続を介した memcached リクエストに応答できる
• CPU が TCP/IP スタックと memcached の処理を実⾏する • そのように考える理由 • ⾼速な TCP/IP スタック実装を使った上記カテゴリの実装がそもそも少ない • ⾼速な TCP/IP スタックを使って何かを作ると雑に世界最速級を名乗れそう
世界最速級? • 個⼈の観測範囲では、以下のカテゴリにおいては世界最速級 • 実装のカテゴリ • TCP 接続を介した memcached リクエストに応答できる
• CPU が TCP/IP スタックと memcached の処理を実⾏する • そのように考える理由 • ⾼速な TCP/IP スタック実装を使った上記カテゴリの実装がそもそも少ない • ⾼速な TCP/IP スタックを使って何かを作ると雑に世界最速級を名乗れそう • ⼿元の計測では、iip 単体の性能は他の⾼速な実装と⽐べても低くない • https://github.com/yasukata/bench-iip?tab=readme-ov-file#performance-numbers-of-other-tcpip-stacks
世界最速級? • 個⼈の観測範囲では、以下のカテゴリにおいては世界最速級 • 実装のカテゴリ • TCP 接続を介した memcached リクエストに応答できる
• CPU が TCP/IP スタックと memcached の処理を実⾏する • そのように考える理由 • ⾼速な TCP/IP スタック実装を使った上記カテゴリの実装がそもそも少ない • ⾼速な TCP/IP スタックを使って何かを作ると雑に世界最速級を名乗れそう • ⼿元の計測では、iip 単体の性能は他の⾼速な実装と⽐べても低くない • https://github.com/yasukata/bench-iip?tab=readme-ov-file#performance-numbers-of-other-tcpip-stacks 他のこっちの実装の⽅が圧倒的に速そうなどありましたら 改善の参考にしたいので是⾮教えていただきたいです
注意:実装の優劣について • キャッシュサーバーの性能の指標はスループットだけではない • 例:計算コストの⾼いキャッシュ追い出しアルゴリズムが応答速度を 低下させたとしても、キャッシュヒット率の⾼さから、キャッシュ サーバーを利⽤するシステム全体の性能が⾼い場合は考えられる • ワークロードや利⽤可能なメモリの容量にも影響される •
特定の指標だけで実装の優劣を判断するのはおそらく不適切で あるという点にご注意ください
まとめ • ⾼速な TCP/IP スタックを利⽤することで⾼いスループットを 達成可能な memcached 互換サーバーを作りました • ⾼速化により、各環境において⽬標とされる応答性能の達成に必要な
計算機リソースを削減する効果が期待できると思われます • インターンシップのご案内 • 本発表の実装には機能および性能⾯で改善の余地があると考えており ⼀緒に改善に取り組んでくださる学⽣の⽅を募集しております • 募集ページ:https://www.iijlab.net/career/internship.html • 応募締切: 2026 年 1 ⽉ 31 ⽇