In Configure Delivery Optimization in Windows 10 on Petri, I explained how Delivery Optimization works and how to configure the ‘Download mode’. Delivery Optimization is enabled by default and can save bandwidth when downloading cumulative quality updates and feature updates. Here’s a quick reminder of how Delivery Optimization works when Windows Update clients are configured to get updates from Windows Server Update Services (WSUS).
When the Windows Update (WU) client is invoked, it first checks in with the local WSUS server to find out what updates are needed. The client then communicates with the Delivery Optimization service on the Internet to build a list of peers that have the necessary content. If there are peers available, then the client will try to pull the content. Any content that isn’t available is pulled from WSUS instead.
Delivery Optimization also works with Microsoft’s Internet update servers and when Windows Update for Business (WUfB) policy settings are enabled. For more information on WUfB, see Understanding Windows Update for Business and Configure Windows Update for Business using Group Policy on Petri.
If Delivery Optimization is not working, there are likely to be three primary reasons. Because Delivery Optimization uses a cloud service, it’s important that devices can reach the service on the Internet. Delivery Optimization builds a list of peers that a device can use to download content but naturally the device must be able to access the peers. And finally, the cloud service must be able to see peers on the network before it can add them to its list.
Because the Microsoft Store also uses Delivery Optimization for larger apps, you can download a large app from the Store and observe Delivery Optimization behavior using the Get-DeliveryOptimizationStatus and Get-DeliveryOptimizationPerfSnap PowerShell cmdlets.
Get-DeliveryOptimizationStatus | Format-List FileID,Status,Priority,SourceURL
If Delivery Optimization is being used to download the app, you should see output like that shown in the image below. Get-DeliveryOptimizationStatus gives you a real-time snapshot of all current Delivery Optimization jobs and was introduced in Windows 10 version 1703.
Adding the -Verbose switch to the Get-DeliveryOptimizationStatus cmdlet provides extra information like the originating HTTP URL and the download mode setting. Before LAN clients can connect with the cloud services, you must allow them to reach *.do.dsp.mp.microsoft.com Internet addresses through your edge firewall. *.dl.delivery.mp.microsoft.com and *.emdl.ws.microsoft.com are required for Delivery Optimization metadata and optionally you can allow clients to download directly from Microsoft’s update servers at *.download.windowsupdate.com and *.windowsupdate.com
The Get-DeliveryOptimizationPerfSnap PowerShell cmdlet provides a list of key performance information about Delivery Optimization. It returns information like the number of files downloaded and uploaded, and the average transfer size. Appending the -Verbose switch gives further details like the average number of peer connections per download.
To check whether a device can see other peers on the network, run Get-DeliveryOptimizationPerfSnap with the -Verbose switch in the PowerShell window and check that NumberOfPeers is something other than zero.
Clients connect to peers on port 7680, so if you believe there’s an issue connecting to a specific peer, you can test the connection by downloading the same Store app on a different device and then using telnet to check the connection can be made. You can use a third-party telnet client or install the Windows client using DISM.
dism /online /Enable-Feature /FeatureName:TelnetClient
Once the client is installed, test a connection using the IP address of the second device where you downloaded the Store app and connect to it on port 7680. For example, if the IP address of the second device is 192.168.1.20, the command would look like this:
telnet 192.168.1.20 7680
If the telnet client can make a connection on port 7680, you should see a blinking cursor. If not, it will return an error message.
There are a couple of other PowerShell Delivery Optimization cmdlets available in Windows 10 version 1803. You can get the contents of the dosvc log directory, and optionally save it to a text file by piping the cmdlet’s output to Set-Content.
Get-DeliveryOptimizationLog | Set-Content c:\temp\dosvc.log
And finally, Get-DeliveryOptimizationPerfSnapThisMonth outputs data like Get-DeliveryOptimizationPerfSnap, but limits the results to the current calendar month.