In additions to all the bugs and improvements done to the code and plugins, the following new features are available when you upgrade from v3.2 to v4.0. For details on what has changed to existing features and configurations that might affect your upgrade, please see the Upgrading to v4.0.x document.

Tagging disks in storage.config

The intent of this feature is to allow content to be assigned to specific disks. As an example, using storage.config tagging, together with rules in hosting.config and volumes.config, you can force certain URLs to go to SSD disks.  TBD more details, Phil and Jan ?

Jira Ticket:

HTTP transaction buffering control

To avoid potential memory consumption issues, transactions can now be set to be throttled when their buffer usage exceeds a bound, and released when it becomes lower. This can also be used as a rough bandwidth throttle per transaction, as limiting the buffer space will throttle origin server connection bandwidth if the client or cache is unable to keep up. This can be set per transaction via the plugin API.

The following configurations have been added to control this feature (the default values are shown):

 CONFIG proxy.config.http.flow_control.enabled INT 0
 CONFIG proxy.config.http.flow_control.high_water INT 65536
 CONFIG proxy.config.http.flow_control.low_water INT 65536

Jira Ticket:

CPU thread affinity

It is now possible to set thread affinity for the main worker threads. This can improve performance, particular on NUMA systems. This is configured via

 CONFIG proxy.config.exec_thread.affinity INT 1

In addition, you can also control how large the memory pools for each thread is, via a new configuration (default is 512):

 CONFIG proxy.config.allocator.thread_freelist_size INT 512

The setting means that each freelist on every thread can hold 512 objects each. Remember that there are many freelists, bumping this up could cause your memory to increase significantly during a traffic spike. If memory is not an issue, bumping this up can increase performance, since it helps avoiding falling back to the global freelist allocator.

Jira Ticket:
Jira Ticket:

Delay proxy services until cache is enabled

When Traffic Server starts, we load meta-data information from the cache. For very large caches, this can take a fairly long time (several seconds). During this load and initialization time, the server will by default proxy requests to the origin. A new configuration has been added, which prevents proxying while the cache is being initialized:

 CONFIG proxy.config.http.wait_for_cache INT 1

Jira Ticket:

Controlling chunking size

A new configuration option is added, which lets you control the size of the chunk sizes for content that is Transfer-Encoding with chunking (default value shown):

 CONFIG proxy.config.http.chunking.size INT 4096

This feature can be used to optimize performance around chunking, and was implemented to solve a high pressure memory issue.

Jira Ticket:

Caching empty documents

In previous versions of Apache Traffic Server, content with empty bodies were never cacheable, regardless of what the HTTP header said. We now provide a new option, which allows this type of content to (possibly) be cached. This is particularly useful for caching e.g. redirect responses which has no body. The new configuration is (default is off):

 CONFIG proxy.config.http.cache.allow_empty_doc INT 0

Jira Ticket:

Allow cluster cache to duplicate objects

A new feature and configuration allows for objects to be stored in more than one cluster member. The new configuration is (default off):

 CONFIG proxy.config.http.cache.cluster_cache_local INT 0

Jira Ticket:

Host resolution control

Resolving the IP address of an origin server can be set to prefer IP address families in specific orders, both globally and on a per port basis.

 CONFIG proxy.config.hostdb.ip_resolve STRING ipv4;ipv6

Jira Ticket:

Overridable configurations

The following configurations are now overridable through plugin APIs and/or the plugin:


New Plugin: cacheurl

TBD: More details.

New plugin: gzip

The gzip plugin allows you to off-load content compression to your proxy cache, which can be a way to reduce CPU pressure on your origins. It also lets you control compression on the caches even if you can't control the origin servers. This plugin is now part of the default build and installation.

API additions and changes

Lifecycle hooks

Hooks have been added for port initialization, ports ready (accepting connections), and cache ready. See TS-1487 and the TSLifecycleHookAdd man page.

Milestone metrics

The following API has been added for plugins to examine transaction milestone timers:

TSReturnCode TSHttpTxnMilestoneGet(TSHttpTxn txnp, TSMilestonesType milestone, TSHRTime *time);

Cache no-store API

Port Descriptors

Background fill indicator

TBD: please edit / add.

HTTP Range requests

Wasn't working with 3.2, is hopefully working with 3.4...

  • No labels