You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 21 Next »

While the default configuration values for ATS will get you up and running,
at the moment they're designed for regression testing and not real-world applications.

This page documents what I've discovered myself through a fair amount of experimentation
and real-world experience.

The following lists the steps involved in taking a generic configuration,
and modifying it for my own needs. Yours may vary, however, and I'll do my best
to indicate which settings should be sized based on your install.

All three Wiki pages use configuration examples from my running home Traffic Server setup.

Current Home Machine

  • Make/Model: Apple iMac Mid 2011
  • CPU: 3.4 Ghz Intel Core i7 (quad-core w/Hyperthreading)
  • Memory: 8GB
  • Disk: 1TB
  • OS: Mac OS X v10.8.5
  • Cache Size: 2GB

Current Testing Regimen

The following settings have been tested against the following:

  • IPv4 websites
  • IPv6 websites
  • Explicitly difficult web pages (i.e. Bing Image Search)
  • Explicitly SSL web sites (i.e. Facebook)

The following settings are all located in /usr/local/etc/trafficserver/records.config.
When adding lines, simply organize them in alphabetic sequence.

CPU Cores (also multiple CPUs)

The default config for ATS supports up to 2 CPU cores. I have 4 and decided to update the config to reflect that.
One could actually increase this setting higher, but I'm not a huge fan of Hyperthreading so I didn't bother.

CONFIG proxy.config.exec_thread.limit INT 4

HTTP Chunking

The default config for ATS specifies that the proxy itself use data "chunks" of 4KB each. Being that I'm on a
high-speed Internet link at home, I decided to increase this. I found settings above 128KB actually slowed
things down so I believe this to be optimal.

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

Inbound And Outbound HTTP Connections

The default config for ATS sets these artificially low. I found that remote webservers themselves actually
slow down if more than 16 simultaneous connections are attempted. Also, most popular browsers support
up to 256 simultaneous connections from browser to proxy server so our ATS config should reflect that.

CONFIG proxy.config.http.origin_server_pipeline INT 16
CONFIG proxy.config.http.user_agent_pipeline INT 256

HTTP Background Fill Competion

There's an algorithm here that I don't fully understand, but this setting should guarantee that objects
loaded in the background are cached regardless of their size.

CONFIG proxy.config.http.background_fill_completed_threshold FLOAT 1.000000

HTTP VARY Header Support

While I found some information while researching this that indicated the Internet isn't quite ready for this
setting, I haven't experienced any real problems as a result of enabling this. This setting allows for advanced
negotiation regarding cached Internet objects.

CONFIG proxy.config.http.cache.enable_default_vary_headers INT 1

Cache Object Lifespan

The default config for ATS specifies that after 1 day(86,400 seconds), any object without a specific expiration
should be flushed from the cache. I'd prefer that it stick around for about 3 months. This setting is contentious
in that what it should be is debatable.

CONFIG proxy.config.http.cache.heuristic_max_lifetime INT 7776000

HTTP "Last Modified" Support

There's an algorithm here that I don't fully understand, but this setting should guarantee that the relevant
information regarding an object's "last modified" date is fully support by the cache.

CONFIG proxy.config.http.cache.heuristic_lm_factor FLOAT 1.000000

HTTP Reverse Proxy Object Expiration Fuzzy Logic

I had to dig into the codebase for this one. Apparently this is a feature designed for reverse proxies
to "sweep" the cache at defined intervals. My memory's a bit foggy, so apologies if I got the definition wrong.
In any case, this functionality doesn't help a forward proxy cache whose goal is to keep objects in the cache.
The following setting disables this feature.

CONFIG proxy.config.http.cache.fuzz.min_time INT -1

Cache Minimum Average Object Size

This setting is pretty important. It defines a global variable whose function is to both structure the cache
for future objects, as well as optimize other areas. For my purposes, I decided an "average Internet object"
is roughly 32KB in size, and so we can do the following math:

Average Internet Object Size: 32KB
Disk Cache Size: 2GB
Disk Cache Size In Bytes: 2147483648 (2 * 1024 * 1024 * 1024)
Average Internet Object Size In Bytes: 32768 (32 * 1024)
Disk Cache Object Capacity: 65536 (2147483648 / 32768)

CONFIG proxy.config.cache.min_average_object_size INT 65536

NOTE: This setting should be sized relative to the size of your disk cache.
Also, it requires clearing the disk cache and restarting ATS to properly take effect.

Cache Threads Per Disk Spindle

My setting here is somewhat of a rough guess. I've had issues in the past with Squid as a web cache
and increasing the threads dedicated to disk access definitely helped. I've noticed setting this value
too low seems to slow down web surfing, while setting it too high slows down other processes on the machine.

CONFIG proxy.config.cache.threads_per_disk INT 16

Maximum Concurrent DNS Queries

The default settings for ATS regarding DNS are set pretty high. I decided for my purposes to lower them,
Your Milage May Vary on these.

CONFIG proxy.config.dns.max_dns_in_flight INT 512

DNS Internet Protocol Preference

I've no idea if this setting really helps or not, but I like to specify my preference for IPv6 over IPv4
as much as possible.

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

DNS Host Cache Database Size

The default settings for ATS regarding DNS are set pretty high. I think the following represents a pretty
good balance between caching too much and caching too little in terms of DNS.

CONFIG proxy.config.hostdb.size INT 8192
CONFIG proxy.config.hostdb.storage_size INT 4194304

Reverse Proxy Settings

As I'm using ATS as purely a forward-only web proxy cache, I decided to turn these off.
I believe the default settings enable ATS as both a forward and reverse cache.

CONFIG proxy.config.reverse_proxy.enabled INT 0
CONFIG proxy.config.url_remap.remap_required INT 0

Miscellaneous Task Threads

Similar to the first setting in this document, the default config for ATS supports up to 2 CPU cores.
I have 4 and decided to update the config to reflect that. One could actually increase this setting higher,
but I'm not a huge fan of Hyperthreading so I didn't bother.

CONFIG proxy.config.task_threads INT 4

Epilogue And Ongoing Problems

Well, that's it! Take a deep breath, restart ATS, and enjoy your new proxy server.

There is one ongoing, lingering problem I'm experiencing that I thought I'd document here.

Once in a while, on Facebook, an image served up by Akamai won't load properly.
I'm assuming ATS errors out on this somehow and thus the browser can't display it.
Reloading the webpage in the browser seems to "fix" the problem but that's really
more of a hack than a solution.

I thought at first that this had to do with somewhat well-known problems regarding
Akamai and the HTTP VARY header, but I've seen it happen with VARY support both
turned on and off.

I plan to look into this further, and will update this Wiki page as necessary.

  • No labels