Windows 10は、ストアアプリやWindows Updateのダウンロードを効率化するP2P配信技術「配信の最適化」機能を備えています。多数のWindows 10クライアントを導入している場合は、この機能が有効に働いているかどうか、どの程度の効果があるのか気になるところでしょう。
Windows 8.1以前のWindowsは、Windows Updateでの更新プログラムのダウンロードを最適化する「BranchCache」という機能がありました。BranchCacheは「Windows Server Update Services(WSUS)」でもサポートされます。
Windows 10もBranchCacheを引き続きサポートしていますが、Windows 10 バージョン1511からはP2P(ピアツーピア)配信技術である「配信の最適化(Delivery Optimization)」機能が利用可能になりました。Windows 10ではこの機能が既定で有効になっており、他のPCにキャッシュされたダウンロード済みコンテンツが利用可能である場合、Windows Updateサイトから直接全てをダウンロードせずに、他のPCにキャッシュされたコンテンツをダウンロードします。
「配信の最適化」はBranchCacheよりも優先され、WSUSでもサポートされます。また、Windows ServerでもWindows Server,version 1709以降でサポートされます。Windows Serverの既定は無効で、バージョン1803以降のServer Coreでは、「Set-DODownloadMode 1(ローカルネットワーク上のPC)」または「Set-DODownloadMode 3(ローカルネットワーク上のPCおよびインターネット上のPC)」で有効化できます。
「配信の最適化」では、「ローカルネットワーク上のPC」と「ローカルネットワーク上のPCとインターネット上のPC」のいずれかを選択できます。例えば、ローカルサブネットにWindows Updateに直接接続するWindows 10(同じバージョン、同じbit数)が複数台あり、インターネット回線の使用帯域を節約する目的なら、「ローカルネットワーク上のPC」を選択すればよいでしょう。その他の構成オプション(グループポリシーやMDMによる詳細設定を含む)については、上記のドキュメントを参照してください。
Windows 10 バージョン1703以降では、「配信の最適化」の状態をリアルタイムに表示する「Get-DeliveryOptimizationStatus」コマンドレットが追加されました。
Windows Updateの実行やストアアプリのインストール、更新、あるいはクイック実行(C2R)版Officeアプリのインストールや更新の直前、途中、直後に、Windows PowerShellで以下のコマンドラインを実行することで、ダウンロード状態や他のPCのキャッシュ利用状況を確認できます。
Get-DeliveryOptimizationStatus | FT
Get-DeliveryOptimizationStatusコマンドレットは、アクティブなダウンロード(またはアップロード)が存在する場合と、以前のキャッシュが存在する場合に、その現在の状態を表示します。既定では、キャッシュされたコンテンツは、最大3日間保持されるそうです。
64bit版のWindows 10 Pro バージョン1809を実行する2台のPCを使用して、1台ずつ時間を少しずらしてWindows Updateを実行して試してみました(画面2)。
 画面2 64bit版Windows 10 バージョン1809を実行する2台のPCでWindows Updateを実行し、「Get-DeliveryOptimizationStatus」コマンドレットで状況を確認
画面2 64bit版Windows 10 バージョン1809を実行する2台のPCでWindows Updateを実行し、「Get-DeliveryOptimizationStatus」コマンドレットで状況を確認画面2の上のウィンドウは先にWindows Updateを開始した方で、画面2の下のウィンドウは後からWindows Updateを開始した2台目のPCの状態です。1台目のPCは全てのファイルをWindows Updateサイト(BytesFromHttp)からダウンロードしていますが、2台目のPCは1台目にキャッシュされた2つのファイルを1台目のPCからダウンロードしています。
次のようなコマンドライン(スクリプト)を実行すれば、キャッシュの利用状況をトータルで計測できるでしょう(画面3)。
$TotalFileSize = 0; $TotalBytesDownloaded = 0; $TotalBytesFromPeers = 0; $TotalBytesFromHttp = 0
$downloads = Get-DeliveryOptimizationStatus
foreach ($download in $downloads) {
  $TotalFileSize = $TotalFileSize + $download.FileSize
  $TotalBytesDownloaded = $TotalBytesDownloaded + $download.TotalBytesDownloaded
  $TotalBytesFromPeers = $TotalBytesFromPeers + $download.BytesFromPeers
  $TotalBytesFromHttp = $TotalBytesFromHttp + $download.BytesFromHttp
}
Write-Host "Total File Size:"$TotalFileSize
Write-Host "Total Bytes Downloaded:"$TotalBytesDownloaded
Write-Host "Total Bytes From Peers:"$TotalBytesFromPeers
Write-Host "Total Bytes From Http:"$TotalBytesFromHttp
if ($TotalBytesDownloaded -gt 0) {
  Write-Host "Total Percent from PeerCache:"($TotalBytesFromPeers / $TotalBytesDownloaded * 100)
}
Get-DeliveryOptimizationStatusコマンドレットはアクティブなダウンロード(またはアップロード)やキャッシュが存在しないと、「No active Delivery Optimization download or upload jobs」と表示して何も情報を提供しないため、ダウンロードから一定時間が経過してしまうと状況を確認できません。
ただし、Windows 10 バージョン1709以降では、その月のダウンロードおよびアップロードのファイルサイズを「配信の最適化」のデータを含めて累積するようになりました(毎月1日にリセットされます)。
その情報にアクセスするには、「Get-DeliveryOptimizationPerfSnapThisMonth」コマンドレットを使用します(画面4)。また、Windows 10 バージョン1709以降の「設定」アプリに追加された「アクティビティモニター」からグラフィカルに参照することが可能です(画面5)。
「アクティビティモニター」は、「設定」アプリの「更新とセキュリティ」→「詳細オプション」→「配信の最適化」にあるリンクをクリックして起動します。
今回紹介した内容については、以下の公式ブログで説明されています。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2018/7/1)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
 Windows 10 October 2018 Updateがやってきた? やってこない?
Windows 10 October 2018 Updateがやってきた? やってこない? こんにちはWindows 10 October 2018 Update、さようならRemoteFX 3Dビデオアダプター
こんにちはWindows 10 October 2018 Update、さようならRemoteFX 3Dビデオアダプター これは戦いだ! Windows 10のWindows Updateにはやられる前にや……
これは戦いだ! Windows 10のWindows Updateにはやられる前にや…… 続・進まないWindows Update、やっぱり止まっていなかった
続・進まないWindows Update、やっぱり止まっていなかったCopyright © ITmedia, Inc. All Rights Reserved.