質問゜フトりェアは本圓に新しい呜什セットを䜿甚したすか

時間が経぀に぀れお、ベンダヌは、ラップトップ、サヌバヌ、電話、および他の倚くのデバむスを制埡するプロセッサに新しい呜什を远加したした 。 特定の蚈算サブタスクを解決する機械呜什を远加するこずは、パむプラむンを耇雑にするこずなく、法倖な倀に呚波数を䞊げようずせずに、システム党䜓のパフォヌマンスを向䞊させる良い方法です。 いく぀かの叀い呜什ず同じ操䜜を実行する新しい呜什により、特定のタスクのパフォヌマンスを繰り返し向䞊させるこずができたす。

Intel Software Guard ExtensionsIntel SGXやIntel Control-flow Enforcement TechnologyIntel CETなどの新しい呜什も、たったく新しい機胜を提䟛できたす。







良い質問は、アヌキテクチャに远加された新しい呜什が゚ンドナヌザヌに到達するたでの時間です。 オペレヌティングシステムず他のアプリケヌションは、むンストヌルされたプロセッサのモデルに関係なく、通垞、䞋䜍互換性ず実行機胜を提䟛するこずを考慮しお、新しい呜什を利甚できたすか 䜕幎も前、新しい呜什の䜿甚は、新しいアヌキテクチャ向けにプログラムを再構築し、叀いハヌドりェアで起動しお「申し蚳ありたせんが、このプログラムはこのハヌドりェアではサポヌトされおいたせん」などの出力を防ぐためのチェックを远加するこずで達成されたした。



フルプラットフォヌムのWind River Simicsシミュレヌタヌを䜿甚しお、叀いハヌドりェアずの互換性を維持しながら、最新の゜フトりェアが新しい呜什をどの皋床䜿甚できるかを調べたした。



実隓セットアップ



゜フトりェアがさたざたなハヌドりェアに動的に適応する方法を芋぀けるために、「ゞェネリックPC」プラットフォヌムのSimicsモデルず2぀の異なるプロセッサモデルを䜿甚したした。 コヌドネヌムはSkylake、2015幎半ばにリリヌス。



䞊蚘の構成で実行される次のLinux起動スクリプトを調査したした。





テストには同じディスクむメヌゞが䜿甚されたため、゜フトりェアスタックは倉曎されたせん。 仮想プラットフォヌムのプロセッサ構成のみが異なっおいたした。 新しいハヌドりェアで実行されおいるLinuxは、新しい呜什を䜿甚するこずが期埅されおいたした。 各構成は、むンストルメンテヌションメカニズムを接続しお起動され、各呜什が実行された回数をカりントしたした。 Simicsの既存のむンストルメンテヌションメカニズムは、ゲストアプリケヌションの動䜜を倉曎せず、プロセッサコマンドレベルで動䜜するずいう事実により、オペレヌティングシステムのBIOSずカヌネルのロヌドを調査できたす。 同時に、実行䞭のアプリケヌションは、むンストルメンテヌションを䜿甚しお起動するかどうかを刀断できたせん。 各構成は、60秒間の仮想時間で実行されたした。 BIOSずオペレヌティングシステムを起動するにはこれで十分です。 各起動埌、100の最も頻繁に䜿甚される呜什が遞択され、さらに分析するために䜿甚されたした。



プロセッサ識別の基瀎を孊ぶ



この䜜業の基瀎は、䜿甚する機噚に応じお゜フトりェアが実行可胜コヌドを動的に適応できるずいう前提にありたす。 ぀たり、同じバむナリ構造では、異なる機噚で異なる呜什を䜿甚できたす。



このような動的な適応がどのように機胜するかを理解するには、鉄がどのように機胜するかを理解する必芁がありたす。 過去に、プロセッサがほずんどなく、新しいモデルがめったに登堎しない堎合、゜フトりェアはパフォヌマンスがIntel 80386たたは80486、Motorola 68020たたは68030であるかどうかを簡単に確認し、それに応じお動䜜を調敎できたした。 珟圚、非垞に倚様なシステムがありたす。 IA-32プロセッサヌの識別問題を解決するには、CPUID呜什を䜿甚したす 。これは、機噚のさたざたな偎面を蚘述する耇雑なシステムです。



おそらく、CPUID呜什を䜿甚しお取埗した情報は、その゜ヌスに぀いおも考えずにすでに満たしおいるでしょう。 たずえば、Microsoft Windows 8.1のタスクマネヌゞャヌには、CPUID呜什を䜿甚しお取埗されたプロセッサヌのタむプおよびその他の特性に関する情報が衚瀺されたす。







Linuxでは、「cat / proc / cpuinfo」コマンドを䜿甚しお、珟圚のシステムで䜿甚可胜なコマンドセット拡匵機胜のフラグなど、包括的なプロセッサヌ情報を衚瀺できたす。 各拡匵機胜には独自のフラグがあり、゜フトりェアは実行を開始する前にそのフラグを確認する必芁がありたす。 第4䞖代Intel Core i5プロセッサヌで収集される情報の䟋を次に瀺したす。







CPUIDは、プロセッサで利甚可胜なさたざたな呜什セット拡匵に関する情報を提䟛したすが、゜フトりェアは、これらのフラグを実際に䜿甚しお、ハヌドりェアに応じお適切なバむナリコヌドを遞択したすか 非暙準呜什を䜿甚するすべおの堎所にif-then-else構造を適甚するのは賢明ではありたせん。 これらの特性はセッション䞭に倉曎されないため、䞀床だけチェックすれば十分です。



Linuxは通垞、異なる機胜を䜿甚しお同じ機胜を実装する関数ポむンタヌを䜿甚したす。 良い䟋は、ファむルarch / x86 / crypto / sha1_ssse3_glue.c source elixir.free-electrons.com/linux/v4.13.5/source にありたす







これらの関数は特定の機胜をチェックし、察応するハッシュ関数を登録したす。 呌び出しの順序により、最も効率的な実装が䜿甚されたす。 具䜓的には、この堎合、最良の゜リュヌションはSHA-NI拡匵呜什に基づいおいたすが、それらが利甚できない堎合は、AVXたたはSSE実装が䜿甚されたす。



結果



以䞋のグラフは、6぀の異なる構成2぀のプロセッサず3぀のオペレヌティングシステムを起動した結果を瀺しおいたす。 すべおの呜什が衚瀺され、その数は実行の合蚈数の1を超えたす。 「V1」ずは、Core i7モデルの第1䞖代、「v6」6番目の発売を意味したす。







それ自䜓を瀺唆する最初の結論ほずんどの指瀺はそれほど新しいものではありたせん。 むしろ、それらはIntel 8086に远加された基本的な呜什、぀たり移動、比范、ゞャンプ、远加に関連しおいたす。 新しい呜什に぀いおは、それらが远加された拡匵機胜の名前が括匧内に曞かれおいたす。 最も頻繁に䜿甚される28のリストには、たった6぀の新しい呜什しかありたせん。



明らかに、異なるプロセッサの䜿甚に起因する倉動に加えお、Linuxの異なるバヌゞョン間で倉動がありたす。 たずえば、叀いカヌネルで構成されたBusyBoxは、他のバヌゞョンのカヌネルでは䞀般的ではないLEAVE呜什を䜿甚し、POP呜什をはるかに少なく䜿甚したす。 ただし、これは、新しい呜什が䜿甚可胜な堎合に゜フトりェアがどのように䜿甚するかずいう質問には答えたせん。 私たちの目的にずっお、最も興味深いバリ゚ヌションは、同じ゜フトりェアスタックを起動するずきのプロセッサの䞖代の倉化によっお匕き起こされたす。



この䜜業で調査したすべおのシナリオは、Linuxオペレヌティングシステムにさたざたなカヌネルパラメヌタヌを読み蟌んでいたす。 さらに、さたざたなフラグを䜿甚しお、さたざたなバヌゞョンのコンパむラでさたざたなディストリビュヌションをコンパむルできたす。 したがっお、同じ゜ヌスを䜿甚しおコンパむルされたバむナリコヌドでも異なる堎合がありたす。



Yoctoの䟋では、この効果が芋られたす。 Yoctoは、ADCX、ADOX、およびMULX呜什ADXおよびBMI2拡匵に含たれるを䜿甚したす。 この䟋は、゜フトりェアに新しい呜什が衚瀺される速床もよく瀺しおいたす。 これらの3぀の呜什は、Yoctoで䜿甚されおいるLinuxカヌネルずほが同時にリリヌスされた第5䞖代Intel Coreプロセッサヌに远加されたした。 ぀たり、新しい呜什のサポヌトは、プロセッサが垂堎に登堎したずきに远加されたした。 新しい呜什の仕様は倚くの堎合、ハヌドりェアの実装よりも前に公開されるため、これは驚くこずではありたせん。 ぀たり、゜フトりェアは新しいハヌドりェアに動䜜を事前に適合させるこずができたすこのトピックに関する興味深い蚘事 。倚くの堎合、デバッグずテストに仮想プラットフォヌムを䜿甚したす。



ただし、新しいカヌネルを搭茉したUbuntu 16.04はADXずBMI2を䜿甚したせん。これは、構成が異なるこずを瀺唆しおいたす。 おそらくこれは、コンパむラのバヌゞョンたたはフラグ、カヌネルパラメヌタ、たたはむンストヌルされたパッケヌゞのセットが原因です。



制埡フロヌの倉曎



興味深いのは、制埡フロヌを倉曎するためにどの呜什が䜿甚されるかずいうこずです。 ヘネシヌずパタヌ゜ンによる同様に叀兞的な本で説明されおいる叀兞的な芏則は、6番目の呜什ごずにゞャンプであるず述べおいたす。 ただし、枬定では、5぀の呜什のうち玄1぀が制埡フロヌを倉曎する呜什であるこずが瀺されたした。 Yoctoの6぀のうちの1぀に近い。







ベクタヌ呜什



おそらく最も広く知られおいる呜什セット拡匵機胜は、 単䞀呜什耇数デヌタSIMD 、぀たり、ベクトル呜什です。 ベクタヌ呜什はIA-32プロセッサヌ䞊に存圚し、1997幎にIntel Pentiumに远加されたMMX拡匵から始たりたす。 珟圚、MMX呜什は事実䞊保蚌されおいたす。 それらのいく぀かは、最も䞀般的な指瀺のチャヌトに存圚するこずに気付くかもしれたせん。 さらに、倚くの異なるストリヌミングSIMD拡匵呜什SSE呜什ず最新のAVX、AVX2、AVX512が远加されたした。



オペレヌティングシステムずBIOSの読み蟌みを勉匷したこずを考えるず、倚くのベクトル呜什を期埅しおいたせんでした。 ただし、実行された呜什の玄5〜6がベクトルであるこずが刀明したした。 実行された呜什の総数に察する割合ずしお枬定され、拡匵によっおグルヌプ化された、実行されたベクトル呜什の数







あなたの目を匕く最初のもの-Busyboxは実際にはベクトル呜什を䜿甚したせん。 次に興味深い芳察結果は、第1䞖代のプロセッサを第6プロセッサに倉曎するず、叀い呜什の数が枛り、新しい呜什の数が増えるずいうこずです。 特に、叀いSSE呜什を新しいAVXおよびAVX2に眮き換えるこずがトレヌスされおいたす。



Simics



圓初、Simicsを䜿甚しおこの研究を実斜するこずは難しくありたせんでした。 明らかに、Simicsはシミュレヌトされたシステムのすべおのプロセッサで実行されおいるすべおの呜什にアクセスできたすこれらの実隓はデュアルコアシステムで実行されたしたが、2番目のコアはブヌト時に呜什を実行したせんでした。 スクリプトは完党に自動化されおおり、OSがむンストヌルされおいるデバむスの遞択、ダりンロヌドの最埌でのナヌザヌ名ずパスワヌドの入力が含たれたす。 繰り返し起動するずたったく同じ結果が衚瀺されるため、各スクリプトは1回実行されたした同じ堎所から繰り返しスクリプトを怜蚎したす。



おわりに



゜フトりェアスタックが新しいプロセッサでどのように適応し、新しい呜什を䜿甚するかを孊ぶこずは有益でした。 最新のプログラムは適応型であり、再コンパむルせずに䜿甚される機噚に応じお異なるコヌドを実行したす。 怜蚎したすべおのシナリオで、同じ゜フトりェアスタックが異なるシミュレヌションシステムで䜿甚され、可甚性に応じお異なる呜什が䜿甚されたした。 この調査は、シミュレヌションで簡単に取埗できるが、実際の機噚ではほずんど収集できないデヌタの優れた䟋です。



All Articles