11.01.2015 Views

UCF Content Transfer Tuning Guide - EMC Community Network

UCF Content Transfer Tuning Guide - EMC Community Network

UCF Content Transfer Tuning Guide - EMC Community Network

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!