次の方法で共有


リアルタイムのパフォーマンスを向上させるためにデバイスを設定する方法

このガイドでは、リアルタイムのパフォーマンスを向上させるためにデバイスを設定する方法について説明します。

Note

この機能を使用する唯一の方法は、特定の目的に合わせてカスタムビルドされたアプリケーションとデバイスを使用することです。 アプリケーション スレッドでのプロセッサ コア割り当てのマッピングは、物理デバイスのコアとその構成が、リアルタイムのワークロードと標準的なワークロードに一致している必要があります。

  1. アイドル状態を powercfg.exe で無効にする

  2. システム サービスのセキュリティ ガイドラインを参照して、次のサービスを無効にします。

    1. SysMain (Superfetch)
    2. DPS (診断ポリシー サービス)
    3. Audiosrv (Windows オーディオ)
  3. このガイダンスを使用して Windows Update を無効にします。

    Note

    これにより、セキュリティ更新プログラムが実行されないという脆弱性がデバイスに表示されます。 とはいえ、Windows Update エージェントが CPU コアの分離を考慮しないため、これが必要です。 デバイスのセキュリティを確保し、メンテナンスのためにデバイスを停止する時間帯に更新プログラムのインストール計画を立てることを推奨します。

    ヒント

    ダウンタイム中に更新プログラムを管理する良い例については、UWF のドキュメント: UWF で保護されたデバイスのサービスを参照してください。UWF とソフト リアルタイムを使用している場合は、このプロセスで両機能の OS アップデートが同時に行われます。

  4. WindowsIoT CSPをリアルタイムのパフォーマンス用に設定します。

  5. ISRs/DPC を CPU0 に移行するように RSS を構成する

    Note

    これはハードウェアに依存し、NIC が RSS をサポートしている場合のみ実行できます

  6. 省略可能: デバッグでスレッド化された DPC を無効にする

  7. 省略可能: 本ガイダンスに従って、特定のハードウェア割り込みのためのカスタム DPC ピンニング ドライバーをデプロイする。

この構成のコマンド ラインからの実行

これにより、電源が入っている間にデバイスが構成されます。 デバイスでソフト RT のパフォーマンスを維持するには、本ガイダンスを使用してコンピューターの電源がオンになるたびに、これらのコマンドをスクリプトとして実行するようにコンピューターを構成する必要があります。

  1. コマンド プロンプトで、次の 2 つのコマンドを実行します。 これにより、実行する命令がない CPU が省電力状態になる、CPU のアイドル状態が無効になります。 これは、アイドル状態の CPU が新しい命令を実行開始するまでに時間がかかるため、リアルタイムのシナリオでは望ましくありません。

    powercfg.exe /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IdleDisable 1
    powercfg.exe /setactive SCHEME_CURRENT
    
  2. コマンド プロンプトで次の 3 つのコマンドを実行し、DPS を無効にします。

    sc query dps
    sc stop dps
    sc config dps start=disabled
    
  3. コマンド プロンプトで次の 3 つのコマンドを実行し、Audiosrv を無効にします。

    sc query Audiosrv
    sc stop Audiosrv
    sc config Audiosrv start=disabled
    
  4. コマンド プロンプトで次の 3 つのコマンドを実行し、SysMain を無効にします。

    sc query SysMain
    sc stop SysMain
    sc config SysMain start=disabled
    
  5. コマンド プロンプトで次の 3 つのコマンドを実行し、Windows Update を無効にします。

    sc query wuauserv
    sc stop wuauserv
    sc config wuauserv start=disabled
    
  6. 次のコマンドを実行して、スレッド化された DPC を無効にします。

    reg add "HKLM\System\CurrentControlSet\Control\Session Manager\kernel" /v ThreadDpcEnable /t REG_DWORD /f /d 0
    

デバイスがリアルタイムに設定されていることを確認する

実稼働環境にリアルタイム デバイスをデプロイする前に、デバイスが更新プログラムを受信し、リアルタイムのパフォーマンスを維持するには、追加のセットアップが必要です。

  • Windows Update の再有効化、更新プログラムのインストール、および Windows Update のオフができるスクリプトを設定します。
  • デバイス上のサービスが無効になっていることを確認するチェックを設定する

WindowsIoT CSP とは

WindowsIoT CSP を使って、Windows IoT デバイスを構成します。 現時点でこの CSP で使用できる機能は、ソフト リアルタイム パフォーマンスのデバイスを構成することだけです。 ソフト リアルタイムをデバイスで使用するために必要な作業は、これだけではありません。 前の 6 つの手順も実行する必要があります。 この追加の構成作業を実行せず、この CSP を使用して、ソフト リアルタイム コアを設定すると、システムの誤動作が発生し、復旧するために再イメージ化が必要になります。

この CSP の階層は次のとおりです。

WindowsIoT
   SoftRealTimeProperties
      SetRTCores

SetRTCores パラメーターには、0 より大きく、デバイス上のコアの合計数よりも小さい値を指定する必要があります。 この CSP は、デバイスを構成するために組織が使用するツールを使用して設定するか、以下の手順を使用で MDM ブリッジを使用してください。

MDM ブリッジ WMI プロバイダーを使用して WindowsIoT CSP を構成する

この CSP により、システムがリアルタイムのパフォーマンス用に構成されます。 リアルタイム タスクに割り当てる CPU コアの数を指定します。残りは、システムや標準ユーザーのタスクを実行するために割り当てられます。 SetRTCores ノードで数値を指定する必要があります。 これは、リアルタイム ワークロード専用の CPU コア数です。 有効な数値は、1 以上で CPU の物理コアの数より小さい値にする必要があります。

Windows Management Instrumentation (WMI) を使用する環境では、これを MDM ブリッジ WMI プロバイダーを使用して実現できます。 リアルタイム コアを 3 つ使用してリアルタイムの構成を設定する例を次に示します。

  1. psexec tool をダウンロードします。

  2. 管理者としてコマンド プロンプトを実行します。

  3. コマンド プロンプトで、システム アカウント psexec.exe -s -i powershell.exe で PowerShell を起動します。

  4. 次のスクリプトを実行します。

    $nameSpaceName="root\cimv2\mdm\dmmap"
    $className="MDM_WindowsIoT_SoftRealTimeProperties01"
    $obj = Get-CimInstance -Namespace $namespaceName -ClassName $className
    Add-Type -AssemblyName System.Web
    Set-CimInstance -CimInstance $obj
    $obj.SetRTCores = 3
    Set-CimInstance -CimInstance $obj
    
  5. マシンを再起動して変更をアクティブにします。

ヒント

最後から 2 番目の行の「3」を適切な数に置き換えるだけで、必要なリアルタイム コアの数に同じスクリプトを使用できます。 これにより、最も高いコアから降順にコアが予約されます。 したがって、4 コア CPU で 3 コアを予約すると、コア 3、2、1 が予約され、コア 0 はシステムと非リアルタイムのタスク用に残ります。 リアルタイム コアのインデックスは、後で CPU コア数を増やしても固定値となるため、リアルタイム コアが最も高いままになる保証はありません。

次: ソフト リアルタイム アプリケーションを開発する