1 / 36

オブジェクトデータベースシステム 「出世魚」の 隠蔽ページロック制御メカニズム 火の国情報シンポジウム 平成14年3月7日

オブジェクトデータベースシステム 「出世魚」の 隠蔽ページロック制御メカニズム 火の国情報シンポジウム 平成14年3月7日. 金子邦彦* 2 田村慶一* 1 中野祐也* 1 牧之内顕文* 2 九州大学大学院システム情報科学府*1 九州大学大学院システム情報科学研究院* 2. 隠蔽ページロックメカニズムとは. データ (クライアントで共有 ). 読み書き. クライアント (複数). 上記のような共有メモリシステムで, メモリアクセスを,ページ単位で検出.自動的にページロックを行う ページロックは,複数のクライアントによる,データのアクセス制御に必要.

kasi
Download Presentation

オブジェクトデータベースシステム 「出世魚」の 隠蔽ページロック制御メカニズム 火の国情報シンポジウム 平成14年3月7日

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. オブジェクトデータベースシステム「出世魚」の隠蔽ページロック制御メカニズム火の国情報シンポジウム平成14年3月7日オブジェクトデータベースシステム「出世魚」の隠蔽ページロック制御メカニズム火の国情報シンポジウム平成14年3月7日 金子邦彦*2 田村慶一*1 中野祐也*1 牧之内顕文*2 九州大学大学院システム情報科学府*1 九州大学大学院システム情報科学研究院*2

  2. 隠蔽ページロックメカニズムとは データ (クライアントで共有) 読み書き クライアント (複数) • 上記のような共有メモリシステムで,メモリアクセスを,ページ単位で検出.自動的にページロックを行う • ページロックは,複数のクライアントによる,データのアクセス制御に必要 ページロック許可, デッドロック通知など ページロック要求 など ・ページロック制御 ・デッドロック制御 サーバ

  3. 隠蔽ページロックとメモリプロテクション 共有メモリ メモリプロテクション ・メモリアクセスの検出用 ・OS の mprotect 関数で設定 None None Read Read/Write データ構造 ・2つのロックモード(リード, ライト)の区別に必要 ・メモリプロテクションが 「Read」かそれ以外かを 覚えておくデータ構造 0 1 0 1

  4. リードロックの挙動 ⑤リードロック獲得 したら,「Read」に 書き換える ② メモリをリードしようとすると,   メモリプロテクションが「None」なので, SEGVシグナルハンドラが呼び出される メモリプロテクション ①最初「None」に設定  しておく None None None None データ構造 0 0 0 0 ③シグナルハンドラは, パラメータとしてメモリ アドレスを受け取る. 「0」なので,「リード ロックすべき」ことが 分かる ④リードロック獲得 したら,「1」に 書き換える Obtain, Wait, Rollback のいずれかの返事 リードページロック要求 ・ページロック制御 ・デッドロック制御

  5. ⑤ライトロック獲得 したら, 「Read/Write」に 書き換える ライトロックの挙動 ② メモリをライトしようとすると,   メモリプロテクションが「Read」なので, SEGVシグナルハンドラが呼び出される メモリプロテクション ①すでに Read 済みと   仮定する Read None None None データ構造 1 0 0 0 ③シグナルハンドラは, パラメータとしてメモリ アドレスを受け取る. 「1」なので,「ライト ロックすべき」ことが 分かる ④ライトロック獲得 したら,「0」に 書き換える Obtain, Wait, Rollback のいずれかの返事 ライトページロック要求 ・ページロック制御 ・デッドロック制御

  6. リードライトの区別 • ページロックでは,リードとライトの区別が重要 • メモリアクセスは,OSのメモリプロテクションの機能を使って検出可能 • シグナルハンドラ内では,アドレスは分かるが,リードかライトかは分からない • リード時には,リードロックを獲得.ライト時には,リードロックとライトロックの両方を獲得 • 「リードロック済み」であるかを記録するデータ構造を実装

  7. 隠蔽ページロックメカニズムの特質 • データベースシステムでは:  • データベースシステム(マルチユーザ)ではデッドロック制御が必要 • デッドロックの発生によるトランザクションの取り消し(ロールバック)は,常に,発生しえる • 次の2つのシグナルが混在 USR1: ページロック獲得待ちのプロセスを起こす USR2: ロールバック(デッドロック時のトランザクションの取り消し) シグナルキュー USR2到着時に,いかにして USR1を破棄するか USR2 USR1

  8. シグナルハンドラの関係 プログラム本体 SEGVシグナル (ページロック時) throw 戻り 関数 呼び出し SEGVシグナルハンドラ (ページロック要求用) 通信部 例外のthrow 戻り USR2 シグナル USR2シグナル USR1 シグナル 例外のthrow 例外のthrow USR2シグナルハンドラ (デッドロック時に トランザクションを取り消す) USR1シグナルハンドラ (ページロック獲得待ち のプロセスを起こす)

  9. クライアント側での状態遷移 初期状態 begin commit,abort OK 通常実行 SEGVシグナル ハンドラ SEGV シグナル Wait Rollback Rollback 例外処理 SEGVシグナル ハンドラ USR1,USR2待ち USR2シグナル USR2 シグナル USR2シグナル ハンドラ USR1 シグナル Obtain 例外処理 USR1シグナル ハンドラ SEGV USR1 凡例 USR2

  10. USR2到着時に,いかにしてUSR1を破棄するか • シグナルマスクの設定 • USR2 (ロールバックのシグナル)は, • 通常実行時 • SEGVシグナルハンドラ でのみ受け取る.(それ以外では,いったん,キューに入れる) • 他のシグナルの破棄 • 適当な時点(前ページの 「Rollback 例外処理」)で,USR1シグナル(もしシグナルキュー内にあれば)を破棄

  11. 隠蔽ページロックメカニズムー 実装時の経験 ー • 性能改善努力 • door 通信(Solaris 固有の機能)を利用 • RPC 通信よりも socket, door 通信の組み合わせの方が速いことを確認 • ローカルのプロセス間通信 → door • リモートのプロセス間通信 → socket • データベースベンチマーク(拡張Sequoia2000で確認) 以下,理由と,ベンチマーク結果を報告

  12. RPC通信でのシステムコール追跡 Solaris 8 でシステムコールを追跡 → RPC通信では,ファイル /dev/tcp の読み書きを行う open("/dev/tcp", O_RDWR) = 7 open("/etc/.name_service_door", O_RDONLY) = 8 open("/tmp/test_db", O_RDWR|O_LARGEFILE) = 9 (途中省略) fstat(7, 0xFFFFFFFF7BA04FE0) = 0 write(7, "80\0\01C <19DD !\0\0\001".., 32) = 32 poll(0x100A93F50, 4, -1) = 1 lwp_cond_signal(0xFFFFFFFF7D12D0A8) = 0 lwp_cond_wait(0xFFFFFFFF7D12D0A8, 0xFFFFFFFF7D12D0B8, 0xFFFFFFFF79B05AA0)=0 lwp_mutex_wakeup(0xFFFFFFFF7D12D0B8) = 0 lwp_mutex_lock(0xFFFFFFFF7D12D0B8) ファイル /dev/tcp のオープン ファイル /dev/tcp の読み書き Solaris8 RPC通信でのシステムコール追跡結果

  13. RPC通信でのシステムコール追跡 Solaris8 RPC通信でのシステムコール回数と秒数

  14. door 通信とは • オペレーティングシステム Solaris 2.5.1 以降 • 同一サイトの他のプロセスの関数を呼び出す機能 • 呼び出された「関数」は別スレッドとして動く door server プロセス プロセス door descriptor 関数呼び出し 関数 door_call 関数を使う ・door descriptorを指定する ・door_arg_t を使って,「関数」  に情報を渡す door_create 関数 であらかじめ登録

  15. door通信の概略 prog1(){  処理内容 door_return(value, size, NULL, 0); } door descriptor 起動 prog1を実行する door監視 スレッド サーバの関数呼び出し doorの生成 main(){ door_arg_t arg; int door = open(“door descriptor名“, ); door_call(door, arg,NULL,0); } main(){ int door = door_create(prog1, 0, NULL, 0); fattach(door,”door descriptor名“); } クライアント サーバ

  16. site 1 site 2 site n クライアント クライアント クライアント クライアント クライアント クライアント door通信 クライアント クライアント クライアント socket通信 サーバ サーバ サーバ サーバ サーバ サーバ

  17. socket 通信でのマルチスレッドサーバ メインスレッド thr_create 他のサイトのサーバからのソケット通信要求受付 ソケット監視 スレッド connect ソケット監視スレッドで登録した関数 - connectを受け取ると実行する関数 パラメータ XDR 関数 スレッド remote_page_lock_request_svc_1 返り値 Message Handler スレッド生成 remote_page_lock PageServerMain 要求

  18. door 通信でのマルチスレッドサーバ メインスレッド door_create door call door監視 スレッド クライアントまたはローカルサイトの他のサーバからの door通信要求受付 door_createで登録した関数 - door callを受け取ると実行する関数 スレッド XDR 関数 local_page_lock_request_svc_1 Message Dispatcher スレッド生成 page_lock PageServerMain 要求

  19. door_createで登録した関数 (別スレッドで実行) door監視スレッド メインスレッド メッセージ番号を 取り出す door_callを待つ door_create (要求待ち) 対応す る関数 メッセージ番号 = 1 thr_create メッセージ番号 = 2 door_return

  20. ソケット監視スレッドで登録した関数 (別スレッドで実行) ソケット監視スレッド メインスレッド read() メッセージを受け取る accept connectを待つ thr_create 対応す る関数 メッセージ番号 = 1 thr_create メッセージ番号 = 2 ソケットの場合 一旦作成したサーバとサーバ間 の接続を保持し続けるためループ させる 理由)システムコールaccept1回に 費やすCPU時間が大きいため write() 返り値を返す

  21. door 通信での「関数」への情報の受け渡し • door_arg_t構造体を使って可変長のバイト列を送ることができる door_arg_t { data_ptr サーバに送信するバイト列の先頭アドレス data_size 送信するバイト列のサイズ desc_num rbuf サーバから受信するバイト列を格納する          バッファの先頭アドレス rsize 受信したバイト列のサイズ }

  22. socket, door 通信での「関数」への情報の受け渡し • socket, door 通信は,基本的には,「バイト列」の送受信 • 実際に送受信されるのは,メッセージ番号とパラメータ バイト列(通信の対象) メッセージ番号 パラメータ

  23. サーバ クライアント XDR関数 パックしたパラメータと 返り値のバイト列 スレッド 要求 パラメータ 低レベル 通信関数 低レベル 通信関数 各メッセージのための に対応した関数 返り値 XDR関数

  24. メッセージ local_page_lock_request でのパックとアンパック (クライアント側) lock_req_return_t local_page_lock_request_call(local_page_lock_call_t amessage) { char sendmsg[BufferSize], recvmsg[BufferSize]; local_page_lock_call_t message = amessaage; rpc_retval_t result; rpc_retval_t message_id = 1; int door_handle = Door_create(“door_file_name”); xdrmem_encode(sendmsg, BufferSize, (void *)xdr_rpc_retval_t, &message_id); xdrmme_encode(sendmsg+4, BufferSize-4, (void *)xdr_local_page_lock_call_t, &message); Door_call(door_handle, sendmsg, BufferSize, recvmsg, BufferSize) ; xdrmem_decode(recvmsg, BufferSize, (void *)xdr_rpc_retval_t, &result); return (lock_req_return_t)result; } メッセージ番号と パラメータをパック 返り値をアンパック

  25. メッセージ番号の例 local_root_transaction_begin_request 10local_root_transaction_commit_request 12local_root_transaction_abort_request 14local_root_transaction_heap_commit_request 16 local_root_transaction_heap_abort_request 18 root_transaction_begin  1root_transaciton_commit 3root_transaction_abort 5local_page_lock_request 1local_persistent_heap_create_request  20local_volatile_heap_create_request  21local_persistent_heap_open_request  23local_volatile_heap_open_request   24local_persistent_heap_close_request    25local_volatile_heap_close_request 26remote_page_lock_request  2remote_page_request 3 remote_page_transfer_request 6 remote_persistent_heap_open_request  30 remote_persistent_heap_close_request 32

  26. 拡張Sequoia2000ベンチマーク • 地理データの大規模ベンチマークデータベース • Sequoia2000ベンチマークのデータを人工的に拡張 • 4種類のデータ(ポイント、ポリゴン、グラフ、ラスタ)と11種類の問い合わせ 参考文献 J. M. Patel, J.-B. Yu, N. Kabra, K. Tufte, B. Nag, J. Burger, N. E. Hall, K. Ramasamy, R. Lueder, C. Ellman, J. Kupsch, S. Guo, D. J. DeWitt, and J. F. Naughton. Building a scaleable geo-spatial dbms: Technology, implementation, and evalua-tion. In SIGMOD 1997, Proceedings ACM SIGMOD Inter-national Conference on Management of Data, May 13-15, 1997, Tucson, Arizona, USA, pp. 336–347. ACM Press, 1997

  27. ある周波数、 ある時刻のラスタ ある周波数の ラスタ クリップ 解像度を 落とす クリップ 時間順に 並べる ある時刻のラスタ クリップ クリップ クリップ クリップ クリップ 平均値を計算 Query2:ラスタのクリップ Query4:ラスタのクリップ 各サイトにラスタを割り当て クリップし解像度を落とす 各サイトにラスタを割り当てクリップ Query3:ラスタのクリップ 各サイトにラスタを割り当てクリップし平均値を計算

  28. Query5:名前によるポイントの検索 各サイトにポイントを割り当て検索 指定した矩形 ポイントを囲む矩形 交差するポリゴン 交差するポリゴン 名前で指定したポイント 指定した点 Query8:Query5とQuery6 の組み合わせ 各サイトにポイントを割り当て 検索 結果を集めて各サイトに配る 各サイトにポリゴンを割り当て 検索 Query6:範囲検索 各サイトにポリゴンを割り当て検索 Query11:グラフのたどり 各サイトにグラフ を割り当て検索

  29. Query9:ラスタのクリップ 各サイトでラスタを検索 ポリゴンを割り当て検索しクリップ ラスタ クリップ クリップ 指定したポリゴン Query10:ポリゴンによる点の検索 指定した円 内部にある面積 一定以上のポリゴン 各サイトにポリゴンを割り当て検索 結果を集めて各サイトに配る 各サイトにポイントを割り当て検索 指定したポリゴン 交差するポイント Query7:範囲検索 各サイトにポリゴンを割り当て検索 各サイトで1枚のラスタを 同時にクリップできる

  30. 実験内容 • Query2~11の測定 16倍の拡張Sequoia2000ベンチマーク SubQueryで使用するサイト数は1台、16台の2通り • 次の2つの比較 1.RPC通信 2.socket 通信,door 通信

  31. 実験環境 Sun ULTRA10 32GB disk 1台 イーサネットスイッチ 100M Sun ULTRA5 32GB disk 16台

  32. 動的分散による並列処理 NOW 問い合わせ SubQuery SubQuery SubQuery SubQuery MainQuery 結果 問い合わせ要求

  33. 測定結果

  34. 1サイト実験 RPC 通信と  socket, door 通信の差 (秒数) ページロック総数

  35. 16サイト実験 RPC 通信と  socket, door 通信の差 (秒数) ページロック総数

  36. まとめ • クライアント・サーバアーキテクチャの共有メモリシステムでは,次の2つのシグナルが混在 USR1: ページロック獲得待ちのプロセスを起こす USR2: ロールバック(デッドロック時のトランザクションの取り消し) → 工夫が必要 • USR2シグナルは,通常実行時, SEGVシグナルハンドラ でのみ受け取る.(それ以外では,いったん,キューに入れる) • Rollback 例外処理時に,他のシグナル(もしあれば)を破棄 • RPCを使わずに,socket, door を使ったら,速くなった(拡張Sequoia 2000ベンチマーク, TPC-Cベンチマークで確認) → 通信方法は,性能に大きく影響する

More Related