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
640
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
世界最速級 memcached 互換サーバー作った
2025 年12 月 6 日 Kernel/VM探検隊@北陸 Part 8 発表資料
yasukata
December 06, 2025
More Decks by yasukata
See All by yasukata
カーネルバイパスによる通信高速化の基本 / iijlab seminar 2026-03-24
yasukata
0
720
AsiaBSDCon 2026 Keynote1
yasukata
0
88
NIC の高速化とシステムソフトウェア研究 ~ 2010 年くらいからの振り返り ~
yasukata
0
72
Other Decks in Technology
See All in Technology
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
490
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
150
SRE Next 2026 何でも屋からの脱却
bto
0
1k
Making sense of Google’s agentic dev tools
glaforge
1
290
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
110
GoでCコンパイラを作った話
repunit
0
130
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
1k
Network Firewallやっていき!
news_it_enj
0
170
CIで使うClaude
iwatatomoya
0
290
発表と総括 / Presentations and Summary
ks91
PRO
0
140
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
830
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Facilitating Awesome Meetings
lara
57
7k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
How GitHub (no longer) Works
holman
316
150k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Music & Morning Musume
bryan
47
7.3k
The Spectacular Lies of Maps
axbom
PRO
1
860
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
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 ⽇