On 09/16/2010 05:04 PM, Pranav Desai wrote:
> Hi!
>
> I am running some performance test with large files. As mentioned in
> one of the earlier threads I am using curl-loader for testing with
> randomization in the URL to stress the cache.
>
> Version: 2.0.1
>
> Config:
> CONFIG proxy.config.cache.ram_cache.size LLONG 2097152000
> CONFIG proxy.config.cache.ram_cache_cutoff LLONG 100048576
First thing, can you make sure when serving a single 15MB object out of
cache, that it serves it out of RAM cache, and that it doesn't hit the
disk at all (other than logs, but might want to turn that off, to make
sure the only disk I/O is cache)? We had a problem in the past where
it'd hit the disk for certain large object even though they should fit
in RAM (that should be fixed / gone though).
> storage.config
> /mnt/cache/trafficserver 60368709120
> the file is 15MB in size.
The first thing I'd recommend (which holds true for all ATS versions) is
to switch to the raw device cache. The on-filesystem cache is primarily
intended for testing / development, real usage should use a raw device
(for direct I/O). The raw device cache should be superior in performance
and reliability.
> * The url randomness is just a number within that range in the URL.
> * There are 500 clients each access the URL 50 times.
>
> * So in the best case scenario with only a single URL, I can get 700+
> Mbps and I think I can get more if I use 2 client machines and more
> network cards. Currently the testbed is limited to 1Gbps.
> * As I can increase the randomness, so essentially there are 2000
> unique URLs, the performance drops significantly.
This is not entirely surprising. This version of ATS (v2.0.x) partitions
the disk(s) into 8GB partitions, and each such partition has it's own
disk position "pointer". It'd be interesting to see if you get the same
performance up to 8GB cache size, and then notice a drop in performance
when going from (say) 8GB to 15GB. This "problem" is completely
eliminated in ATS v2.1.x (where each partition will be up to 0.5PB).
> Leif mentioned in an earlier thread about the threads_per_disk
> settings which I didnt know about, I will run some more tests with
> that.
Yes, you definitely want to increase that, I'd recommend trying maybe 16
- 24 I/O threads per disk (spindle), and see if it makes a noticeable.
Make sure that if your disk is RAIDed (e.g. RAID1), that you adjust the
I/O threads accordingly (ATS has no way of knowing how many spindles are
actually behind a RAIDed disk, so it treats it as one). The setting would be
CONFIG proxy.config.cache.threads_per_disk INT 16
(for example). I don't think it's in the default records.config, so
you'll have to add it manually I think. Another interesting
configuration is
proxy.config.cache.min_average_object_size
(default is 8000), which doesn't really affect performance, but if you
know that your cache is going to hold much larger objects than that, it
can save a large amount of memory increasing this (since it reduces the
in-memory directory size).
There might also be some network related kernel tuning that could
improve the situation a bit, I'd expect you to be able to drive the full
GigE unless disk is becoming the bottleneck.'
We really have to fix TS-441 though, if you can figure out some reliable
(and hopefully easy) way of reproducing it, that would help tremendously.
Cheers,
-- leif
|