SlideShare a Scribd company logo
1 of 19
Download to read offline
OSS Development Study Meeting-06 1
Memcached + SELinux engine
OSS開発勉強会-06
KaiGai Kohei (@kkaigai)
<kaigai@kaigai.gr.jp>
OSS Development Study Meeting-06 2
Memcachedの特徴
Key-Valueストア
<Key>に対応する<Value>を保存/取得するだけの機能
トランザクション、検索式、型定義...など無い! 速さこそ正義
分散システム
Memcachedサーバ自体に一切の分散機能は無い
ライブラリがKey値に応じたMemcachedサーバを選択して接続
memcached プロトコル
テキストベースのシンプルなプロトコル
http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt
多くの互換Key-Valueストア
Tokyo Tyrant, Repocached, Flared, KumoFS, ...
OSS Development Study Meeting-06 3
Memcachedシステムイメージ
Web-Apps
libmemcached
Web-Server
Memcached
PostgreSQL
User
ライブラリが接続先の
Memcachedサーバを選択
ライブラリが接続先の
Memcachedサーバを選択
個々のMemcachedサーバは
互いに独立にKey-Valueペアを
格納する
個々のMemcachedサーバは
互いに独立にKey-Valueペアを
格納する
OSS Development Study Meeting-06 4
Memcached 内部構造
プロトコル解析部
Key-Valueストレージ
これ、Key-Valueストレージの部分を
モジュール化できるよね?
libevent
プロトコル処理部
Key-Value
ストレージ
Key-Value
ストレージ
with
New Feature
get_item()
hash_item *
GET aaa
‘xyzxyz’
OSS Development Study Meeting-06 5
Memcached Engine (1/2)
Engine Interface v1
次期メジャーバージョン(v1.6.x系)の新機能
typedef struct engine_interface_v1 {
:
/**
* Retrieve an item.
*
* @param handle the engine handle
* @param cookie The cookie provided by the frontend
* @param item output variable that will receive the located item
* @param key the key to look up
* @param nkey the length of the key
* @param vbucket the virtual bucket id
*
* @return ENGINE_SUCCESS if all goes well
*/
ENGINE_ERROR_CODE (*get)(ENGINE_HANDLE* handle,
const void* cookie,
item** item,
const void* key,
const int nkey,
uint16_t vbucket);
こんな感じでInterfaceが
定義されている
こんな感じでInterfaceが
定義されている
OSS Development Study Meeting-06 6
Memcached Engine (2/2)
オリジナルRFC
Memcache Engine Interface (Dec, 18 2008)
http://code.google.com/p/memcached/wiki/EngineInterface
Engine-Interfaceとは?
Key-Valueペアの管理をプラグインに任せる
何がいいのか?
独自の拡張機能ごとに “memcachedクローン” を作らずに済む
Persistent Storage, Name Space, Access Control, etc...
本体 ⇔ プラグイン間のインターフェースを規定
ENGINE_HANDLE_V1構造体: 本体 プラグインの呼び出し
SERVER_HANDLE_V1構造体: プラグイン 本体の呼び出し
OSS Development Study Meeting-06 7
議論を通じた仕様の変更
socket-fdを取得するServerAPIの追加
SELinuxはgetpeercon(3)にsockfdを与えて、
接続元プロセスの権限 (=security context) を取得するため
SERVER_HANDLE_V1構造体 に get_socket_fd() が追加
->delete() の手順を変更
従来の実装
1. ->get() に Key値を与えて呼び出し、本体は item *ポインタを取得
2. ->delete()に item *ポインタを与えてKey-Valueペアの削除
問題点
->get()内で評価すべきパーミッションは、
“read権限”なのか、それとも”delete”権限なのか、特定できない
修正後の実装
->delete() にKey値を与えるよう ENGINE_HANDLE_V1構造体を修正
OSS Development Study Meeting-06 8
Memcached and Security
できる事はほとんど何もない
絶対に外部ネットワークから接続可能にしちゃダメ
一応、SASL認証で接続の可否を決める事はできる
あと、root権限で走らせてはならない
Memcached Security; by Dustin Sallings
http://dustin.github.com/2010/08/08/memcached-security.html
Memcached
Web Server
Web Apps (1) Firewalling,
always
(1) Firewalling,
always
(2) SASL auth,
if needed
(2) SASL auth,
if needed
(3) Not run as root(3) Not run as root
OSS Development Study Meeting-06 9
SELinuxによるアクセス制御
domain of
classified processes
domain of
unclassified processes
inter process
communication channels
Filesystem
classified
information
unclassified
information
Networks
memcached RDBMS
SELinux
Security
Policy
“機密” 情報は、どこに格納
しても“機密”情報として扱う
OSS Development Study Meeting-06 10
SELinux対応Memcached
必要機能
Key-Valueペアを格納し、高速に探索する
(できれば Persistent Storage 機能もサポート)
Key-Valueペアにセキュリティコンテキストを関連付け
本体側からの呼び出し時にアクセス制御を行う
方針
Key-Valueペアは mmap(2) した領域に配置
容易に Persistent Storage 化可能
B+Treeインデックスを用いる
サイズの増減に柔軟に対処できる。順スキャン可能。
OSS Development Study Meeting-06 11
selinux_engine.so
selinux_engine.so の構成
mblock.c
mbtree.c
mcache.c
interface.c selinux.c
メモリブロックの
alloc()/free()
メモリブロックの
alloc()/free()
B+木インデックスB+木インデックス
Key/Valueペア管理、
セキュリティラベル
Key/Valueペア管理、
セキュリティラベル
Engine V1 の
フック関数
Engine V1 の
フック関数
SELinuxを用いた
アクセス制御
SELinuxを用いた
アクセス制御
Memcached
本体
Engine V1
インターフェース
OSS Development Study Meeting-06 12
mblock.c
mmap(2)した領域を 2^N サイズ単位で割り当て・解放する
Buddyアルゴリズムを用いたメモリ管理
シンプルで領域の分割併合を行いやすい方法
最悪の場合、メモリ利用率は 50% そこそこに…。
別の mchunk_t を参照する際にポインタを使えない。
uint64_t 幅のオフセット値を使用する
MCHUNK_TAG_FREE
uint16 magic
uint8 mclass
uint8 tag
mlist_t list
uint64_t prev
uint64_t next
MCHUNK_TAG_ITEM
uint16 magic
uint8 mclass
uint8 tag
uint16_t flags
uint16_t keylen
uint32_t datalen
uint32_t secid
uint32_t exptime
uint8_t data[0]
MCHUNK_TAG_BTREE
uint16 magic
uint8 mclass
uint8 tag
uint64_t parent
uint8_t is_leaf
uint16_t nkeys
uint32_t keys[N]
uint64_t items[N+1]
MCHUNK_TAG_LABEL
uint16 magic
uint8 mclass
uint8 tag
uint32_t secid
uint32_t refcount
uint8_t value[0]
mchunk_t 構造体の定義(tag値による多様性を持つ)
OSS Development Study Meeting-06 13
mbtree.c
uint32_t型のキーと、uint64_t型の値からなるB+木構造
uint32_t : 真のキーをハッシュ化した値
uint64_t : ITEMやLABELチャンクへのオフセット値
ハッシュと比べ、データ量が増えた時の再編コストが安い
default_engine.so は、アイテム数に応じてハッシュスロットの数を増減する
V0 V1
K0
VN-1 VN
KN-1
V0 V1
K0
V3V2
K1 K2
V0 V1
K0
V3V2
K1 K2
V0
K0
V1
K1
V2
K2
V3 V0
K0
V1
K1
V2
K2
V3 V0
K0
V1
K1
V2
K2
V3 V0
K0
V1
K1
V2
K2
V3
null
MCHUNK_TAG_ITEM MCHUNK_TAG_LABEL
OSS Development Study Meeting-06 14
mcache.c
Key-Valueペアを表現するデータ構造
tsid パース済みの MCHUNK_TAG_LABEL
mchunk MCHUNK_TAG_ITEM へのポインタ
データ構造の目的
Key-Valueに対応するセキュリティラベルを毎度々々探索せずに済むように
最近使った Key-Value を疑似LRUで繋いでおく
refcnt の操作によって、mmap(2)したページが Dirty にならないように
Dirtyになると、ファイルをmmap(2)した時に I/O が発生するので。
mcache_t 構造体
int refcnt
mcache_t *next
bool is_hot
security_id_t tsid
mchunk_t *mchunk
mcache_t 構造体 mcache_t 構造体
mcacheハッシュ表
MCHUNK_TAG_ITEM
MCHUNK_TAG_LABEL
OSS Development Study Meeting-06 15
interface.c
create_instance()で、コールバックの関数ポインタを登録
イベントに応じて登録した関数が呼び出される
SETコマンド処理の例
process_update_command()
SETコマンドのパース
クライアントからのデータ入力受付準備
->allocate() メソッド
入力データ用のItemバッファを確保
->store() メソッド
利用者の write 権限をチェックする
新しいItemをB+木に追加
(必要なら)古いItemをB+木から削除
->release() メソッド
参照カウンタをデクリメント
B+木に登録されていなければ、
Itemを開放する
complete_update_ascii()
データを読み込んだItemバッファを
インデックスに登録する処理
(必要なら古いItemを削除する)
確保したItemバッファに対して
クライアントからのデータを入力
利用者に store() の実行結果を返却
STORED/EXISTS/NOT_FOUND/...
本体側 モジュール側
OSS Development Study Meeting-06 16
selinux.c
アクセス制御を行う関数群
interface.c 内の各メソッドから呼び出され、
SELinuxにアクセス制御の問い合わせを行う。
‘denied’の結果が返却されれば、ERROR_EACCESSを呼出し元に返す
Access Vector Cache (AVC)を用いて、システムコール回数を最小化
mselinux_check_write()
avc_has_perms()
on cache?
security_compute_av()
SELinux
security
policy
Yes
No
System-Call
AccessControlDecision
ERROR_SUCCESS
or
ERROR_EACCESS
Query
OSS Development Study Meeting-06 17
ベンチマーク
Iteration of GET/SET mixture, 8threads-client, 4core server x 2, Gb-ether
Less significant differences in same network environment
Penalties in IPsec(AH) communication (~20%?)
0 100000 200000 300000
No IPsec
IPsec(AH)
IPsec(ESP)
number of commands in 30sec
default selinux
0 100000 200000 300000
No IPsec
IPsec(AH)
IPsec(ESP)
number of commands in 30sec
default selinux
251,485251,485
191,409191,409
OSS Development Study Meeting-06 18
設定パラメータ
filename=<fname>
<fname> をストレージとして mmap(2) する。デフォルトは匿名マッピング
size = <total_size>
mmap(2)するサイズ。PageSizeの倍数でなければならない。
use_cas = (true|false)
Compare-and-Set操作をサポートするか否か
selinux = (true|false)
SELinuxサポート(アクセス制御)の有効化/無効化
これを無効化すると、ただのストレージ付きMemcachedになってしまう
reclaim = (true|false)
領域の不足時に、既存ItemをReclaimするか否か。
debug = (true|false)
デバッグ出力のON/OFF
OSS Development Study Meeting-06 19
おしまい
Twitterでの質問先
@kkaigai
ソースコードの入手先
% svn co http://sepgsql.googlecode.com/svn/trunk/memcached
% cd memcached
% autoconf
% env CPPFLAGS=-I/path/to/memcached/include ./configure
% make
% su –c ‘make install’
情報源
Coming soon.... ドキュメントを書きましょう ☺

More Related Content

What's hot

輪講_Awamoto_20170601
輪講_Awamoto_20170601輪講_Awamoto_20170601
輪講_Awamoto_20170601pflab
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信zuisener .
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御Yuto Takei
 
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェルYuto Takei
 
Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Hiroki Nakahara
 
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編Satoshi Shimazaki
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。Tetsuya Hasegawa
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Yukio Kumazawa
 
System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理junichi anno
 
Sesanboot ja
Sesanboot jaSesanboot ja
Sesanboot japcwhaha
 
RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料Tetsuya Hasegawa
 

What's hot (12)

輪講_Awamoto_20170601
輪講_Awamoto_20170601輪講_Awamoto_20170601
輪講_Awamoto_20170601
 
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
 
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
 
Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)Verilog-HDL Tutorial (14)
Verilog-HDL Tutorial (14)
 
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用
 
System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理
 
Sesanboot ja
Sesanboot jaSesanboot ja
Sesanboot ja
 
RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料
 
20150418-scugj-scvmm
20150418-scugj-scvmm20150418-scugj-scvmm
20150418-scugj-scvmm
 

Viewers also liked

Environmental benefitspeakenergyefficiency
Environmental benefitspeakenergyefficiencyEnvironmental benefitspeakenergyefficiency
Environmental benefitspeakenergyefficiencyPaul Kuhlman
 
OSS開発勉強会-01
OSS開発勉強会-01OSS開発勉強会-01
OSS開発勉強会-01Kohei KaiGai
 
Ilead 1022 intro2_innovation
Ilead 1022 intro2_innovationIlead 1022 intro2_innovation
Ilead 1022 intro2_innovationChristine Kreger
 
OSS開発勉強会
OSS開発勉強会OSS開発勉強会
OSS開発勉強会Kohei KaiGai
 
OSS開発勉強会-10
OSS開発勉強会-10OSS開発勉強会-10
OSS開発勉強会-10Kohei KaiGai
 

Viewers also liked (6)

Environmental benefitspeakenergyefficiency
Environmental benefitspeakenergyefficiencyEnvironmental benefitspeakenergyefficiency
Environmental benefitspeakenergyefficiency
 
OSS開発勉強会-01
OSS開発勉強会-01OSS開発勉強会-01
OSS開発勉強会-01
 
Ilead 1022 intro2_innovation
Ilead 1022 intro2_innovationIlead 1022 intro2_innovation
Ilead 1022 intro2_innovation
 
OSS開発勉強会
OSS開発勉強会OSS開発勉強会
OSS開発勉強会
 
OSS開発勉強会-10
OSS開発勉強会-10OSS開発勉強会-10
OSS開発勉強会-10
 
Ratllat 1-2
Ratllat 1-2Ratllat 1-2
Ratllat 1-2
 

Similar to OSS開発勉強会-06

memcached + selinux engine
memcached + selinux enginememcached + selinux engine
memcached + selinux engineKohei KaiGai
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズSORACOM, INC
 
EC-CUBEの設計思想について
EC-CUBEの設計思想についてEC-CUBEの設計思想について
EC-CUBEの設計思想についてKentaro Ohkouchi
 
AWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAmazon Web Services Japan
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!Masayuki Ozawa
 
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal LandソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal LandMasakazu Matsushita
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプTech Summit 2016
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGHideki Saito
 
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性kozossakai
 
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮CODE BLUE
 
RoR周辺知識15項目
RoR周辺知識15項目RoR周辺知識15項目
RoR周辺知識15項目saiwaki
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツVMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツNetApp Japan
 
20180630 interact2018 rev1
20180630 interact2018 rev120180630 interact2018 rev1
20180630 interact2018 rev1Takano Masaru
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたSunao Tomita
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINE Corporation
 
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなたCld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなたTech Summit 2016
 

Similar to OSS開発勉強会-06 (20)

memcached + selinux engine
memcached + selinux enginememcached + selinux engine
memcached + selinux engine
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 
EC-CUBEの設計思想について
EC-CUBEの設計思想についてEC-CUBEの設計思想について
EC-CUBEの設計思想について
 
AWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCache
 
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
db tech showcase 2019 SQL Server 2019 最新情報 - SQL Serverの進化をまとめてお届け!
 
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal LandソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプ
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUG
 
OpenStack 101
OpenStack 101OpenStack 101
OpenStack 101
 
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性
 
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
 
RoR周辺知識15項目
RoR周辺知識15項目RoR周辺知識15項目
RoR周辺知識15項目
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツVMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
VMware vForum/VSS2013にて発表されたNetAppセッションコンテンツ
 
20180630 interact2018 rev1
20180630 interact2018 rev120180630 interact2018 rev1
20180630 interact2018 rev1
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなたCld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなた
 

More from Kohei KaiGai

20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_HistoryKohei KaiGai
 
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_APIKohei KaiGai
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrowKohei KaiGai
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_countKohei KaiGai
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0Kohei KaiGai
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCacheKohei KaiGai
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_IndexKohei KaiGai
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGISKohei KaiGai
 
20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGISKohei KaiGai
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_ProcessingKohei KaiGai
 
20200828_OSCKyoto_Online
20200828_OSCKyoto_Online20200828_OSCKyoto_Online
20200828_OSCKyoto_OnlineKohei KaiGai
 
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdwKohei KaiGai
 
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_FdwKohei KaiGai
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_TokyoKohei KaiGai
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.JapanKohei KaiGai
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_BetaKohei KaiGai
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStromKohei KaiGai
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGaiKohei KaiGai
 
20190516_DLC10_PGStrom
20190516_DLC10_PGStrom20190516_DLC10_PGStrom
20190516_DLC10_PGStromKohei KaiGai
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdwKohei KaiGai
 

More from Kohei KaiGai (20)

20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
 
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
 
20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
 
20200828_OSCKyoto_Online
20200828_OSCKyoto_Online20200828_OSCKyoto_Online
20200828_OSCKyoto_Online
 
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw
 
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
 
20190516_DLC10_PGStrom
20190516_DLC10_PGStrom20190516_DLC10_PGStrom
20190516_DLC10_PGStrom
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
 

Recently uploaded

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (12)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

OSS開発勉強会-06

  • 1. OSS Development Study Meeting-06 1 Memcached + SELinux engine OSS開発勉強会-06 KaiGai Kohei (@kkaigai) <kaigai@kaigai.gr.jp>
  • 2. OSS Development Study Meeting-06 2 Memcachedの特徴 Key-Valueストア <Key>に対応する<Value>を保存/取得するだけの機能 トランザクション、検索式、型定義...など無い! 速さこそ正義 分散システム Memcachedサーバ自体に一切の分散機能は無い ライブラリがKey値に応じたMemcachedサーバを選択して接続 memcached プロトコル テキストベースのシンプルなプロトコル http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt 多くの互換Key-Valueストア Tokyo Tyrant, Repocached, Flared, KumoFS, ...
  • 3. OSS Development Study Meeting-06 3 Memcachedシステムイメージ Web-Apps libmemcached Web-Server Memcached PostgreSQL User ライブラリが接続先の Memcachedサーバを選択 ライブラリが接続先の Memcachedサーバを選択 個々のMemcachedサーバは 互いに独立にKey-Valueペアを 格納する 個々のMemcachedサーバは 互いに独立にKey-Valueペアを 格納する
  • 4. OSS Development Study Meeting-06 4 Memcached 内部構造 プロトコル解析部 Key-Valueストレージ これ、Key-Valueストレージの部分を モジュール化できるよね? libevent プロトコル処理部 Key-Value ストレージ Key-Value ストレージ with New Feature get_item() hash_item * GET aaa ‘xyzxyz’
  • 5. OSS Development Study Meeting-06 5 Memcached Engine (1/2) Engine Interface v1 次期メジャーバージョン(v1.6.x系)の新機能 typedef struct engine_interface_v1 { : /** * Retrieve an item. * * @param handle the engine handle * @param cookie The cookie provided by the frontend * @param item output variable that will receive the located item * @param key the key to look up * @param nkey the length of the key * @param vbucket the virtual bucket id * * @return ENGINE_SUCCESS if all goes well */ ENGINE_ERROR_CODE (*get)(ENGINE_HANDLE* handle, const void* cookie, item** item, const void* key, const int nkey, uint16_t vbucket); こんな感じでInterfaceが 定義されている こんな感じでInterfaceが 定義されている
  • 6. OSS Development Study Meeting-06 6 Memcached Engine (2/2) オリジナルRFC Memcache Engine Interface (Dec, 18 2008) http://code.google.com/p/memcached/wiki/EngineInterface Engine-Interfaceとは? Key-Valueペアの管理をプラグインに任せる 何がいいのか? 独自の拡張機能ごとに “memcachedクローン” を作らずに済む Persistent Storage, Name Space, Access Control, etc... 本体 ⇔ プラグイン間のインターフェースを規定 ENGINE_HANDLE_V1構造体: 本体 プラグインの呼び出し SERVER_HANDLE_V1構造体: プラグイン 本体の呼び出し
  • 7. OSS Development Study Meeting-06 7 議論を通じた仕様の変更 socket-fdを取得するServerAPIの追加 SELinuxはgetpeercon(3)にsockfdを与えて、 接続元プロセスの権限 (=security context) を取得するため SERVER_HANDLE_V1構造体 に get_socket_fd() が追加 ->delete() の手順を変更 従来の実装 1. ->get() に Key値を与えて呼び出し、本体は item *ポインタを取得 2. ->delete()に item *ポインタを与えてKey-Valueペアの削除 問題点 ->get()内で評価すべきパーミッションは、 “read権限”なのか、それとも”delete”権限なのか、特定できない 修正後の実装 ->delete() にKey値を与えるよう ENGINE_HANDLE_V1構造体を修正
  • 8. OSS Development Study Meeting-06 8 Memcached and Security できる事はほとんど何もない 絶対に外部ネットワークから接続可能にしちゃダメ 一応、SASL認証で接続の可否を決める事はできる あと、root権限で走らせてはならない Memcached Security; by Dustin Sallings http://dustin.github.com/2010/08/08/memcached-security.html Memcached Web Server Web Apps (1) Firewalling, always (1) Firewalling, always (2) SASL auth, if needed (2) SASL auth, if needed (3) Not run as root(3) Not run as root
  • 9. OSS Development Study Meeting-06 9 SELinuxによるアクセス制御 domain of classified processes domain of unclassified processes inter process communication channels Filesystem classified information unclassified information Networks memcached RDBMS SELinux Security Policy “機密” 情報は、どこに格納 しても“機密”情報として扱う
  • 10. OSS Development Study Meeting-06 10 SELinux対応Memcached 必要機能 Key-Valueペアを格納し、高速に探索する (できれば Persistent Storage 機能もサポート) Key-Valueペアにセキュリティコンテキストを関連付け 本体側からの呼び出し時にアクセス制御を行う 方針 Key-Valueペアは mmap(2) した領域に配置 容易に Persistent Storage 化可能 B+Treeインデックスを用いる サイズの増減に柔軟に対処できる。順スキャン可能。
  • 11. OSS Development Study Meeting-06 11 selinux_engine.so selinux_engine.so の構成 mblock.c mbtree.c mcache.c interface.c selinux.c メモリブロックの alloc()/free() メモリブロックの alloc()/free() B+木インデックスB+木インデックス Key/Valueペア管理、 セキュリティラベル Key/Valueペア管理、 セキュリティラベル Engine V1 の フック関数 Engine V1 の フック関数 SELinuxを用いた アクセス制御 SELinuxを用いた アクセス制御 Memcached 本体 Engine V1 インターフェース
  • 12. OSS Development Study Meeting-06 12 mblock.c mmap(2)した領域を 2^N サイズ単位で割り当て・解放する Buddyアルゴリズムを用いたメモリ管理 シンプルで領域の分割併合を行いやすい方法 最悪の場合、メモリ利用率は 50% そこそこに…。 別の mchunk_t を参照する際にポインタを使えない。 uint64_t 幅のオフセット値を使用する MCHUNK_TAG_FREE uint16 magic uint8 mclass uint8 tag mlist_t list uint64_t prev uint64_t next MCHUNK_TAG_ITEM uint16 magic uint8 mclass uint8 tag uint16_t flags uint16_t keylen uint32_t datalen uint32_t secid uint32_t exptime uint8_t data[0] MCHUNK_TAG_BTREE uint16 magic uint8 mclass uint8 tag uint64_t parent uint8_t is_leaf uint16_t nkeys uint32_t keys[N] uint64_t items[N+1] MCHUNK_TAG_LABEL uint16 magic uint8 mclass uint8 tag uint32_t secid uint32_t refcount uint8_t value[0] mchunk_t 構造体の定義(tag値による多様性を持つ)
  • 13. OSS Development Study Meeting-06 13 mbtree.c uint32_t型のキーと、uint64_t型の値からなるB+木構造 uint32_t : 真のキーをハッシュ化した値 uint64_t : ITEMやLABELチャンクへのオフセット値 ハッシュと比べ、データ量が増えた時の再編コストが安い default_engine.so は、アイテム数に応じてハッシュスロットの数を増減する V0 V1 K0 VN-1 VN KN-1 V0 V1 K0 V3V2 K1 K2 V0 V1 K0 V3V2 K1 K2 V0 K0 V1 K1 V2 K2 V3 V0 K0 V1 K1 V2 K2 V3 V0 K0 V1 K1 V2 K2 V3 V0 K0 V1 K1 V2 K2 V3 null MCHUNK_TAG_ITEM MCHUNK_TAG_LABEL
  • 14. OSS Development Study Meeting-06 14 mcache.c Key-Valueペアを表現するデータ構造 tsid パース済みの MCHUNK_TAG_LABEL mchunk MCHUNK_TAG_ITEM へのポインタ データ構造の目的 Key-Valueに対応するセキュリティラベルを毎度々々探索せずに済むように 最近使った Key-Value を疑似LRUで繋いでおく refcnt の操作によって、mmap(2)したページが Dirty にならないように Dirtyになると、ファイルをmmap(2)した時に I/O が発生するので。 mcache_t 構造体 int refcnt mcache_t *next bool is_hot security_id_t tsid mchunk_t *mchunk mcache_t 構造体 mcache_t 構造体 mcacheハッシュ表 MCHUNK_TAG_ITEM MCHUNK_TAG_LABEL
  • 15. OSS Development Study Meeting-06 15 interface.c create_instance()で、コールバックの関数ポインタを登録 イベントに応じて登録した関数が呼び出される SETコマンド処理の例 process_update_command() SETコマンドのパース クライアントからのデータ入力受付準備 ->allocate() メソッド 入力データ用のItemバッファを確保 ->store() メソッド 利用者の write 権限をチェックする 新しいItemをB+木に追加 (必要なら)古いItemをB+木から削除 ->release() メソッド 参照カウンタをデクリメント B+木に登録されていなければ、 Itemを開放する complete_update_ascii() データを読み込んだItemバッファを インデックスに登録する処理 (必要なら古いItemを削除する) 確保したItemバッファに対して クライアントからのデータを入力 利用者に store() の実行結果を返却 STORED/EXISTS/NOT_FOUND/... 本体側 モジュール側
  • 16. OSS Development Study Meeting-06 16 selinux.c アクセス制御を行う関数群 interface.c 内の各メソッドから呼び出され、 SELinuxにアクセス制御の問い合わせを行う。 ‘denied’の結果が返却されれば、ERROR_EACCESSを呼出し元に返す Access Vector Cache (AVC)を用いて、システムコール回数を最小化 mselinux_check_write() avc_has_perms() on cache? security_compute_av() SELinux security policy Yes No System-Call AccessControlDecision ERROR_SUCCESS or ERROR_EACCESS Query
  • 17. OSS Development Study Meeting-06 17 ベンチマーク Iteration of GET/SET mixture, 8threads-client, 4core server x 2, Gb-ether Less significant differences in same network environment Penalties in IPsec(AH) communication (~20%?) 0 100000 200000 300000 No IPsec IPsec(AH) IPsec(ESP) number of commands in 30sec default selinux 0 100000 200000 300000 No IPsec IPsec(AH) IPsec(ESP) number of commands in 30sec default selinux 251,485251,485 191,409191,409
  • 18. OSS Development Study Meeting-06 18 設定パラメータ filename=<fname> <fname> をストレージとして mmap(2) する。デフォルトは匿名マッピング size = <total_size> mmap(2)するサイズ。PageSizeの倍数でなければならない。 use_cas = (true|false) Compare-and-Set操作をサポートするか否か selinux = (true|false) SELinuxサポート(アクセス制御)の有効化/無効化 これを無効化すると、ただのストレージ付きMemcachedになってしまう reclaim = (true|false) 領域の不足時に、既存ItemをReclaimするか否か。 debug = (true|false) デバッグ出力のON/OFF
  • 19. OSS Development Study Meeting-06 19 おしまい Twitterでの質問先 @kkaigai ソースコードの入手先 % svn co http://sepgsql.googlecode.com/svn/trunk/memcached % cd memcached % autoconf % env CPPFLAGS=-I/path/to/memcached/include ./configure % make % su –c ‘make install’ 情報源 Coming soon.... ドキュメントを書きましょう ☺