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
380
世界最速級 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
27
Other Decks in Technology
See All in Technology
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
520
技術選定、下から見るか?横から見るか?
masakiokuda
0
190
Vivre en Bitcoin : le tutoriel que votre banquier ne veut pas que vous voyiez
rlifchitz
0
170
スクラムを一度諦めたチームにアジャイルコーチが入ってどう変化したか / A Team's Second Try at Scrum with an Agile Coach
kaonavi
0
240
AIと融ける人間の冒険
pujisi
0
120
「アウトプット脳からユーザー価値脳へ」がそんなに簡単にできたら苦労しない #RSGT2026
aki_iinuma
11
5.3k
形式手法特論:コンパイラの「正しさ」は証明できるか? #burikaigi / BuriKaigi 2026
ytaka23
16
6.1k
【Agentforce Hackathon Tokyo 2025 発表資料】みらいシフト:あなた働き方を、みらいへシフト。
kuratani
0
120
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Kusakabe_面白いダッシュボードの表現方法
ykka
0
240
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
3k
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
1k
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
61
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Utilizing Notion as your number one productivity tool
mfonobong
2
200
Information Architects: The Missing Link in Design Systems
soysaucechin
0
740
Claude Code のすすめ
schroneko
67
210k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
200
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
700
AI: The stuff that nobody shows you
jnunemaker
PRO
2
170
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
51k
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 ⽇