UCF Content Transfer Tuning Guide - EMC Community Network
UCF Content Transfer Tuning Guide - EMC Community Network
UCF Content Transfer Tuning Guide - EMC Community Network
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>UCF</strong> <strong>Content</strong> <strong>Transfer</strong> <strong>Tuning</strong> <strong>Guide</strong><br />
This document provides guidance on tuning the performance of the <strong>UCF</strong> content<br />
transfer mechanism. <strong>UCF</strong> (Unified Client Facilities) is the <strong>EMC</strong> Documentum<br />
framework for performing content transfer between the client and content<br />
servers over HTTP.<br />
September 2008
Copyright © 2008 <strong>EMC</strong> Corporation. All rights reserved.<br />
<strong>EMC</strong> believes the information in this publication is accurate as of its publication date. The information is<br />
subject to change without notice.<br />
THE INFORMATION IN THIS PUBLICATION IS PROVIDED “AS IS.” <strong>EMC</strong> CORPORATION<br />
MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WITH RESPECT TO THE<br />
INFORMATION IN THIS PUBLICATION, AND SPECIFICALLY DISCLAIMS IMPLIED<br />
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.<br />
Use, copying, and distribution of any <strong>EMC</strong> software described in this publication requires an applicable<br />
software license.<br />
For the most up-to-date listing of <strong>EMC</strong> product names, see <strong>EMC</strong> Corporation Trademarks on <strong>EMC</strong>.com<br />
All other trademarks used herein are the property of their respective owners.<br />
2
Table of <strong>Content</strong>s<br />
Introduction .................................................................................................................................. 4<br />
Overview of <strong>UCF</strong>.......................................................................................................................... 4<br />
High-Level <strong>UCF</strong> Operations......................................................................................................... 4<br />
Optimizing <strong>UCF</strong> for Best Performance ........................................................................................ 5<br />
Tip #1 – Use ACS and BOCS for <strong>Content</strong> <strong>Transfer</strong> Whenever Possible................................. 5<br />
Tip #2 – Optimize <strong>UCF</strong> Client Initialization............................................................................... 5<br />
Tip #3 – Configure On-Demand Virus Scanners to exclude unnecessary files ....................... 6<br />
Tip #4 – Reduce <strong>UCF</strong> Client Communications over High Latency .......................................... 6<br />
Tip #5 – Tune the Buffer or Chunk Size to Improve Download over High Latency ................. 7<br />
Tip #6 – Improve Upload Performance in D6 and Above ........................................................ 9<br />
Tip #7 – Use Adaptive Parallel <strong>Content</strong> <strong>Transfer</strong> to Consume More Available Bandwidth ..... 9<br />
Tip #8 - <strong>Tuning</strong> <strong>Content</strong> Download when Documentum User Directory is on a <strong>Network</strong> Drive<br />
................................................................................................................................................ 11<br />
Tip #9 – Use <strong>UCF</strong> Client Logging to Measure performance .................................................. 11<br />
Appendix A: Reduce the Effect of On-Access Scanning on <strong>UCF</strong> Initialization and Other Java<br />
Applets After Reboot.................................................................................................................. 12<br />
Appendix B – Changing <strong>UCF</strong> Client Settings for All Users........................................................ 15<br />
3
Introduction<br />
In Documentum applications, the speed at which users can retrieve or add content to the system plays a big<br />
part in the overall end user experience. <strong>Network</strong> latency and bandwidth restrictions, physical architecture<br />
and client configuration all have an impact on the time it takes between initiating a content transfer,<br />
performing the upload or download, and returning control back to the user.<br />
This document will discuss various tuning options available to achieve the best possible performance for<br />
<strong>UCF</strong> content transfer in your network environment.<br />
Overview of <strong>UCF</strong><br />
<strong>UCF</strong> (Unified Client Facilities) is the <strong>EMC</strong> Documentum framework for performing content transfer<br />
between the client and content servers over HTTP. It provides many features that extend beyond simple file<br />
transfer protocol, such as:<br />
- <strong>Content</strong> compression to optimize transfers of larger files over the network<br />
- Support for complex documents, such as XML files<br />
- Support for compound document types, such as OLE objects inside a Microsoft Office document<br />
- Awareness of locally downloaded files, and the ability to avoid downloading the same content<br />
twice<br />
- Registry support, to allow checkout from one application and check in from another<br />
- Recoverability in the case of a brief network interruption<br />
- Location aware, to allow users to transfer content from the closest ACS or BOCS server<br />
High-Level <strong>UCF</strong> Operations<br />
When a content transfer is initiated, the <strong>UCF</strong> client running on the end user machine is initiated if it is not<br />
already running. The applet loads the <strong>UCF</strong> client jars and initiates contact with the <strong>UCF</strong> server, running on<br />
the application server.<br />
The <strong>UCF</strong> client and server pass information back and forth about the environment and requested action<br />
before content is transferred between the two machines. Depending on the architecture and configuration,<br />
content may be transferred through the application server, directly to or from an ACS server on the content<br />
server, or a BOCS server located near the user.<br />
After the content transfer is complete, there will be some additional communication from server to client to<br />
provide instructions on registry entries to be added or modified, directions on how to launch the appropriate<br />
application for view or edit operations, or instructions on how to delete the local file on check in.<br />
4
Optimizing <strong>UCF</strong> for Best Performance<br />
Tip #1 – Use ACS and BOCS for <strong>Content</strong> <strong>Transfer</strong> Whenever Possible<br />
The introduction of ACS and BOCS servers in 5.3 SP1 have allowed content transfer to be performed<br />
directly from the content server, rather than requiring that the content always pass through the application<br />
server. This not only removes the double-hop that is required (which is very costly for small files) but also<br />
reduces the load on the application server.<br />
In the 5.3 timeframe, ACS and BOCS could only be used for download operations such as checkout, export<br />
and view. All upload operations still passed through the application server.<br />
From D6 onward, ACS and BOCS servers can also be used for upload operations.<br />
Note that not all applications are network location aware and able to take advantage of remote ACS and<br />
BOCS servers.<br />
Tip #2 – Optimize <strong>UCF</strong> Client Initialization<br />
In 5.3 SP1 through SP5, D6 and D6SP1, the <strong>UCF</strong> client engine will time out after one minute of inactivity,<br />
and the javaw.exe process would be terminated. This means that if a user initiates another content transfer<br />
request after the timeout has occurred, the browser must re-initialize the <strong>UCF</strong> client and restart javaw.exe.<br />
This value can be increased in the ucf.client.config.xml file as follows:<br />
Edit the ucf.client.config.xml file (located at C:\Documents and<br />
Settings\\Documentum\ucf\\shared\config\ucf.client.config.xml) and add the<br />
following option to extend the <strong>UCF</strong> Client Timeout.<br />
<br />
30<br />
<br />
Close all browser windows and log back into the application. The next content transfer operation will cause<br />
these new settings to take effect.<br />
With these new settings, the <strong>UCF</strong> client will remain alive for at least 30 minutes of inactivity before<br />
terminating itself.<br />
Note that the default value has been increased in 5.3 SP6 and D6.5.<br />
5
Tip #3 – Configure On-Demand Virus Scanners to exclude unnecessary files<br />
The first time the <strong>UCF</strong> client is initialized after restart, the on-demand scanner will need to scan all jars and<br />
DLLs prior to launching them. In addition, if it is the first time java has been used since reboot, the scanner<br />
will scan all of the Java jars and DLLs. This slows initialization down tremendously.<br />
With some small changes to the configuration of the virus scanner, it is possible to see much faster <strong>UCF</strong><br />
client initialization without sacrificing the security of the system. Please see Appendix A for more detailed<br />
instructions on how to implement this recommendation when using McAfee.<br />
Tip #4 – Reduce <strong>UCF</strong> Client Communications over High Latency<br />
When the <strong>UCF</strong> client is remote from the <strong>UCF</strong> server, the time it takes for each request/response is greatly<br />
increased. As there can be many such roundtrips, it can add significant time to the end-to-end operation,<br />
which is especially noticeable for small files.<br />
In order to reduce the chattiness of the <strong>UCF</strong> communication, handshake and request optimizations were<br />
introduced in D6 SP1 and 5.3 SP6.<br />
Note: These optimizations were also back ported to 5.3 SP5 and can be found at<br />
ftp://dev_pre:qa5.grN6@ftp2.documentum.com/<strong>UCF</strong>/5.3SP5/SP5_HF_GW2. However, <strong>EMC</strong><br />
strongly recommends that customers upgrade to 5.3 SP6 instead of applying the hotfix as 5.3 SP6 includes<br />
a number of other performance and stability enhancements.<br />
6
Tip #5 – Tune the Buffer or Chunk Size to Improve Download over High Latency<br />
Each application server has a default sized buffer that it uses when transferring data across the network to<br />
clients. In most cases, this buffer is sized much too small, resulting in slower transfers over the WAN as<br />
more roundtrips are necessary.<br />
Tomcat and Jboss<br />
If you are using Tomcat or Jboss as the application server and you are not using ACS, you can add the<br />
socketBuffer parameter to the HTTP Connector as shown below:<br />
<br />
<br />
If you are using 5.3 ACS and BOCS the application server is Tomcat 5.0.28. In versions 5.3 SP1 or SP2,<br />
you will need to add the socketBuffer parameter. In 5.3 SP3 through SP6, this parameter should already<br />
have been added by the installer.<br />
In 6.5 and beyond, Jboss is the container for ACS and BOCS. In 6.5 SP1, enhancements were added to the<br />
embedded Jboss server to enable it to recognize and use the socketBuffer parameter.<br />
7
BEA Weblogic<br />
If you are using BEA Weblogic as your application server and you are not using ACS, be sure to add the –<br />
Dweblogic.ChunkSize parameter. By default, the ChunkSize is 4k which is much too small.<br />
It can be set in the config.xml for the domain:<br />
<br />
server1<br />
<br />
false<br />
<br />
localhost<br />
17001<br />
<br />
<br />
<br />
-Dweblogic.Chunksize=64000<br />
weblogic<br />
{3DES}wmzrpHOymvTy3q8TOeF1qQ==<br />
<br />
<br />
It can also be defined in the set_domain_env batch file with the other JAVA_PROPERTIES values:<br />
set JAVA_PROPERTIES=-Dplatform.home=%WL_HOME% \<br />
-Dwls.home=%WLS_HOME% -Dwli.home=%WLI_HOME% \<br />
-Dweblogic.Chunksize=64000<br />
In D6 and D6 SP1, the application server that hosts ACS and BOCS is BEA Weblogic, and the installer has<br />
automatically added those options to the script that starts the embedded Weblogic server<br />
(startMethodServer.cmd for example).<br />
IBM Websphere<br />
If you are not using ACS and content is being transferred through WAS, then you may see improvements in<br />
content download performance for large files by modifying the ResponseChunkSize configuration<br />
parameter in the plugin-cfg.xml.<br />
<br />
where N equal the chunk size in kilobytes. The default value is 64 (kilobytes).<br />
8
Tip #6 – Improve Upload Performance in D6 and Above<br />
In D6, a parameter was added to the ucf.client.config.xml file that allowed the users to specify a chunk size<br />
to be used when uploading content.<br />
Internal testing showed that a value of 49152 worked best with ACS on BEA when simulating various<br />
WAN conditions. However, in environments where customers are not using ACS write, or whose network<br />
conditions are different from that which was tested, this value may not be optimal. Increasing or decreasing<br />
the optimal.chunk.size parameter based on your specific network conditions can be beneficial.<br />
<br />
49152<br />
<br />
Note that this setting is ignored if the client is using Sun Java version 1.6 due to a Java bug<br />
(http://bugs.sun.com/bugdatabase/view_bug.dobug_id=6631048).<br />
Tip #7 – Use Adaptive Parallel <strong>Content</strong> <strong>Transfer</strong> to Consume More Available<br />
Bandwidth<br />
By default in most versions of <strong>UCF</strong>, content download operations will be done in a single thread. If<br />
sufficient network bandwidth is available, the download operations could perform significantly faster if the<br />
file was broken up into smaller pieces and transferred by multiple concurrent threads.<br />
In 5.3 SP6 and D6.5 the <strong>UCF</strong> client can be configured to use multiple threads when downloading files. This<br />
is controlled in the ucf.client.config.xml file using the following parameters:<br />
<br />
5<br />
<br />
<br />
131072<br />
<br />
<br />
300<br />
<br />
<br />
131072<br />
<br />
The “max.parallel.download.streams” parameter limits the number of threads that can be run concurrently<br />
when performing a parallel download. In this example, 5 separate streams could potentially be initialized. If<br />
one of the streams finishes their assigned task ahead of the others, it is then free to request a new range of<br />
bytes to be downloaded.<br />
The “min.parallel.segment.size” parameter specifies that if the remaining portion of a document after a byte<br />
range is assigned is smaller than a specified value, it should not be assigned to a new thread. Rather the<br />
original thread’s byte range should be extended to include those additional bytes. For example, if a thread is<br />
supposed to download 500Kb of a 600Kb file, as the remaining number of bytes is less than 128k, no new<br />
thread will be started and the original thread will assume ownership of those additional bytes.<br />
The “Adaptive” part of parallel content transfer is controlled by the remaining two parameters. As tests<br />
have shown that disk I/O actually becomes a bottleneck and degrades performance if the content is<br />
transferred in parallel over LAN conditions, it is important to be able to control when the parallel content<br />
transfer is actually turned on. In this case, the <strong>UCF</strong> client will measure how many bytes were transferred<br />
9
initially by a single thread within a specified timeframe. If the number of bytes is less than what it<br />
expected, parallel content transfer will be turned on. If it is more than was expected, then it is assumed that<br />
bandwidth and latency are sufficient for a single thread to transfer the content most efficiently.<br />
In the example above, the <strong>UCF</strong> client will measure the number of bytes that have been downloaded in the<br />
first 300ms of transfer (or as close to that time as possible). It will enable parallel content transfer if less<br />
than 131072 bytes (128k) have been downloaded, and disable it if more than 128k has been downloaded.<br />
If your remote users have very high latency, it is likely that you will want to increase the<br />
“measurement.time.interval” to match the round trip time plus time to download a small portion of the file.<br />
For example, if you have 200ms round-trip latency, you might consider increasing the<br />
measurement.time.interval to 500ms to compensate for the time it takes for the request to reach the ACS<br />
server and start the content transfer.<br />
In order to permanently disable parallel content transfer, all that must be done is changing the<br />
“max.parallel.download.streams” to 1, or decreasing the “single.thread.throughput” to a very small number,<br />
such as 1. In this case, regardless of the actual throughput, parallel content transfer will not be used. This is<br />
especially important in load testing scenarios, where many clients are being simulated from the same client<br />
machine.<br />
10
Tip #8 - <strong>Tuning</strong> <strong>Content</strong> Download when Documentum User Directory is on a<br />
<strong>Network</strong> Drive<br />
If the location of the Viewed and Checkout directories are on a network drive, or users regularly export<br />
content to a network drive, performance can be improved by setting the value of “ucf.file.buffer.size” to a<br />
larger number. The default value is 32768.<br />
To set it for a single user, simply add the following to the ucf.client.config.xml on the client machine:<br />
<br />
61440<br />
<br />
To set the default for all users, add the same option to the ucf.installer.config.xml file on the application<br />
server and force a new version of <strong>UCF</strong> on the server side using the steps in Appendix B.<br />
Tip #9 – Use <strong>UCF</strong> Client Logging to Measure performance<br />
<strong>UCF</strong> Client logs are extremely useful when diagnosing <strong>UCF</strong> performance.<br />
<strong>UCF</strong> client logging is enabled on the end user’s machine.<br />
Edit the ucf.client.logging.properties file, located at:<br />
C:\Documents and Settings\\Documentum\ucf\\shared\config<br />
For best results, set the log level to FINEST, as shown below:<br />
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler<br />
.level=FINEST<br />
#-------------------<br />
java.util.logging.FileHandler.pattern=C:/Documentum/logs/ucf.client%u.log<br />
java.util.logging.FileHandler.limit=10485760<br />
java.util.logging.FileHandler.count=10<br />
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter<br />
java.util.logging.FileHandler.encoding=UTF-8<br />
#-------------------<br />
java.util.logging.ConsoleHandler.level=OFF<br />
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter<br />
In addition, to prevent the <strong>UCF</strong> client log from overwriting itself each time, change the value of<br />
java.util.logging.FileHandler.count to a number greater than 1. As each new client initializes, the old logs<br />
will be renamed and preserved for further analysis.<br />
In the <strong>UCF</strong> client logs you will see entries such as “Logging request: getFile” and “Handled request:<br />
getFile” with timestamps. This can be used to better measure the time taken in the <strong>UCF</strong> pre-processing,<br />
content transfer and post-processing phases.<br />
11
Appendix A: Reduce the Effect of On-Access Scanning<br />
on <strong>UCF</strong> Initialization and Other Java Applets After Reboot<br />
1. Right-click on the VirusScan icon in the system tray and choose “On Access Scan Properties.<br />
2. Click on All Processes.<br />
3. Click on Advanced.<br />
4. Ensure “Scan inside archives” is NOT selected.<br />
5. Click on the Detection tab.<br />
6. Click on the Exclusions button.<br />
12
7. Click on Add.<br />
8. Add C:\Documents and Settings\s38737\Documentum\ucf , with “Also exclude subfolders”, “On<br />
Read” and “On Write”.<br />
9. Click on OK to save.<br />
10. Click Add to add another path.<br />
13
11. Add C:\Program Files\Java with “Also exclude subfolders” and “On Read”.<br />
12. Click OK to save.<br />
14
Appendix B – Changing <strong>UCF</strong> Client Settings for All Users<br />
1. Edit the \webtop\wdk\contentXfer\ucf.installer.config.xml file.<br />
2. In this file, you will find the following line,<br />
<br />
<br />
<br />
<br />
3. Change the highlighted text above from 5.3.0.XXX to 5.3.0.XXXa<br />
4. Under the configurations tag, change or add the desired option.<br />
<br />
value<br />
<br />
The next time the <strong>UCF</strong> client engine is initialized on the client side, the new <strong>UCF</strong> settings will be<br />
downloaded and added to the ucf.client.config.xml file.<br />
There may be cases where the “default” values in the ucf.installer.config.xml should not be applied to the<br />
client side. In this case, the “persistent” attribute can be added to the option on the client side. This will<br />
prevent any changes on the server side from being applied to that particular client.<br />
<br />
value<br />
<br />
If not specified, then persistent is set to false.<br />
The persistent property can be specified on the ucf.installer.config.xml and in the ucf.client.config.xml. The<br />
following chart outlines the expected behavior:<br />
Server Client Description<br />
false false Server value will override client value.<br />
true true Server value will override client value.<br />
true true Server value will override client value.<br />
false true Client value will not be overridden.<br />
15