-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bg_commit worker の commit 試行削減を目的とする変更 #140
base: master
Are you sure you want to change the base?
Conversation
こちらは良い変更だと思います。
他の作業に関しては取り込みに注意が必要であると考えます。 wait には boundary wait と read wait があります。 こちら、boundary wait の確認と waiting bypass に関しては注意が必要です。 つまり、ltx id x に関して waiting bypass を試みた結果、boundary wait になったという判断をした時点で、次回以降 x が生きていたらチェックすらしないと思うのですが、それは waiting のパスを短絡化させきったこととは同義ではありません。従って、最適化ロジックとしては 「waiting bypass させきった上で依然としてboundary waiting していて、その相手のtx 群が一つでも生きているならば、boundary wait はチェックしなくても待ちが確定する。」 になると思います。 ・waiting bypass させきったかどうか? 部分的に改善しており、改悪していない部分はないか?(無難に取り込めるか?)の観点にも議論があります。 read wait の件に関しては改善している部分と改善していない部分があります。 改善しうる部分 改悪しているかもしれない部分 |
ありがとうございます。 今回提案のやり方だと、 また、
この部分、むしろ commit 前であれば、衝突候補は増える一方のはずなので、 commit 前のものによって待たされると衝突検出したのならば、理論上は待たせる側が commit try するまでの間は、ずっとスキップできるのはずなのにしていない。
これを意識して例を構成すると
これが以下のようになる
待たされスキップ判定で、待たせている相手が bg_commit にいないものはスキップしないので、待たされ判定が広めに誤判定しても問題ないような気がしていましたが、
これは理論的にはそう思いますが、複数記録するとなると実装上複雑になることを懸念しています。 |
考え直したのですが、1txの判定で十分だと思いました。その理由は下記です。 ・本件、待ち対象のtxを一つずつチェックしている。その結果、待つことになったtxを記録するアプローチである。
何か最適化のためのインデックスのようなものを新たに設けても良いかもしれませんね。例えば、ltx 開始、map に登録、ltx終了(map から削除)という処理プロセスを仮定したとき、「map にエントリがあれば生存中ltx」ということが分かります。tx_info (ongoing tx list) がそうではないか?という疑問があるかもしれませんが、現状それへのロック競合が問題視されています(よね?)。本件はそれの悪化を避ける、ジャイアントロックを細粒度化するだとか分散指向のアプローチになります。 |
bg_commit worker の負荷を減らすために、今試してもあきらかに再度 commit 待ちになりそうなものはスキップするという改良を加えました
案件: https://github.com/project-tsurugi/tsurugi-issues/issues/460
性能評価も上記案件で進行中です。
新設プロパティ名とかは、適宜変えてください。
変更概要