質問

ソフトウェア(ドライバーではなく、OSの一部ではなく、アプリケーションのみ)のほとんどが仮想化環境で実行されることがわかっている場合、コードやコンパイラー設定を最適化する戦略はありますか?または、すべきこととすべきでないことに関するガイドはありますか?

これは約0.0x%のパフォーマンス向上ではありませんが、おそらく、パフォーマンスを大幅に改善する単純なものや、単純に見えるが仮想化環境では悲惨なことが知られているものがあるかもしれません。たとえば、カーネルビルドでCONFIG_PARAVIRTを有効にすると、簡単に実行でき、パフォーマンスが大幅に向上します。今、私はもしあれば、アプリケーションのための同様のものを探しています。

私の場合は、C ++コードとおそらくVMWareになりますが、可能な限り言語/製品に依存しない質問を保持したいと思います。仮想化の概念はすべて、あまり気にする必要がないということなので、そのような戦略さえあるのか、それが時間の完全な無駄になるのだろうかと思います。

役に立ちましたか?

解決

私があなたに与えることができる唯一のアドバイスは、バグのあるバルーンドライバーを探している間にmlock()/ mlockall()を慎重に使用することです。

たとえば、Xenゲストが1GBで起動され、その後512MBに拡張された場合、特権ドメインは準仮想化カーネルが実際にプロセスに使用するメモリ量を確認しなかったことが非常に一般的です(つまり、Committed_AS)。実際、Xenでは、この値がXenbusに配置されない限り、特権ホストはそのようなバルーンが何をするのかわかりません。カーネルの構成方法にもよりますが、これもKVMと一致すると思います。

だから、単にページアウトできないものを保護します(注意してください、しかし慎重)、常に「空が落ちている」シナリオを考慮してください。

同様に、posix_fadvise()/ posix_madvise()を使用してPVカーネルにバッファリングの必要量または不要量を伝えることは常に良い考えです。

それ以上、できることはほとんどありません..最初は仮想化を無視するように設計された準仮想化カーネルのみと話しているためです。

KVMは(まだ)あまり使用していませんが、将来的にはさらに検討する予定です。ただし、最近書いたものの90%は、準仮想化Xenゲストで実行するように特別に設計されています。ちょっとしたXen / Cを中心にすみませんが、それが私の経験であり、pv_opsはメインラインにあります(すぐにxen-0 opsも):)

良い質問、ところで:)

編集:

「慎重だが慎重」と言ったとき、私は保守的なものよりも一歩上を意味しました。プログラムがほとんどの機能に必要なジョブ構造を割り当てる場合は、ロックします。巨大なファイルを読み込むためにバッファを割り当てる場合は、それらをロックしないでください.. posix_fadvise()を呼び出して、一度だけアクセスするつもりであることをカーネルに知らせてください(その場合)。また、特に並行性を整理するのに役立つ場合は、メモリマップファイルの使用についてカーネルに通知してください。

要するに、ホストカーネルがメモリを管理するのを助け、重要な割り当てられたブロックがダーティページングに投げ込まれないようにしてください。

あいまいさはごめんなさい。私が思いつく最高のフレーズは「慎重だが慎重」だ。

他のヒント

すべてがI / Oであることがわかりました。

VMは通常、IOで非常にひどく吸い込みます。これにより、さまざまなものが実際の錫よりもさらに悪化します。

スワッピングは特に悪いキラーです-IOが非常に遅いため、VMパフォーマンスが少しでも完全に破壊されます。

ほとんどの実装では、VM間で大量のIO競合が発生します。これを回避したり、賢明に処理したりするものは見たことがありません。

したがって、可能であれば一時ファイルにramdiscを使用しますが、それがさらに悪化するため、スワップさせないでください。

私の唯一のアドバイスは、可能であればメモリとIOの使用を低く抑えることです。

VMのIOは、物理ハードウェアと比較してかなり低速です。回避できる場合は、回避してください。

システムが仮想化されている場合、実際のハードウェア上で遅いものはさらに遅くなります。どれだけ遅くなるかは、使用されている仮想化技術に依存します。

仮想環境外の世界とのI / Oを必要とするものは特に避けてください。設定方法に依存します。これには、画面への描画、スワッピング、ディスクおよびネットワークI / Oが含まれます。それはおおまかに重要度の降順です。

可能であれば、10歳のコンピューター用に書いているふりをしてください。アプリケーションが1999年のデスクトップPCまたはラップトップで動作する場合は、正常に動作するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top