Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
世界最速級 memcached 互換サーバー作った
Search
yasukata
December 06, 2025
Technology
680
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
910
AsiaBSDCon 2026 Keynote1
yasukata
0
110
NIC の高速化とシステムソフトウェア研究 ~ 2010 年くらいからの振り返り ~
yasukata
0
81
Other Decks in Technology
See All in Technology
Classmethod Company Deck
satoshi7
0
210
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
260
継続的なAIコスト最適化
bgpat
1
300
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
160
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
500
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
140
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
310
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
720
しろおびから始める!ログ活用の第一歩
shumei_ito
0
930
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
140
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
490
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
560
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
560
Navigating Weather and Climate Data
rabernat
0
550
Deep Space Network (abreviated)
tonyrice
0
370
A designer walks into a library…
pauljervisheath
211
25k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
700
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 ⽇