-
Notifications
You must be signed in to change notification settings - Fork 155
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Low Read performance #154
Comments
The storage config is:
|
Testing serial downloads Serial s3cli
~420 MBit/s Parallel (Multiple small files)
~125 MBit/s Parallel (Big file)
~140 MBit/s Parallel (Big file, default config)
~330 MBit/s TheoryI have the theory that with smaller chunks (5M) even so they should be allinged the object chunks are not end up bing alligned and reading chunk 1-5 requires connections to read:
Meaning every single chunk is downloaded twice, bigger chunks mitigate that a bit by only fetching every 4th chunk twice.
Would it be possible to ensure each chunk is only is only downloaded once something like this: |
TimeoutsSetup
Results
ConclusionThere seem to be two types of timeouts:
|
Addition: No error or info logs are written on the GW indicating anything. |
Thank you for your report. We'll check this issue in our environment then will share the result. |
Thanks for taking the time to looking at this. I have some additional info: Original test was performed with N/R/W of 3/1/2 and three nodes. I repeated the test with N/R/W 1/1/1 with one two and tree nodes. I expected the timeouts to improve since data could be read from multiple nodes in paralel, to my confusion the opposite happend, timeouts the number and severity of timeouts increased dramatically in many cases so bad the get did not manage to finish since the maximal number of timeouts were reached: One Storage nodeWrite
~ 1.35 GBit/s Read
~ 250 MBit/s Two storage nodesWrite
~ 1.58 GBit/s Read
~ 290 MBit/s Three Storage NodesWrite
~ 1.62 GBit/s Read
~ 211 MBit/s |
We're very helpful of you to share the additional info. |
To add more information I've ran the basho_bench benchmarks for the storage system, trying to rule out timeouts due to IO Satturation. The tests only run on one node but I found that a sufficient representation since the three zones running storage are on physically distinct systems so interference between them can be ruled out. All tests are run with R8W2 configuration as in the shipped config file, additional tests are run with element sizes of 1 MB and 5MB to accurately simulate writing large files. Since the timeouts were seen form the beginning the tests were stopped after a medium amount of time as long term behavior was not the concern. 128k1M5M |
Thank you so much :) |
The root cause is that For example, Since we don't need to confirm the metadata of every chunks The latest dev branch with our test environments, the result is there
The read throughput have reached 1Gbits too:) We wil share the detailed test cases on the leo-project/notes repository later. |
I'd like to share the results on leo-project/notes |
Hi,
Here the log: https://gist.github.com/Licenser/9936529 Given you saw so good results and I keep failing to reproduce that is there perhaps any option I forgot to change? |
Hi @Licenser I tried 1.0.0 with default settings(all in one) but couldn't reproduce it.
As far as i know, your gist seems to be using some older version of leo_gateway which is not applied this commit Could you check whether the latest leo_gateway is installed or not like this?
|
Thanks for looking into it, I've checked and it sadly it all looks good version wise I will try to delete everything and use a fresh clone tomorrow, just in case somewhere some old data is hanging around that messes things up :) Also it should be noted that I run the 3 storage nodes on 3 different (physically distinct) machines I'll try a all in one setup tomorrow first.
direct comparison:
|
Thanks for quick reply! |
Quick update: I rerun the tests with your setup, and I think I found the difference. When running gof3r from localhost I get a OK throughput for the first ~1k chunks (higher chunks fail but that is a different issue I'll look into) only when using a remote I see timeouts. To check the network connectivity I ran a few iperf tests between networked hosts and the network looks good.
That it works locally but not remotely suggests a networking issue but that it works for uploads just fine indicates no network issue the iperf results (while not optimal) suggest the same on the other hand so I am not sure what to think is the issue. |
On local it looks like this:
It takes a few more runs to get the caches warmed up the local respons goes down to:
|
And another update, I added a log line to leo_gateway_rpc_handler:key then I ran the local and remote test agian counting the times leo_gateway_rpc_handler:head was called:
The remote get had 372 timeouts, the local had 0. Not sure if this helps any but since the head request was the original issue I figure it might be shed some more light on it. |
We have finished tests with 3 storage nodes(physically distinct) but couldn't reproduce.
the result is below.(including the times leo_gateway_rpc_handler:head was called)
As stated above, so your resut
seems to be a reasonable number( So we will have to look into next step, |
I think I we rule out LeoFS at this point I did some additional tests over the last days and ut comes out as this:
This indicates that it is probably is a issue with gof3r on SmartOS. Thousand thanks for the help guys! |
Thank you for your comment. |
I'm experiencing read performance that is a order of magnitude lower then the write performance, this seems to be quite odd I would expect read to outperform write if they are different at all.
Test
Expected behavior
Read is as fast if not faster then write.
Observed behavior
Read is a order of magnate slower then write (80MBit/s vs 1GBit/s)
Setup
Layout
GW Config
Results
Write
Read
Profiling
SVG flame charts for the GW and Storage process during read and write
https://www.dropbox.com/sh/3psqxvkv966y9t4/K4NsHvpLAh
Observations
The text was updated successfully, but these errors were encountered: