Printing is always a challenge in a XenApp/XenDesktop design, as so many different criteria come into consideration.
Note: I’ll use XenApp from now on, but from a printing design point of view, it does not change a lot between XenApp and XenDesktop, unless you are using RemotePC feature of XenDesktop (more on that at another time?)
OnĀ eDocs, some scenarios are covered, and there is one question that I’m often asked by customers when working on a XenApp design relates to the location of the print server. We always say that data should be close to the XenApp server. Is it the same for the Print Server location?
Different printing design possibilities
Often, in XenApp architectures, the Print Server is located in the datacenter, close to the XenApp server. With that setup, the important piece is the RAW bandwidth sent by the print server to the actual printer. It is also worth noting the use of SMB protocol between XenApp and the Print Server:
If you add Citrix Universal Print Server component to that configuration, HTTP will replace SMB, but the critical part remains the RAW bandwidth to the remote printer:
When the Print Server (here with UPS component) is located in the branch office, the focus switches from the RAW printer data to the traffic between XenApp and the Print Server as itās the one being sent over the wire:
The goal today is to determine what print driver language offers lower bandwidth usage, where the location of a print server is best suited, based on the kind of documents and printing technology (Microsoft print server, Citrix UPS, Citrix UPS+UPD) used.
Of course, no one only prints a single type of document, however based on statistics that you can get within your company, these tests results might assist you in your decision.
Lab configuration
I have been using Citrix UPS 7.6 (on WS2008R2 SP1, as the WS2012R2 compatible release isn’t publicly available yet) with latest hotfixes and XenApp 7.6 on WS2012R2 with latest hotfixes (including UPS7.6 hotfixes) to connect to a published desktop. All is hosted on XenSerer. The printer is a Canon Ā iRC2030, declared as IP printer on UPS VM with the UFRII, PS3, PCL5e and PCL6 drivers (all 14.02 release except the PS3 which is version 21.52).
Note: UFRII is a proprietary Page Description Language (PDL) developed by Canon. I recommended reviewing Canon’s website for more details about this technology.
The tests
Printers were defined as Session Printers in XenApp and 3 tests performed : UPS disabled, UPS with native driver and UPS with UPD driver.
Sample DOCX, XLSX, PPTX and PDF Ā documents have been used (ShareFile link), all coming from the Citrix website. Microsoft Office 2010 and Adobe Acrobat Reader 10.1.4 were used. WireShark runs on the UPS VM to gather the amount of data sent to UPS and to the printer.
The tests performed without UPS are used as the reference, providing bytes and duration of the transmission to the endpoint (either UPS or printer). However, the duration to the printer does not include the actual print time, that is the amount of time required for the whole print job to be physically printed. Why? because I was far from the printer when I run my tests… š
Disclaimer: the numbers are not real life numbers but gathered from a lab environment, with sample documents. You should perform similar testing to determine what is best suited in your environment.
Microsoft Network Printing results
DOCX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 13.5 | 3639365 | 11.8 | 780641 | 14 | 2471111 |
to PRN | 7.7 | 3234527 | 2.57 | 1439569 | 2.12 | 2522645 |
PPTX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 4.8 | 2519907 | 4.9 | 942156 | 5.5 | 1372595 |
to PRN | 3.9 | 2350864 | 0.9 | 1935805 | 0.7 | 1391463 |
PCL5e | PCL6 | UFRII | ||||
time | byte | time | byte | time | byte | |
to PS | 9.2 | 1658351 | 7.3 | 478591 | 8.6 | 1150946 |
to PRN | 1.5 | 1374404 | 0.8 | 523063 | 0.8 | 906731 |
Citrix UPS with native drivers
DOCX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 13.3 | 2447651 | 14 | 4711282 | 11.1 | 5522323 |
to PRN | 3.5 | 2921143 | 2.6 | 1439798 | 4.9 | 2119169 |
XLSX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 7.9 | 3456200 | 12.5 | 3784939 | 14.3 | 6702008 |
to PRN | 2.1 | 2710400 | 1.8 | 482031 | 2.0 | 1511389 |
PPTX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 6.2 | 1611616 | 6.3 | 2756111 | 6.8 | 2304349 |
to PRN | 2.1 | 3330415 | 0.9 | 1884901 | 0.7 | 1391469 |
PCL5e | PCL6 | UFRII | ||||
time | byte | time | byte | time | byte | |
to PS | 8.0 | 3382016 | 5.6 | 1007188 | 6.6 | 1664938 |
to PRN | 0.7 | 1374692 | 0.7 | 523237 | 0.7 | 906461 |
Citrix UPS with Citrix UPD driver
DOCX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 21.6 | 7372622 | 16.8 | 5819772 | 36.7 | 14165652 |
to PRN | 11.5 | 3077676 | 9.9 | 1332327 | 14.2 | 2523394 |
XLSX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 7.9 | 3456200 | 12.5 | 3784939 | 14.3 | 6702008 |
to PRN | 2.1 | 2710400 | 1.8 | 482031 | 2.0 | 1511389 |
PPTX | PCL5e | PCL6 | UFRII | |||
time | byte | time | byte | time | byte | |
to PS | 6.2 | 1611616 | 6.3 | 2756111 | 6.8 | 2304349 |
to PRN | 2.1 | 3330415 | 0.9 | 1884901 | 0.7 | 1391469 |
PCL5e | PCL6 | UFRII | ||||
time | byte | time | byte | time | byte | |
to PS | 8.0 | 3382016 | 5.6 | 1007188 | 6.6 | 1664938 |
to PRN | 0.7 | 1374692 | 0.7 | 523237 | 0.7 | 906461 |
XenApp to Print Server traffic
To ease reading, a graphical view can be easiest, showing the traffic from XenApp to Print Server depending on the type of printer used (PCL5, PCL6 or UFRII) and the printing technology.
Using a PCL6 driver seems to be the most logical solution, compared to PCL5 and UFRII. It is worth noting the overhead generated by UPS over native Microsoft printing and I would recommended, if you want to evaluate UPS, to test with native drivers. Why? Because UPS embeds printing traffic in XTE service (Apache based service) which can lead to NetScaler TCP/HTTP optimization and load balancing (that’s for another topic some day).
Print Server to Printer traffic
To ease reading, a graphical view can be easiest, showing the traffic from Print Server to the traget printer depending on the type of printer used (PCL5, PCL6 or UFRII) and the printing technology.
PCL6 language is the best choice (I can’t explain the results with PDF and UPD when printing to PCL6, even if several tests have been done) if the bandwidth optimization between the Print Server and the printer is the ultimate goal.
Summary
From this testing, UPS will not help reducing the bandwidth but offers a free Universal Printing solution (no drivers anymore on XenApp!) and might benefit from NetScaler load balancing and TCP optimization (to be confirmed in another blog post…). PCL6 seems to provide a suitable choice for anyone wishing to limit the printing bandwidth either to the Print Server or to the Printer.