Testing the New Teams in Citrix VDI

by Ray Davis, CTA & Jacksonville CUGC Leader

The purpose of this blog post is to share my preliminary testing comparing classic Teams with the new Teams. It’s important to note that these findings are not suitable for production environments, and my testing has been limited to basic assessments. I did not employ any automated tools or use LoginVSI. Instead, I relied on fundamental tools like procmon and process explorer.

My goal was to observe the differences and assess the backward compatibility of Hdxengine, Webrtc, and other components present in classic teams. In summary, the new Teams feels lighter, and I am optimistic that Microsoft and Citrix are moving in the right direction. Building something substantial takes time, and, as the saying goes, Rome was not built overnight. Great things require patience and careful development.

 With the public preview release of the “new Teams,” I was very curious to see how it performed in a VDI setup. During my testing, I installed both Classic (electron-based) and New (webview2-based). There is nothing fancy here; I will be using Process Explorer and Process Monitor. Here are my specs on the VDI I was testing.

OSWindows 10 Enterprise
CPU1 socket, 2 Cores
Ram4GB
WEMNone
VDA2308
OptimizerBase 22H2
vGPUNone
  1. Classic vs new installers
Installer formatInstall locationAuto update
Classic Teams MSI with the ALLUSERS=1 flagC:\Program Files (x86)\Microsoft\TeamsDisabled
Classic Teams .EXE%localappdata%/Microsoft/TeamsEnabled
New Teams .EXE bootstrapperTeamsbootstrapper.exe is a lightweight wrapper online installer with a headless command-line interface. It allows admins to ‘provision’ (install) the app for all users on a given target computer/.Enabled (and can be disabled via regkey, coming soon
 It installs the Teams MSIX package on a target computer, making sure that Teams can interoperate correctly with Office and other Microsoft software. 
 C:\Program\Files\WindowsApps\PublisherName.AppName_AppVersion_architecture_PublisherID 
   
 Example 
 C:\Program\Files\WindowsApps\MSTeams.23125.600.2069.5679_x64_8wekyb3d8bbwe 
  1. Install the Citrix VDA first; this was a legacy Microsoft Teams requirement for Citrix, and at this time, I am still following the mindset.
  1. On your persistent or non-persistent VM, run the following command as an administrator: teamsbootstrapper.exe -p
  1. You can see the installer options as well, to understand what it offers at this time.
  1. Profile and Cache location for new Teams Client
    • All the user settings and configurations are now stored in:
    • C:\Users\usernameAppData\Local\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams
    • C:\Users\davis\AppData\Local\Packages\MSTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams
    • Make sure this folder is persisted for proper Teams functioning.
    • Installer location for all users with the “-p” option.
  1. In the Microsoft document, it states the following:
    • In addition, you must deploy the following registry key on the VDA for the new Teams client to be optimized:
      • Location: HKLM\SOFTWARE\WOW6432Node\Citrix\WebSocketService
      • Key (REG_Multi_SZ): ProcessWhitelist
      • Value: msedgewebview2.exe
  1. If this registry key is missing, the new Teams client functions in nonoptimized mode (server-side rendering).
  1. Note: it’s a REG_MULTI_SZ key not a REG_SZ key.
  1. Classic Teams resource consumption at launch.
    • Starting with an Idle CPU base
  1. Teams opened on the session. This is the default with GPU hardware acceleration on.
  1. CPU handles from the launch.
  1. Teams HDX Optimized
  1. Turn off GPU hardware acceleration to see if there were any differences on Classic Teams.
  1.  CPU handles from the launch. Compared to number 13, it does seem somewhat better.
  1. Allowing it to go Idle before jumping on a call/meeting
  1. Tested a call and used Process Explorer to watch the CPU go up and down.
  1. Now, I am going to repeat the process with the New Teams
  1. HDX optimized for new Teams using the same Webrtc and HDXEngine
  1. USB device Devices came through okay.
  1. CPU handles from the launch.
  1. It does seem lighter and balanced out faster than the classic teams.
  1. Upon Opening the new teams, and within 5-7 seconds, this happens below. You can see the CPU go up, then go back down in time.
  1. Test call on the new Teams.
  1. Test meeting with the new teams in a meeting from my VDI to a Windows 10 PC at home on a Tmobile HotSpot
  1. On W10 VDI, the Camera is on, screen sharing is enabled, and the background is defined.
  1. I tried to capture what process explorer was doing during this time.
  1. This shows the CPU cycles during the testing for “the Camera is on, screen sharing is enabled, and the background is defined.”
  1. What I saw on the W10 PC (non-VDI) on my T-Mobile hotspot. Outside the network. This would represent what the other people see. I am just testing in a meeting with myself on two different devices.
  1. Citrix Monitor in DaaS, and showing the WebSocketAgent on the VDA is still being used.
  1. The is the PC where I am running the Workspace App. You can see that the HDX RTC Engine is still used.
  1. The next test I wanted to see if Citrix Monitor (Director) would still pick up the Webrtc channel. I added this to the VDA to see if I can pick up the meeting stats from HDX Monitor
    • HKLM\SOFTWARE\WOW6432Node\Citrix\HdxMediaStream
    • reg key value:
    • name: WebrtcDirectorIntegration
    • type: DWORD
    • value: enable(1), disable(0)
  1. Reversed Sharing, Meeting from the Non-VDI device, to see how the Webrtc looked on the receiving end of the new Teams.
  1. Test meeting with Classic Teams. Running a meeting from my VDI to a iPhone running Teams
  2. On W10 VDI, Camera on, screensharing on, and background on.
  1.  This shows the CPU cycles during the testing for “the Camera is on, screen sharing is enabled, and the background is defined.”
  1. Reverse sharing from iPhone to VDI session
  1.  This shows the CPU cycles on reverse sharing etc, testing for “the Camera is on, screen sharing is enabled, and the background is defined.”

Microsoft Team Process  while in use.

  1. The user initiates the Microsoft Teams application.
  2. Microsoft Teams undergoes authentication with Microsoft 365, which results in the enforcement of tenant policies within the Teams client.
  3. Relevant TURN and signaling channel details are communicated to the Teams application.
  4. Microsoft Teams recognizes its operation on a Virtual Desktop Infrastructure (VDA) and initiates API calls to the Citrix JavaScript API.
  5. Within Microsoft Teams, the Citrix JavaScript component establishes a secure WebSocket connection to WebSocketService.exe, running on the VDA. WebSocketService.exe operates under the Local System account and listens on 127.0.0.1:9002.
  6. WebSocketService.exe is responsible for TLS termination, user session mapping, and the initiation of WebSocketAgent.exe, which now operates within the user’s session.
  7. WebSocketAgent.exe establishes a generic virtual channel by interfacing with the Citrix HDX Browser Redirection Service (CtxSvcHost.exe).
  8. The HDX Engine of Citrix Workspace app, wfica32.exe, spawns a new process known as HdxRtcEngine.exe (or HDXTeams.exe in versions prior to Workspace app 2009.6). This new process serves as the WebRTC engine for Teams optimization.
  9. HdxRtcEngine.exe and Teams.exe establish a bidirectional virtual channel, enabling the processing of multimedia requests.
  10. User A initiates a call to User B. Teams.exe communicates with the Teams services in Azure to establish an end-to-end signaling pathway with User B.
  11. Teams running on the VDA consults HdxTeams (HdxRtcEngine) to acquire a set of supplementary call parameters, including codecs and resolutions, referred to as the Session Description Protocol (SDP) offer. These call parameters are then transmitted through the established signaling path to Teams services in Azure and onward to User B.
  12. The SDP offer/answer exchange and Interactive Connectivity Establishment (ICE) checks are successfully completed.
  13. ICE checks for NAT and firewall traversal are accomplished through Session Traversal Utilities for NAT (STUN).
  14. Secure Real-time Transport Protocol (SRTP) is used for the transmission of media between HdxRtcEngine.exe and User B.
  15. In the case of a meeting, SRTP is used for media transmission between HdxRtcEngine.exe and the Microsoft 365 conference servers

Resources for references

Optimization for Microsoft Teams

Troubleshooting HDX Optimization for Microsoft Teams (updated frequently)

Quick comparison.

Classic Team launched



CPU handles from the launch.



Test call and used Process Explorer to watch the CPU go up and down.






In a meeting      

     
New Teams launched



CPU handles from the launch.



Test call and used Process Explorer to watch the CPU go up and down.






In a meeting

             

This wraps up my initial testing for now. As I mentioned, it was basic testing, and I anticipate that this will evolve into a more extensive and detailed discussion over time. In general, the new Teams exhibits a lighter feel and consumes less RAM. While the CPU does experience an impact compared to classic Teams, the duration of this impact is significantly shorter. I’ve noticed that the interface is much more responsive. It’s important to note that this testing focused specifically on meetings, calls, backgrounds, and sharing. It did not encompass tasks such as using Outlook, scheduling meetings, and engaging with Teams in a day-to-day context. Additionally, I want to emphasize that this is solely testing, and I strongly discourage using it in a production environment. There are still too many uncertainties in the VDI space.

One comment

  1. Nice post, great work.
    Has anyone run hdx optimized on WS2022?
    Configured everything according to MS article, but the “hdx optimzized” wont show up.
    WS 2022, VDA 2203CU3, CWA 2303, latest teams msix.
    Marco

Leave a Reply