Recommended
PDF
PPTX
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について(for comsys 2019 ver.)
PDF
PPTX
PDF
PDF
PDF
PDF
不揮発性メモリ(PMEM)を利用したストレージエンジンの話 #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ
PDF
PDF
噛み砕いてKafka Streams #kafkajp
PDF
PDF
プログラマ目線から見たRDMAのメリットとその応用例について
PDF
PDF
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
PPTX
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
PPTX
PDF
PDF
PDF
PDF
PPTX
PDF
Intel DPDK Step by Step instructions
More Related Content
PDF
PPTX
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について(for comsys 2019 ver.)
PDF
PPTX
PDF
PDF
PDF
What's hot
PDF
不揮発性メモリ(PMEM)を利用したストレージエンジンの話 #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ
PDF
PDF
噛み砕いてKafka Streams #kafkajp
PDF
PDF
プログラマ目線から見たRDMAのメリットとその応用例について
PDF
PDF
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
PPTX
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
PPTX
PDF
PDF
PDF
PDF
Viewers also liked
PPTX
PDF
Intel DPDK Step by Step instructions
PDF
OpenVZ - Linux Containers:第2回 コンテナ型仮想化の情報交換会@東京
PDF
cassandra 100 node cluster admin operation
PDF
PPTX
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
PDF
PDF
Similar to Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
PDF
PDF
PDF
PEZY-SC programming overview
PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」
PDF
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
PDF
PDF
[DDBJing31] 軽量仮想環境を用いてNGSデータの解析再現性を担保する
PPT
PPTX
Benchmark during different architecture cloud IBM z Systems vs Intel Xeon
PDF
PDF
OSvのご紹介 in OSC2014 Tokyo/Fall
PDF
PDF
OSvのご紹介 in
Java 8 HotSpot meeting
PDF
Open stack reference architecture v1 2
PPT
PDF
Kernel vm study_2_xv6_scheduler_part1_revised
PDF
20121119.dodai projectの紹介
PDF
PDF
PDF
Data Center As A Computer 2章前半
More from Takuya ASADA
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Implements BIOS emulation support for BHyVe
PDF
PDF
Presentation on your terminal
PDF
PDF
BHyVe: The BSD Hypervisor
PDF
PDF
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
PDF
PDF
PDF
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
PDF
PDF
PDF
Recently uploaded
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク 1. 2. 3. OSv?
• http://osv.io
• http://github.com/cloudius-systems/osv/
• @CloudiusSystems
• JavaVMやmemcachedなど、単一プロセス=単一アプリケーションだけ
を仮想マシン上で実行するための超軽量OS
• Linuxアプリケーションとの互換性を提供
• フルサイズのOSとは構造の異なる薄いレイヤ
• Linuxカーネルは不使用(コア部分はフルスクラッチ)
• 速い、軽い、管理しやすい が目標
OpenJDK
OSv kernel
FBSD code
ZFS
TCP/
IP
COM
port
virtio-
blk
virtio-
net
clockACPI
sched
uler
ramfs
VFS
MM
libc
ELF
loader
syscall
emu
libjvm.so
java.so
Java apps
LuaVM
CLI
REST
server
4. 5. 6. 7. 8. Seastarが提案する新しいプログラミングモデル
• シェアードナッシング方式
• シングルスレッドな非同期エンジンを各CPUで実行
• 処理は小さなタスクとして記述、非同期エンジンがスケジュール&実行
• データは共有しない
• CPU間の通信は全てメッセージパッシングで行う
• ネットワークIOにおいてはDPDKを用いてカーネルをバイパス
フルスクラッチで実装されたTCP/IPエンジンを非同期エンジンで実行
• no thread, no context switch, no locking
Application
TCP/IP
Task Scheduler
queuequeuequeuequeuequeuesmp queue
NIC
Queue
DPDK
Kernel
(isn’t
involved)
Userspace
Application
TCP/IP
Task Scheduler
queuequeuequeuequeuequeuesmp queue
NIC
Queue
DPDK
Kernel
(isn’t
involved)
Userspace
Application
TCP/IP
Task Scheduler
queuequeuequeuequeuequeuesmp queue
NIC
Queue
DPDK
Kernel
(isn’t
involved)
Userspace
Application
TCP/IP
Task Scheduler
queuequeuequeuequeuequeuesmp queue
NIC
Queue
DPDK
Kernel
(isn’t
involved)
Userspace
9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 簡単なfuture/promiseの例
future<int> get(); // 最終的にintが生成される事をpromiseする
future<> put(int) // intを入力する事をpromiseする
void f() {
get().then([] (int value) { // .then()でget()が実行完了した時の処理をラムダ式で定義
put(value + 1).then([] { // .then()でput(int)が完了した時の処理をラムダ式で定義
std::cout << “value stored successfullyn”; // put(value+1)が完了したらstdoutにメッセージ出力
});
});
}
19. Continuation
future<int> get(); // 最終的にintが生成される事をpromiseする
future<> put(int) // intを入力する事をpromiseする
void f() {
get().then([] (int value) {// .then()でget()が実行完了した時の処理をラムダ式で定義
return put(value + 1); // put()はfutureなのでputが実行完了するまでこのラムダ式は終了しない
}).then([] {// .then()でget().then()が実行完了した時の処理をラムダ式で定義
std::cout << "value stored successfullyn";
});
}
20. UDP Server
ipv4_addr listen_addr{port};
chan = engine().net().make_udp_channel(listen_addr);
keep_doing([this] {
return chan.receive().then([this] (udp_datagram dgram) {
return chan.send(dgram.get_src(), std::move(dgram.get_data())).then([this] {
n_sent++;
});
});
});
21. TCP Server
engine().listen(make_ipv4_address(addr), lo).accept().then([this, which] (connected_socket fd, socket_address addr) mutable {
input_stream<char> read_buf(fd.input());
output_stream<char> write_buf(fd.output());
return read_buf.read_exactly(4).then([this] (temporary_buffer<char> buf) {
auto cmd = std::string(buf.get(), buf.size());
if (cmd == str_a) {
return do_something_a();
}else if(cmd == str_b) {
return do_something_b();
}
});
});
22. Exception handling
void f() {
receive().then([] (buffer buf) {
return process(parse(std::move(buf));
}).rescue([] (auto get_ex) {
try {
get_ex();
} (catch std::exception& e) {
// your handler goes here
}
});
}
23. 24. Zero copy TX
pair<future<size_t>, future<temporary_buffer>> socket::write(temporary_buffer);
• 最初のfutureはTCPウインドウがデータ送信可能な状態になったらreadyになる
• 次のfutureはバッファが解放可能になったらreadyになる
• どの順序でcompleteしても問題無い
25. 複数CPUで実行
auto server = new distributed<udp_server>;
server->start().then([server = std::move(server), port] () mutable {
server->invoke_on_all(&udp_server::start, port);
}).then([port] {
std::cout << "Seastar UDP server listening on port " << port << " ...n";
});
26. 27. 28. 29. 30. どこがタスクになるのか
engine().listen(make_ipv4_address(addr), lo).accept().then([this, which] (connected_socket fd, socket_address addr) mutable {
input_stream<char> read_buf(fd.input());
output_stream<char> write_buf(fd.output());
return read_buf.read_exactly(4).then([this] (temporary_buffer<char> buf) {
auto cmd = std::string(buf.get(), buf.size());
if (cmd == str_a) {
return do_something_a();
}else if(cmd == str_b) {
return do_something_b();
}
});
});
丸で囲った部分(then()に渡されるfutureの部分)がそれぞれランキューに登録される
31. 32. 33. 34. 35. 36. 37. 選べる実行環境
• OS
• Linux on baremetal
• Linux on VM
• OSv on VM
• ネットワークバックエンド
• DPDK + Seastarネットワークスタック
• vhost-net + Seastarネットワークスタック
• Xen + Seastarネットワークスタック
• OSのネットワークスタック(ソケットAPI)
• ブロックバックエンド
• OSのファイルシステム
38. Seastar on OSv
• 開発中
• ネットワークスタックを迂回、直接仮想NICへアクセス
• SR-IOV対応可
• ハードウェアを限定し、BIOS周りのコードにワークアラウンド
パッチを当てる事によりベアメタル対応可(未実装)
Seastar
OSv kernel
FBSD code
ZFS
TCP/
IP
COM
port
virtio-
blk
virtio-
net
clockACPI
sched
uler
ramfs
VFS
MM
libc
ELF
loader
syscall
emu
Seastar
DPDK
Seastar apps
39. 40. 41. 42. ベンチマーク環境
■ 2x Xeon E5-2695v3, 2.3GHz
35M cache, 14 cores
(28 cores total, 56 HT)
■ 8x 8 = 64 GB DDR4 Micron memory
■ Intel Ethernet CNA XL710-QDA1(10GbE/40GbE)
43. 44. 45. 46.