HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links★ Pro Subscribe free
← Back to Blog
Windows Update Windows UpdateDelivery OptimizationPeer CachingConnected CachePowerShellTroubleshootingWindows 11

Advanced Delivery Optimization Diagnostics: Steps 4 to 8, the Log Pipeline and the Binary Versions

IA
Imran Awan
15 October 2026
The short version

This is the advanced half of the Delivery Optimization diagnosis. It is for the case where the first three commands say peering is configured and allowed, and NumberOfPeers is still zero. It covers the device aggregates, the network and hardware eliminations, the trace pipeline, the cache location, why Delivery Optimization has no event log to alert on, and why two devices on the same Windows build can run different Delivery Optimization clients.

📋 Start with the other post. If you have not yet run Get-DOConfig -Verbose, checked where the policy physically lives, and read the per-file byte accounting, do that first in Delivery Optimization says it is peering and your WAN link says otherwise. It also explains in plain English what Delivery Optimization and peering are. Everything here assumes those three steps came back clean. The step numbers continue from that post.

The problem: the first three commands came back clean

The ordinary diagnosis ends at step three. You read the effective configuration and the provider that set it, you confirmed where the policy physically lives, and you read the per-file byte accounting. Download mode is a peering mode, no constraint is obviously disqualifying the device, and the byte accounting still shows every file arriving over HTTP with NumPeers : 0.

That is the case this post is for. There is no error to search for, because Delivery Optimization does not raise one. The remaining answers are in places that are not configuration: the device aggregates, the network path, the hardware floor, the trace pipeline, and the version of the client binary itself.

⚠ Gotcha: Before going further, be sure you are not solving the wrong problem. Peering and Connected Cache are separate sources. A device can show zero peer bytes all month and still be saving almost everything, because a cache node served it. Check DownloadCacheHostBytes against DownloadHttpBytes in step 4 before you spend a day on peer discovery that was never the bottleneck.

Why it happens: two things that are not in the configuration

Two facts explain most of what the first three steps cannot. The first is that Delivery Optimization is not one component on one release schedule. The second is that it has no event log, so there is nothing to go back and read.

Advanced: the binaries, so you know what you are actually looking at

Skip this unless two devices on the same Windows build are behaving differently. It explains why that can happen.

Delivery Optimization is not one file, and the version numbers are a genuine diagnostic signal rather than trivia. The versions below were read off the measured 26200.9168 device. File sizes are deliberately not listed: they change with almost every monthly update, so a byte count printed here would only invite you to compare it with your own device and conclude something is wrong when nothing is.

FileRole and locationVersion observed
dosvc.dllThe service DLL for the DoSvc service, whose display name is "Delivery Optimization". C:\Windows\System32. Hosted by svchost.exe -k NetworkService -p and running as NT Authority\NetworkService - not LocalSystem, which is worth remembering before you blame file permissions on the cache.10.0.26100.7309
doclient.dllFileDescription "Delivery Optimization Client". C:\Windows\System32. The largest of the three, and the one that carries the download engine.1509.2607.1012.0
dosettings.dllFileDescription "Delivery Optimization Settings". C:\Windows\System32. The configuration surface behind Get-DOConfig.10.0.26100.8972
Microsoft.Windows.DeliveryOptimization.AdminCommands.dllWhere the cmdlets actually live, in the module folder alongside DeliveryOptimizationStatus.psm1, DeliveryOptimizationSettings.psm1 and DeliveryOptimizationVerboseLogs.psm1.module 1.0.3.0

Look at those version strings again. Three files in the same folder, three different schemes. dosvc.dll is on 10.0.26100.7309, dosettings.dll on 10.0.26100.8972 - and the OS is 10.0.26200.9168, so none of them match the build. But doclient.dll reads 1509.2607.1012.0, which is byte-for-byte the same version as wuaueng.dll on the same device. The download client is serviced on the Windows Update agent's release train, not the OS build's. Which means a DO client fix can arrive without a build change, and two devices reporting the same OS build can be running different DO clients.

A second device confirms it. The same four files were read on a different Windows 11 25H2 machine, on build 26200.9457 rather than 26200.9168. If all of Delivery Optimization shipped with the OS build, every version would have moved together. They did not:

FileOn 26200.9168On 26200.9457
dosvc.dll10.0.26100.730910.0.26100.7309 — unchanged
dosettings.dll10.0.26100.897210.0.26100.9278 — moved
doclient.dll1509.2607.1012.01509.2608.11022.0 — moved, and still on the Windows Update agent scheme

Three files, one OS, three different release cadences. The service DLL did not move at all between those two builds, while the download engine moved twice.

📋 Note: That version split is the reason "it works on my machine, same build" is not a valid comparison for Delivery Optimization behaviour. Compare doclient.dll versions, not CurrentBuild.

The event log catalogue, and why it is nearly empty

The brief for a post like this normally includes an Event ID table. For Delivery Optimization the honest version of that table is mostly a census of what is not there, and the contrast is instructive. Windows Update, which is the caller for most DO traffic, does log to a channel.

Microsoft-Windows-WindowsUpdateClient/Operational  |  and the Setup log
Event IDMessageWhat it tells you
WindowsUpdateClient/Operational 26Windows Update successfully found N updates.Scan succeeded. Says nothing about download source. Also note "found 0 updates" is not diagnostic on its own - a fully patched device and a device excluded by a stale release pin emit the identical line.
WindowsUpdateClient/Operational 41An update was downloaded.The closest thing to a DO event you will find in Event Viewer - and it is the WU client speaking, not DO. It confirms bytes arrived. It does not say whether they came from a peer, a cache node or the CDN. That attribution exists only in the cmdlets.
Setup log 2Package <KB> was successfully changed to the Staged state.Servicing took delivery of the payload. Downstream of DO entirely, and useful only to prove the download completed.
Any DO channel-Does not exist. Zero event log channels matched Delivery Optimization on the measured device, against two registered ETW providers. Nothing to subscribe to, nothing to alert on, nothing to correlate by Event ID.

How to verify: steps 4 to 8

These continue the numbering from the first post. They are all read-only: nothing here restarts a service, clears a cache or writes policy. Run them in an elevated PowerShell session.

Step 4 tells you whether the device saved bandwidth at all. Steps 5 and 6 eliminate the network and the hardware. Step 7 is the trace pipeline, which is the only place with per-download detail. Step 8 tells you where the cache actually is.

STEP 4

Get the device aggregate, then the month-to-date split. These are two different cmdlets with two genuinely different schemas, and the second one is the one that answers the WAN question.

PowerShell (elevated) - the two aggregate cmdlets, measured
Get-DeliveryOptimizationPerfSnap FilesDownloaded : 49 FilesUploaded : 1 Files : 49 TotalBytesDownloaded : 7285319553 TotalBytesUploaded : 13851984 AverageDownloadSize : 148679991 DownloadMode : Lan CacheSizeBytes : 7285319553 TotalDiskBytes : 1021821579264 AvailableDiskBytes : 448155078656 NumberOfPeers : 0 CacheHostConnections : 0 CdnConnections : 0 LanConnections : 0 LinkLocalConnections : 0 GroupConnections : 0 InternetConnections : 0 ForegroundDownloadRatePct : 25 BackgroundDownloadRatePct : 25 UploadRatePct : 100 UploadCount : 36 # --- different cmdlet, completely different schema --- Get-DeliveryOptimizationPerfSnapThisMonth UploadLanBytes : 0 UploadInternetBytes : 0 DownloadHttpBytes : 8574044045 DownloadCacheHostBytes : 5352964220 DownloadLanBytes : 0 DownloadInternetBytes : 0 DownloadFgRateKbps : 1946 DownloadBgRateKbps : 1866 UploadLimitReached : False MonthStartDate : 8/1/2026 12:00:00 AM

Microsoft describes Get-DeliveryOptimizationPerfSnapThisMonth as returning "data similar to data from Get-DeliveryOptimizationPerfSnap but limited to the current calendar month". Measured, it is not similar - it is a much smaller and much more useful schema, and it is the only place you get a clean month-to-date breakdown by source. Do not skip it because the docs make it sound redundant.

Here is the verdict on the measured device, and it is not the verdict a PercentPeerCaching check would have given you.

HTTP bytes, month to date
8,574,044,045
~7.99 GB total, all HTTP sources
Of which Connected Cache
5,352,964,220
~4.99 GB, about 62% of HTTP
LAN peer bytes
0
Peering contributed nothing
Internet peer bytes
0
Expected - LAN mode

So: zero peering, all month, on a device with a correct LAN-mode policy. And roughly 62% of the month's HTTP bytes were served by a cache node rather than crossing the internet. The peering programme has failed. The WAN-egress programme is doing rather well. If you had reported PercentPeerCaching = 0 to a change board as "Delivery Optimization is not working", you would have been factually right and directionally wrong.

The cache node is worth a note because it explains itself. DOCacheHost and DOCacheHostSource are both not set on this device, and yet Get-DeliveryOptimizationStatus reported CacheHost values in the 173.46.83.20x range across several files. Microsoft documents two Connected Cache offerings: the Enterprise and Education product, where "Cache nodes are created in the Azure portal and are configured by applying the client policy using management tools such as Intune", and the ISP product, where nodes "are configured to deliver traffic to customers by manual CIDR or BGP routing". No client policy, cache hits anyway, is consistent with the second. Which means part of your bandwidth win may be arriving from your ISP without you configuring anything - and will silently vary by site and by carrier.

One honest inconsistency in that output, flagged rather than explained: Get-DeliveryOptimizationPerfSnap reports FilesUploaded : 1 and TotalBytesUploaded : 13851984, roughly 13.2 MB, while the month-to-date view reports UploadLanBytes : 0 and UploadInternetBytes : 0. The simplest reading is that the upload predates the current calendar month, since only the second cmdlet is month-scoped. Either way it tells you something valuable: this device has successfully uploaded to a peer at some point, so the peer protocol path is not structurally broken. It just is not being used now.

STEP 5

Eliminate the network before anyone blames it. Three checks, all local, all read-only, and together they close off the entire "firewall is blocking DO" branch in under a minute.

PowerShell (elevated) - the port 7680 chain, measured
# 1. Is the peer listener actually up? Get-NetTCPConnection -LocalPort 7680 | Select LocalAddress,LocalPort,State,OwningProcess LocalAddress LocalPort State OwningProcess ------------ --------- ----- ------------- :: 7680 Listen 16960 # 2. Does that PID belong to DoSvc? Get-CimInstance Win32_Service -Filter "Name='DoSvc'" | Select Name,ProcessId,State,StartMode Name ProcessId State StartMode ---- --------- ----- --------- DoSvc 16960 Running Auto # 3. Did DO open its own inbound rules? Get-NetFirewallRule | Where DisplayName -like '*Delivery Optimization*' | Select DisplayName,Direction,Action,Enabled DisplayName Direction Action Enabled ----------- --------- ------ ------- Delivery Optimization (UDP-In) Inbound Allow True Delivery Optimization (TCP-In) Inbound Allow True

That is a complete chain of custody: DoSvc is Running with StartMode Auto, its PID owns a listening socket on TCP 7680, and both auto-created inbound firewall rules are Enabled with Action Allow. Microsoft documents exactly this behaviour - "Port 7680 is automatically registered and opened by the Delivery Optimization service" - and adds the consequence: "If you block port 7680, peer-to-peer functionality is disabled. However, devices can still download content using HTTP over port 80 or HTTPS over port 443." That is the silent-failure mechanism in one sentence.

To test reachability between two devices rather than just locally, the documented check is Test-NetConnection -ComputerName 192.168.9.17 -Port 7680 from one to the other. Microsoft still describes the Telnet equivalent and notes that a blinking cursor means success, but Test-NetConnection needs no feature install. The full documented port set is worth having: 7680/TCP for peer content, 3544/UDP for Teredo NAT traversal - required when using download mode 2 or 3 - 443/TCP for the DO cloud service, 80/TCP for metadata and CDN payload, and 67 and 68 UDP for DHCP-based groups or cache server discovery.

STEP 6

Confirm the machine is not disqualified by its own hardware. Two numbers, and they eliminate two of the four documented causes Microsoft lists for "None of the computers on the network are getting updates from peers".

PowerShell - peering prerequisites versus documented minimums (read-only)
[math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory/1GB,2) 30.67 # -> vs MinTotalRAM 4 (DOMinRAMAllowedToPeer). PASS Get-Volume -DriveLetter C | Select DriveLetter, @{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}}, @{n='FreeGB';e={[math]::Round($_.SizeRemaining/1GB,1)}} DriveLetter SizeGB FreeGB ----------- ------ ------ C 951.6 417.4 # -> vs MinTotalDiskSize 32 (DOMinDiskSizeAllowedToPeer). PASS # And the VPN check - does any adapter name match VPN / Secure / Virtual Private Network? Get-NetAdapter | Where Status -eq 'Up' | Select Name,InterfaceDescription Name InterfaceDescription ---- -------------------- vEthernet (Default Switch) Hyper-V Virtual Ethernet Adapter Wi-Fi Qualcomm FastConnect 6900 Wi-Fi 6E ... Network Adapter # -> no keyword match, so VPN suppression is not active right now

RAM passes with 30.67 GB against a 4 GB floor. Disk passes with 951.6 GB against a 32 GB floor. No connected adapter matches a VPN keyword. So on this device the resource gates and VPN suppression are all eliminated by measurement, and the remaining candidates are the subnet restriction, content eligibility, and simple lack of a concurrent peer.

Note the shape of that reasoning. Every one of these steps is worth running precisely because it can clear a suspect. A diagnostic that can only ever confirm is not a diagnostic.

STEP 7

Only now go to the traces - and know what you are about to disturb.

There is no channel, so the tooling is cmdlet-based. In escalation order:

Watch out. Microsoft's own note on Get-DeliveryOptimizationLogAnalysis recommends running Get-DeliveryOptimizationLog -Flush first for best results. -Flush stops DoSvc. That is an acceptable trade when you have already captured the live state in steps 1 to 6 - and an evidence-destroying mistake if you run it first. Sequence matters more than command choice here.
STEP 8

Know where the cache is, without hard-coding it.

You need this for two reasons: the disk-size prerequisite is documented as applying to the working directory rather than the OS volume when DOModifyCacheDrive is configured, and any cache-clearing step has to target the right place.

Do not guess and do not hard-code. Read it from the device. Get-DOConfig -Verbose reports WorkingDirectory, which on the measured device came back as C:\WINDOWS\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Windows\DeliveryOptimization\Cache with WorkingDirectoryProvider : DefaultProvider, confirming nothing has moved it. Microsoft publishes the same location as the default in the workflow article, expressed from %SYSTEMDRIVE%. The DeliveryOptimization parent folder on the device holds three siblings - Cache, Logs and State - with the cache itself organised as GUID-named subdirectories and State holding dosvcState.dat plus a keyValueLKG.dat that lines up with the documented KeyValue bootstrap service, described as providing "endpoints for all other services and device configs".

The point of reading WorkingDirectory rather than memorising a path is that DOModifyCacheDrive exists and is sometimes used. A script with a literal path is wrong on exactly the devices where the answer matters. And when you do need to clear the cache, the supported route is Delete-DeliveryOptimizationCache, which takes -FileID for a single file, -IncludePinnedFiles to include pinned content, and -Force to skip prompts - not a manual delete.

The fix: what each advanced finding changes

As in the first post, the goal is to name one constraint and change one thing. These are the findings that only the advanced steps can produce.

What steps 4 to 8 showedWhat it meansWhat to change
Cache host bytes are a large share of HTTP bytes, peer bytes are zeroConnected Cache is already doing the work. Peering is not your bottleneck.Nothing, in most cases. Record it and move on. Microsoft documents BytesFromHTTP as including BytesFromCacheServer, so the two are not additive.
Port 7680 is not reachable between two devicesPeers cannot connect even when the service hands back a peer list.Open inbound TCP 7680 between client subnets. Microsoft notes the service stops listening when idle, so test while a download is running.
The device is below the RAM or disk floorIt is disqualified from peering regardless of download mode.For RAM, Microsoft's default is 4 GB and its recommended range is 1 to 4, so DOMinRAMAllowedToPeer can be lowered to 1. For disk, read the next note before changing anything.
Two devices on the same OS build behave differentlyThey are probably running different doclient.dll versions.Compare the client version, not CurrentBuild, before treating one device as a control.
The cache is not where you assumedA disk-space or permissions assumption built on the default path is wrong.Read the working directory from Get-DOConfig rather than hard-coding the default.
⚠ Gotcha — the disk floor reads strangely in Microsoft's own documentation. DOMinDiskSizeAllowedToPeer has a default of 32 GB, but the page lists its recommended values as 64 to 256. The recommended range therefore sits entirely above the shipped default: following it would raise the bar and disqualify more devices, not fewer. If a device is being excluded by total disk capacity, you are choosing to go below both the default and the recommended range, so treat it as a deliberate exception rather than a tuning step. The check is against total disk capacity, not free space, and Microsoft notes that if Modify Cache Drive is configured, the check applies to that drive instead.
⚠ Warning: Do not clear the Delivery Optimization cache as a diagnostic step. It destroys exactly the evidence these commands read, it gives the device nothing to offer peers, and it guarantees the next download comes over HTTP. If you are going to clear it, capture the aggregates first.

Proof it worked: what to capture

The advanced steps are worth running only if you write down what they returned. Capture these four, before and after whatever you change:

✅ Tip — stagger the two devices, do not start them together. One device alone can never demonstrate peering, because there is nothing to peer from. Microsoft's troubleshooting procedure is to download the same app on two devices on the same network, waiting 10 to 15 minutes between the downloads, then run Get-DeliveryOptimizationPerfSnap on the second device and check that NumberOfPeers is non-zero. The gap matters: the first device has to finish and cache the content before the second has anything to pull from. Start them simultaneously and you will usually see zero peers and conclude peering is broken when the test was simply wrong.
📋 Note: If the second device still reports zero peers in LAN mode, Microsoft's next check is whether both devices reach the internet from the same public IP. If they do not, LAN mode cannot match them, and the documented answer is Group mode (2) with a custom DOGroupID.

References

Companion post: Delivery Optimization says it is peering and your WAN link says otherwise — the plain-English primer, why peering is a permission rather than a switch, and diagnostic steps 1 to 3.

Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows Update
Delivery Optimization says it is peering and your WAN link says…
DO falls back to the CDN silently, with no error and no Event Viewer channel to read.…
Windows Update
The update stuck at 0% is a BITS job, not Windows Update: read…
A download stuck at 0% is a claim about a transfer queue nobody has read. Here is how to…
Windows Update
One read-only PowerShell collector for Windows patching failures…
Test-Path and value checks return confidently wrong patching verdicts on real devices.…