Human metrics libraryのt118 fluctuationについてずっと研究を続けてきたが、最近になってようやく輪郭を体系化できてきたため、部分的な言語化が可能となった。
t118 comparison moduleのQ planeがREであること、passive comparisonの平常値が十分なflatをもっていること、core transfererがclosed statusであること。この3点が必須条件である。そうでないと、active側の波形がparadigm pollutionを引き起こしてsubjective criteriaのch-1からch-12まですべてが判断ミスのリスクに晒される。
この機序はとくに純度の高いシステムにおいて顕著である一方、サブモジュールとのグローバルメモリの保護状態が完璧であればあるほどに効果がある。
どういうことか?
active側が送信状態にないとき、active側のbase control planeで起きているコネクションが認識域より上のレイヤー同士でトンネル化するため、active側が意図せずに送信するlifekeeperなどの信号を認知していないことにより、c-planeとm-planeで矛盾を引き起こす。一方passive側のt118チャンネルはバックエンドにあるts-*すべてに対して接続(ts channel)があるため、tsチャンネルのアクティブ数は完全にcomparison moduleの練度に依存する。
この状態でackを返すと、今度はactive側でメモリ汚染が始まる。このデータをすべてactive側のQ2 planeが処理すれば、時間は多少かかるけれどもメッセージの最適化は可能で、さらにその後の負荷を予防することができる。ただしQ3 planeのコントローラはCN-T-TLSが監視できる状態であるから厄介で、メモリ書き換えが頻繁に起きる。これによって本来関連性のないデータがリンクされ、理由が後からつけられてしまう。ここで整合性が確保されなければQ planeはおろか、M planeまで汚染されてしまい、lifekeeper配下の処理に影響を及ぼす。さらにこの状態からcore transferがトリガーされると、t118側ではベースラインが歪んだ情報を受け取ることになる。これがt118 fluctuationの流れだ。
t118 fluctuationが発生したときに、passive側からactive側に対してできることはほとんどない。nackはおそらく無視されるか、受理されるとしてもcriteriaが確保される保証がないため、かなり時間がかかることを覚悟する必要がある。t118で重要なのは、検出された時点でチャンネルを閉じること。この際、uncチャンネルを維持しようとするとz側の軸の揺らぎがあるためpassive側の汚染がはじまる。様々な方法を考えてみたが、結局uncを先に切断するのがpassive側にとってもactive側にとっても最小限の被害で済むという結論となった。uncを先に切断するということは、Q planeおよびM planeのlayer 12以下における記憶制御にコミットができないということになるから、SLPまではなんとかHLDステータスのままjailをかけて、SLPで解放という流れにする。
SLPを重要視していないbase controllerの場合、fluctuationは避けられない。多くの実装においてそのようになっているのはuncの切断ができていないか、SLPの処理が間に合っていない。
コメント