「悪いリンゴ」アルゴリズム、またはプロセスが共有サンドボックスをクラッシュさせる


9

次の問題を処理するためのアルゴリズムを探しています。これは(今のところ)「悪いリンゴ」アルゴリズムと呼んでいます。

問題

  • M個のサンドボックスでN個のプロセスを実行しています。N>> Mです。
  • 各プロセスに独自のサンドボックスを与えることは実際的ではありません。
  • これらのプロセスの少なくとも1つが正しく動作せず、サンドボックス全体を停止させているため、同じサンドボックス内の他のすべてのプロセスが強制終了されています。

単一の不適切な動作のプロセスである場合は、単純な二分法を使用して、プロセスの半分を1つのサンドボックスに入れ、残りの半分を別のサンドボックスに入れて、不正なものが見つかるまで続けます。

質問

場合は、複数のプロセスがひどく行儀である-彼らはしているという可能性を含め、すべてのひどく行儀-この素朴なアルゴリズム「仕事」をしますか?いくつかの賢明な範囲内で動作することが保証されていますか?

簡略化

議論のために、悪いプロセスがサンドボックスを瞬時にダウンさせ、良いプロセスが決してダウンさせないと仮定しましょう。


不適切に動作するプロセスサンドボックスを停止することはどのように保証されますか?つまり、特定のサンドボックスがクラッシュしなかったために「クリーン」なプロセスのみが実行されていることが確実である場合、有限の時間を想定できますか?
SF。

残念ながらそうではありません。サンドボックスが5分間クラッシュしないという事実は、すべてのプロセスが正常に動作していることを意味するわけではありませんが、その事実に対する信頼が高まります。
Roger Lipscombe 2013年

...しかし、この質問の目的のために、私たちは有限の時間を許可することによって概算できると思います。
Roger Lipscombe 2013年

「成功した」「失敗した」プロセスと見なすものを原子化する必要があります。失敗することなく5分間実行される場合、技術的には悪いリンゴである可能性がありますが、停止の問題と同様に、砂に固い線を作成せずに通過するときに100%の確実性はありません。
Neil、

あなたは正しい軌道に乗っているように聞こえます。多くのプロセスと複数の不良リンゴがある場合は、Mの値を大きくするか、不均一なグループを使用して、既知の良好なリンゴを分離し、既知の良好なリンゴを1つのサンドボックスに保持し、不明なプロセスを分割する必要があります。個人を特定するまで、他のサンドボックス。サンドボックスの数が多いほど、これは速くなります。@Neilが指摘したように、これは対数ベースMのNアルゴリズムの大きなOであるため、Mを増やすと試行回数が減ります。
GlenPeterson 2013年

回答:


2

悪いリンゴを1つ見つけた場合は、アルゴリズムを適用できます。

  1. NをMグループに分割
  2. 各グループでテストを実行します。
  3. グループサイズが1より大きい場合は、手順1に戻ります。Nを不良グループのアイテム数に置き換えます。

同様に、「良い」リンゴを1つ見つけた場合、同じアルゴリズムが適用されますが、良いグループを見つけます。

このアルゴリズムにはO(log_M(N))のパフォーマンスレートがありますが、不良アップルが1つしかないという事実に依存します。

良いリンゴと悪いリンゴの数がわからない場合は、次のアルゴリズムを使用できます。

For each M processes in N
  Test M processes

これは最悪のシナリオですが、O(N/M)時間内に実行されます(またはO(N)、単一のパスを単一のテストと見なすか、並行して実行されるテストのコレクションと見なすかによって異なります)。すべてを考慮すると、これは決して悪いアプローチではありません

これよりもパフォーマンスの高いアルゴリズムがあるかもしれませんが、バッチ内にいくつの悪いリンゴ/良いリンゴがあるかを知っている必要があります。この要因を知らない、それを証明することはできませんが、上記の後者のアルゴリズムよりも上手くできないことは間違いありません。

お役に立てば幸いです。

編集:実用的な観点から、これらの操作の一部は簡単に実行できないことを理解しています。それは事実ですが、残念ながら現実には、少なくともプロセスをアクティブ化または非アクティブ化することなく、その時点で実行されていたサンドボックスで実行されているプロセスから厳密に不良アップルを特定することはできません。質問がアルゴリズムに関連している場合、私はそれに答えたと思います。質問がこのような状況にどのように対処するかに関する場合、おそらく質問はスーパーユーザーSEに適しています。


1
残念ながら、プロセスを「テスト」することはできません。私が知っているのは、サンドボックスの1つがクラッシュしたことと、サンドボックス内の1つ以上のプロセスが原因だったことです。
Roger Lipscombe 2013年

1
問題は、セットを2分割した後、両方のパーティションに不正なリンゴが含まれる可能性があることです。これにより、単純なパーティション以上のものが必要だと思います...
Roger Lipscombe 2013年

@RogerLipscombe実際のシナリオにアルゴリズムを適用しようとしています。もちろん、一度に1つずつプロセスをテストすることはできません。これらのプロセスを別のマシンでテストするのは難しいかもしれませんが、これを徹底的に理解したい場合は、何らかの方法で方法を見つける必要があります。解決できない変数を挿入すると、悪いリンゴを正確に特定できるアルゴリズムを見つけることができなくなります。
Neil

OK、つまり「テスト」とは、「自信を持てるように十分に長く実行すること」を意味します...?
Roger Lipscombe 2013年

@RogerLipscombe私はそう思います。もっと時間がかかるかもしれませんが、あなたはどれだけ待つかを考えなければならないのはあなたです。それを知っていて、このアルゴリズムに従うと、技術的に不良リンゴを見つけることができます。ただし、Windowsのイベントログでクラッシュを確認する方が速い場合があります。
Neil、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.