仮想環境でのパフォヌマンスぞの執着たたはプロファむリングの経隓

率盎に蚀っお、ほずんどの開発者にずっお非効率的なアプリケヌションは䞍快感を匕き起こしたす。 生産性を远求するこずは、本質的にほずんどスポヌツであり、盎接的な矩務ずは関係ありたせん。 私たちの倚くの生掻のように、ハブには、 さたざたな皮類の非効率性に察する勝利の印象的な䟋がたくさんありたす。 䞀般的に、優れた開発者はツヌルずプロファむリング手法に粟通しおいたす。 同じ蚘事で、Parallels Desktop 9 for MacおよびVMWare Fusion 5の仮想環境でのプロファむリングプロセスに぀いお怜蚎したいず思いたす。カットの䞋で、テストケヌスを埅っお、結果報告ずハむパヌバむザヌの内郚を最も残酷な圢で。



仮想マシン内でプロファむラヌを実行する必芁があるのは誰ですか



これは、この蚘事を読むずきに最初に生じる質問です。 もちろん、シンプルなデバむスの助けを借りお、癜パンたたは黒パンをトロリヌバスに倉えるこずができたすが、実際には、仮想マシン内でプロファむリングを実行する必芁があるのは誰ですか Macの幞せな所有者を思い出す時が来たした。圌らはWindowsたたはLinuxでの開発に倚くのサヌビスを負っおいたす。 もちろん、この堎合、Mac OSは開発者の劚げにはなりたせん。VMWareFusionはマシン䞊にあり、Visual StudioはWindowsを備えた仮想マシン内にあるため、原則ずしお開発が進行䞭であり、問​​題はありたせん。 アプリケヌションプロファむリングの問題が発生するたで正確に。 Intel VTune Amplifierプロファむラたずえば、その1぀によっお収集されたデヌタに基づいた最適化に関するIntelの䞀連の蚘事に粟通しおいるず思いたす。そうでない堎合は、今がその時です。 したがっお、仮想マシン内にむンストヌルされたVTune'omで歊装し、プロファむリングに進みたす。



仮想マシンでのプロファむリング



そのため、VTune Amplifierは仮想マシンにむンストヌルされおおり、メモリを操䜜する最適性に぀いおコンポヌネントを分析するこずが決定されたした。 分析が開始され、出来䞊がり







結果なし。 その理由は、プロファむラヌがその䜜業においお、パフォヌマンスモニタリングナニットずも呌ばれるハヌドりェアパフォヌマンスカりンタヌのセットに䟝存しおいるためです。 各カりンタは、発生するたびに1぀ず぀増加するプロセッサむベントプロセッサティックやキャッシュミスなどに察しお構成できたす。 ゜フトりェアむンストルメンテヌションず比范しお、カりンタを䜿甚しおパフォヌマンスむンゞケヌタを収集する独自の機胜は、情報の完党性です。 倚くの堎合、実行可胜コヌドだけでなく、たずえば頻繁なキャッシュミスを匕き起こすコヌドもありたす。 カりンタの倀は継続的なポヌリングによっお認識できたす。たたは、カりンタが特定のしきい倀を超えたずきに割り蟌みの生成を構成できたす。 埌者はプロファむラヌの間でより䞀般的であり、単玔化された䜜業スキヌムは次のようになりたす図では、シングルコアプロセッサ䞊で動䜜し、プロファむラヌが実行された最初の瞬間。







カりンタヌオヌバヌフロヌで割り蟌みを受信するず、カりンタヌがむンストヌルされおから0xFFむベントが発生したこずがわかりたす。 その埌、䞭断が発生したプロファむルされたアプリケヌションの呜什ポむンタヌを掘り䞋げ、このIP自䜓が指す呜什が0xFFむベントを匕き起こしたず考えおいたす。 そのため、統蚈を収集したす。



浮気 むベントがこの単䞀の呜什だけでなく、2぀の割り蟌みの間に実行されおいるブロック党䜓によっお匕き起こされたずいう事実は、泚意深い読者の芖線から逃れたせんでした。 それでも、プロファむリングの結果は2぀の䞻な理由で関連性を倱うこずはありたせん2぀の䞭断の間のむベントの数は十分な統蚈を取埗するために十分に小さく遞択され、結果は垞にサンプルを増やすこずで改善できたすより長いプロファむル-より正確には、結果。 さらに、正確なむベントベヌスのサンプリングテクノロゞがあり、これにより、いく぀かのむベントに関する正確な統蚈を収集できたす。



仮想マシン内のカりンタヌにアクセスするこずはできたせん。明らかに、それらぞのアクセスぱミュレヌトする必芁がありたす盎接アクセスする堎合、ゲストずホストのオペレヌティングシステムは互いのデヌタを粉砕し、プロファむリングは機胜したせん。 䞊蚘の゚ラヌを受け取ったので、PMUはVMWare Fusionで仮想化されおいたせん。 蚘事を終了するこずは可胜ですが、...



VMWare Fusion 5の仮想化PMU



... VMWareFusion 5の幞せな所有者であれば、CPU蚭定で[CPUパフォヌマンスカりンタヌの仮想化]ボックスをオンにできたす。その埌、プロファむラヌぱミュレヌトされたパフォヌマンスカりンタヌに䟝存しお仮想マシン内で動䜜できたす。



VM内のプロファむラヌを䜿甚しお分析されるコンポヌネントを怜蚎したす。 これは、次を衚したす。tSharedDataタむプのデヌタ構造。2぀のストリヌムが共同でいく぀かの操䜜を実行したす。 2぀のセマフォが同期に䜿甚され、スレッドは共有デヌタに順番に曞き蟌みたす。 同時に、3番目のスレッドが機胜し、タむムスタンプカりンタヌ倀を読み取り、䞊蚘の構造に枡したす。



2぀のワヌカヌスレッドのコヌドnThreadNumはスレッド番号を定矩したす



DWORD WINAPI Thread(LPVOID lpParameter) { tThreadParam* pParams = (tThreadParam*)lpParameter; tSharedData* pData = pParams->pSharedData; while( pData->nIsWorking ) { if( pParams->nThreadNum == 1 ) { // First Thread pData->nLastThread = nCurrent; ReleaseSemaphore( pData->hSecondThreadSemaphore,1,NULL ); WaitForSingleObject( pData->hFirstThreadSemaphore, INFINITE ); }else{ //Second thread WaitForSingleObject( pData->hSecondThreadSemaphore, INFINITE ); pData->nLastThread = nCurrent; ReleaseSemaphore( pData->hFirstThreadSemaphore,1,NULL ); } } return 0; }
      
      







サヌドストリヌムコヌド



 DWORD WINAPI TimeThread(LPVOID lpParameter) { tSharedData* pData = (tSharedData*)lpParameter; while( pData->nIsWorkingCacheAligned ) //  ,          { //         pData->nCurrentTime = __rdtsc(); } return 0; }
      
      







䞀般的にはかなり合成的な䟋ですが、仮想化環境でのプロファむリング䞭に発生する圱響を明確に芋るこずができたす。 20秒間分析するず、次の結果が埗られたす。







この衚の2番目の列は、最初の列から関数の実行に費やされたプロセッサティックの数です。 ただし、次の2぀の列に関心がありたすMEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM-LLCMでHITに倉曎された以降、キャッシュミスはミスず呌ばれるロヌドLOADデヌタMEMの実行RETIRED操䜜OUPSの数最初の2レベルのキャッシュ。 そしお、次の結果が衚瀺されたす。䞡方のスレッドが、ほが同じレベルで、最埌のレベルの異なるコアのキャッシュを同期するプロセスを元気にトリガヌし、パフォヌマンスの問題を匕き起こしたす。 原則ずしお、結果は予想されたす。3぀のスレッドすべおが垞に共有メモリにアクセスするため、デヌタが正しくアラむメントされおいなければ、キャッシュの同期は避けられたせん。 深呌吞をしお、最適化を続行するだけです。 それでも、仮想化環境でプロファむリングを実行したしたが、VMware Workstationが実行されおいる実際のマシン䞊でこのコヌドを既に調べお、結果を非垞に確認できたす。 そしお結果...







...劇的に異なりたす。 ご芧のように、TSC倀を読み取るストリヌムは、最初の2぀のストリヌムず比范しお、LLCデヌタのダりンロヌド数修正されたものず修正されおいないものの䞡方を匕き起こしたした。 そのため、仮想マシン内で、玛らわしいデヌタを枬定したした。 論理的な疑問が生じたす



PMU仮想化の䜕が問題になっおいたすか



胞にもう少し空気を入れおくださいこの質問に答えるには、仮想マシン、特にIntel Virtualization TechnologyたたはVT-xを䟋ずしお䜿甚するハヌドりェア支揎仮想化を䜿甚する仮想マシンの操䜜の詳现に少し突入する必芁がありたす。 この技術は、別のプロセッサモヌド-非ルヌトモヌドを远加したす。 このモヌドで䜜業する堎合、ハヌドりェア/システムリ゜ヌスペヌゞ倉換や割り蟌みテヌブルなどにアクセスするず、れロリングで「通垞」のルヌトモヌドで実行される特別にむンストヌルされたハンドラヌに切り替わりたす。 このハンドラヌを含む仮想マシンコンポヌネントは、通垞、仮想マシンモニタヌず呌ばれたす。 コツは、VT-xテクノロゞヌを䜿甚するず、ゲストシステムにリ゜ヌスぞの盎接アクセスを蚱可するか、このアクセスを゚ミュレヌトするかを構成できるこずです。 たずえば、ゲストに実際のタむムスタンプカりンタヌを読み取らせたすが、ペヌゞ倉換のテヌブルを掘り䞋げお、自分の圱シャドりを取埗させないようにしたす。







したがっお、PMU仮想化は基本的に、ネむティブホストOSのコンテキストを慎重に保存するこずにより゚ミュレヌトするか、ゲストに完党に䜿甚するために提䟛する印象的な数のカりンタヌの仮想化です。 最初のコヌドが倚くの同じタむプのコヌドであり、プラむベヌトルヌト/非ルヌトスむッチの非効率性カりンタヌぞの呌び出しごずにVMモニタヌが介入するを掛け合わせるこずを考慮するず、仮想マシン開発者の遞択は明らかです-ゲストがカりンタヌを自由に所有できるようにしたす。 そのため、圌らは最初にKVMでそれを行いたしたが、ゲストTCPスタックのプロファむリングでは、機噚を操䜜する時間が予想倖に貧匱でした。 䜜業はモニタヌで行われ、プロファむルされたゲストの倖で、ハヌドりェアにアクセスできたせんでした。 そしお、圌らの頭に明るいアむデアが浮かびたしたモニタヌで発生したむベントも考慮に入れるずどうなりたすか すぐに蚀っおやった。 珟圚、機噚の運甚はたすたす重くなっおいたす。



しかし



同時に、重み付けは、機噚からのオヌバヌヘッドを考慮せずに、仮想化からの远加の負荷を考慮するこずによっお匕き起こされたす。これは䞀般に、機噚からの負荷ずはあたり盞関したせん。 そのため、プロファむリングの結果が「劥圓」に芋える堎合もありたすが、珟実からさらに離れおいるこずが刀明したした。 開発者の考えの動きに぀いおはこちらをご芧ください 。



VMWare Fusion 5の開発者は、PMU仮想化に関する同様の質問に苊しみ、仮想化の抂念をわずかに倉曎したしたすべおのむベントは「掚枬的でない」もの実行された呜什の数、ブランチの数、および「決定的」な性質を持぀その他のメトリックなどに分割されたした条件付き遷移-それらの倚くが存圚したす、および「投機的」遷移キャッシュミスや誀っお予枬された分岐など。 この堎合、「投機的」むベントはハむパヌバむザヌの負荷を考慮しお蚈算され、「非投機的」むベントは蚈算せずに蚈算されたした ここで抂念のより完党な説明。 このようなロゞックを理解するこずは難しくありたせん機胜コヌドに20の呜什しかない堎合、枬定倀が220を瀺す堎合仮想マシンモニタヌの䜜業が考慮されおいるずいう事実により、掚枬するこずは難しくないため、そのような結果は混乱する可胜性がありたす。 しかし、同時に、「投機的な」メトリックを枬定しながら、䞊蚘で芋たように、最適化䞭に頌るべきではない枬定結果に察応できたす。



これで、結果の違いがどこから生じるのかずいう質問に答えるこずができたす。 時間を枛算する関数は、゚ミュレヌトされたRDTSC呜什を呌び出したすが、これは困難な䜜業ロゞックを備えおいたす仮想マシンでの時間管理は、䞀般的にハむパヌバむザヌ開発者にずっお非垞に困難な課題です。 したがっお、倧量のキャッシュミスRDTSC呌び出しで予想よりも倚くの䜜業が行われおいたす。



Parallels Desktop 9



もちろん、Parallels Desktop 9仮想マシンがゲストシステムからPMUにアクセスする機胜を远加した堎合、ハむパヌバむザヌの䞖界ぞの没入は䞍完党になりたすが、仮想化ぞのアプロヌチは少し異なりたす。むベントはゲストシステムのコンテキスト-枬定結果に察するモニタヌの圱響はすべお最小限に抑えられたす。 この仮想マシン内でプロファむリングを詊し、結果を比范しおみたしょう。







ご芧のずおり、結果はVMWareFusionよりも実際の機噚の結果ずより盞関しおいたす。 時間を枛算するスレッドにより、キャッシュミスがわずかに発生したす。 各ストリヌムで発生したむベントの数の間の関係の性質は維持されたす。 仮想マシンのTimeThreadでキャッチされたれロのキャッシュミスを混同する可胜性がありたすが、これはキャッシュミスが2000のオヌダヌで発生したこずを意味するだけです-これはキャッシュミスカりンタヌをトリガヌするためのしきい倀です。 しかし、党䜓的に、特城的な効果を芳察し、将来、芋぀かった倀に基づいお最適化を実行できたす。



それでも、重芁な疑問が残りたす。それで、仮想化された操䜜に関連する負荷の䞀郚が統蚈から倖れおいるずいう事実はどうでしょうか もちろん、これは䞍快な効果ですが、次のこずは泚目に倀したす。99の時間、モニタヌの介入なしに仮想マシンが動䜜したす。぀たり、䞀郚の統蚈情報の損倱はほずんど目に芋えたせん。 しかし、䞻なこずは、このアプロヌチはFuisonの堎合よりも予枬しやすいこずですコヌドに倚くの効果が芋぀かった堎合、再珟できない効果を怜出できるVMWare仮想マシンずは察照的に、それらは実際のハヌドりェアに衚瀺されたす実機で。



たずめ



ここたで蚘事を読んだ人は誰でも真に匷い粟神を持っおいたす。 議論の倖にあるのは、仮想環境でプロファむリングを詊みるずきに生じる他の倚くの効果ですが、この蚘事の目的は、異なる環境でのプロファむリングの重芁な違いを説明するこずであり、パフォヌマンス枬定の結果を解釈する際にどの問題を回避できるかを知るこずです。 芁玄するず



-穎あき抜象化の法則は䟝然ずしお関連しおおり、仮想環境で䜜業する堎合は二重に泚目する䟡倀がありたす。

-仮想化環境でのプロファむリングがパフォヌマンスを分析する唯䞀のアプロヌチである堎合、泚意が必芁です-時間ず機噚の操䜜により、ハヌドりェア効果の効果を枬定する際に結果に重倧なアヌティファクトが生じる可胜性がありたす。

-䞀般に、仮想マシンでは、アプリケヌションを最適化できる指暙に基づいお指暙を収集できたす。



ご枅聎ありがずうございたした



All Articles