-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
Verification Buffer is Extremely Small #1330
Comments
I have some large files that are over 400GB each, and the verification time is basically all over 20 hours, and I don't known why. Running on 32cores and 32G RAM, with 10T of disk space. Any idea? |
BTW. transmission(daemon) version is 3.0. |
Similar issue here. Running on beefy Xeon server. Ubuntu 20.04 server. Transmission was compiled from source (090a4b5) Have this 900+GB torrent on verification for over 10 hours. Only 240 or so GB verified. Nothing was running on the server except Transmission. The IOWAIT readings were very low during verification - A sign that Transmission was not reading from disk as fast as it could. I feel this is a 3.0 specific issue, as past experience with 2.92 was very positive. |
BTW, my verifying logs: I added a log at line 120 in verify.c
... |
I tracked the most time consuming functions as follows:
The bitfiledAdd takes a few hundred milliseconds each time after a critical value is reached. |
This is almost certainly due to debugging assertions. Try compiling in release mode instead of debug mode and see if that makes any difference. |
build script at https://gist.github.com/liut/f137f15493876692b6e63a1c0e8befb3 |
@liut could you pastebin a verbose output of that build? What I'm really interested in are the actual compiler flags being passed to g++/clang++. I want to see if -NDEBUG is included in them or not, i.e. whether Transmission is being built with assertions enabled or not. |
@ckerr I've added a patch.diff file to the above gist. I'm not sure this tr_logAddTorDbg func has anything to do with the DEBUG definition. I used |
@liut sorry if I phrased that badly. I don't need to see a log of the run right now; I wanted to see it being built, e.g. - RUN rm -rf build && mkdir build && cd build && cmake .. \
+ RUN rm -rf build && mkdir build && cd build && cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. \ Also you might try building in Release mode to see if that improves performance. That should give the compiler more optimized flags and reduce the number of debugging assertion checks: - RUN rm -rf build && mkdir build && cd build && cmake .. \
+ RUN rm -rf build && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. \ |
Due to this verification issue, all engines has been migrated to Deluge, maybe there is a chance later. |
These assertions have been simplified in |
@ckerr - Or how about we keep it open considering the buffer is still hard-coded and is abysmally small - This took 30 seconds of code searching to figure out that it's still an issue that still hasn't been solved. Prematurely closing issues without addressing them does nothing but muddy the waters when someone comes along opening a similar issue later on. Even though this is using a Vector type - there's zero dynamic sizing of the array so what's the point of even using a vector? Now it's just bloating memory for no good reason since vectors take up more space than a hard coded length array (what we were dealing with before). This is a good first step but is still woefully inadequate. Memory is dirt cheap. There's no reason to be a) stingy with buffers and b) hard-coded. transmission/libtransmission/verify.cc Line 45 in f415de0
|
Yes, it does, drastically. |
I'm happy to spend more short-term memory use if the speed numbers warrant it. Do you have benchmarks? |
This issue is currently blocked on some numbers. @lps-rocks can you run some tests on the speed difference of different buffer sizes on your system? |
One interesting thing to check is if increasing buffer to some magic number like size of a file or L3 cache size would give the most benefit. |
If we use so much memory that we get a I'm fine with the idea of increasing the buffer size, but I would like some objective numbers to know what sizes give more speedups and at what point we have diminishing returns. We could just guess, but since some people in this thread have implied firsthand knowledge of different rates, it would be great to share that knowledge |
I was in the neighborhood of this issue while coding #2626 and tried tests where the buffer size was doubled, quadrupled, and then finally set to the piece size. I didn't see any change in speed -- in fact the larger buffer was slightly slower, though this is probably random chance. It is intuitive that a larger buffer size should speed things up, but it doesn't seem to bear out in practice, at least in my tests. Because of that, I'm going to close this issue. If someone has a way to speed up the verify pass and the numbers to back it up, please open a new issue with details. Thank you! |
transmission/libtransmission/verify.c
Line 47 in 2ef0751
The verification buffer is hard-coded and extremely small - This should be a user configurable option to allow for faster hashing.
The text was updated successfully, but these errors were encountered: