The initial purpose of this project was to provide an eMule repository (including dependencies) that is ready to build and update the dependent libraries when possible.
This development branch specifically focuses on providing a build that is better suited to address nowadays file sizes and broadband availability. Default hard-coded parameters of eMule were better suited for small-files/slow-connections, leading to very low per-client transfer rates by nowadays standards.
The focus here is to maximise throughput for broadband users, to optimize seeding. The main feature that was added was the capability of limiting the upload slots to a certain number, while ensuring to make full usage of the upload bandwidth. Small other features have been added in the meanwhile. This is a seeder mod, designed to seed back to the E2DK network, to allow a personalized upload strategy based on the nature of your shared library and your IT setup.
The focus is as well to introduce the least amount of changes to preserve the original quality and stability of the client.
Please read the guide below to understand the configuration parameters and the capabilities.
Reccomended to install the latest eMule Community version, but any 0.50+ should be fine as well. Get the latest eMule Community edition from here https://github.com/irwir/eMule/releases
To install eMule broadband, just get the zip archive from the release page and replace your current eMule executable.
Be sure to make a backup of %LOCALAPPDATA%\eMule
first, as this is a "beta" build which requires testing, even if the amount of changes are minimal some external dependencies have been bumped up at compiler flags made uniform to optimize the runtime.
Download the latest Windows x64 release from https://github.com/itlezy/eMule/releases/tag/eMule_v0.60d-broadband
Really the one recommendation would be to set the values of bandwidth capacity and the upload limit, plus a limit of max connections if you wish so. Other settings, as you please.
Be fair about it, the purpose is to maximise seeding, so be generous with your bandwidth and set it as much as possible based on your connection.
Max upload slots are configurable from ini file. Just launch the eMule exe once, close it, and then edit the ini file:
Run notepad %LOCALAPPDATA%\eMule\config\preferences.ini
The key to edit is the following:
BBMaxUpClientsAllowed=8
You can adjust this limit according to your bandwitdh and I/O preferences, suggested ranges are 5, 8, 12, 24, 36, .. up to you
This setting allows to set a maximum amount of upload slots that will never be surpassed, to reduce I/O contention in both disk and network. If you are seeding from multiple disk drives or SSD drives, then you can bump up the upload slots as you deem fit.
Please find below all preferences.ini settings.
Setting | Default | Description |
---|---|---|
BBMaxUpClientsAllowed |
5 | Upper limit of concurrent uploads |
BBMaxUploadTargetFillPerc |
75 | Given the max upload speed (which we reccomend to set!), indicates the target % to fill. Below that overall upload speed target, the slow client logic will take place and slow clients will be deprioritized from the upload slots. Slow clients will be deprioritized only when there are clients in the waiting list |
BBSlowRateTolerancePerc |
133 | Given the max up clients allowed, will identify slow clients based on the formula BBSlowRateTolerancePerc / 100.0f * (1 + BBMaxUpClientsAllowed) You can monitor the slowness of a client by the caught slow column in the upload list |
BBSlowDownloaderSampleDepth |
4 | Indicates how many samples are taken in account to mark a client as "slow downloader". This provides a temporal depth to mark slow clients and remove them from the upload slots. Suggested values are between 2 (aggressive) and 12 (more relaxed) |
BBSessionMaxTrans |
68719476736 | Values above 100 - Indicates how much data in bytes is allowed for a client to download in a single session. Adjust based on the files you plan to share, default is 64Gb. You can adjust this, based on the upload strategy you want to pursue. In example you can set it to smaller chunks, like 256Mb or so, to rotate more frequently the clients in the queue |
BBSessionMaxTrans |
1-100 | Values in the range of 1 to 100 indicate how much data in percentage of the size of the file being uploaded is allowed for a client to download in a single session. This allows to set upload sessions to in example a third of the entire file, and then pick the next client in queue. In example, set to 33 to allow a third of the file(s) size to be uploaded in a single session |
BBSessionMaxTime |
10800000 | Indicates how much time (in ms!) is allowed for a client to download in a single session, default is 3hrs |
BBUploadClientMaxDataRate |
1048576 | Indicates the target max data rate used in a number of calculations done by the upload throttler and it is also used to mark slow clients when an upload limit is not set. Suggested values are between 256k and 1Mb. Please note, this is a pre-existing parameter and it does not apply as data-rate limit for single uploads |
BBBoostLowRatioFiles |
2 | Indicates the ratio threshold below which files are prioritized in the queue by adding BBBoostLowRatioFilesBy |
BBBoostLowRatioFilesBy |
400 | Add 400 points to low-ratio files |
BBBoostFilesSmallerThan |
16 | Speaks for itself (in Mb) |
BBDeboostLowIDs |
3 | Deboost LowID clients in the queue by this factor |
BBDeboostHighRatioFiles |
3 | Deboost files higher than this ratio by a factor of the ratio itself |
BBAutoFriendManagement |
0,1-100 | Automatically add as Friends the fast High IDs, and remove them if they become slow or LowIDs. Values greater than 0 activates the feature and indicates the threshold of uploaded percentage of the file for when to add the client as friend. In example, set to 10 to auto-friend a fast High ID client when it has downloaded a 10% of the file. Set to a value consistent with BBSessionMaxTrans or leave it off otherwise |
Your best take to fully understand the logic is to review the code itself git diff origin/v0.60d-build origin/v0.60d-dev
We have not much time to test, so be sensible
BBMaxUpClientsAllowed=6
BBMaxUploadTargetFillPerc=90
BBSlowRateTolerancePerc=111
BBSlowDownloaderSampleDepth=2
BBUploadClientMaxDataRate=1048576
BBBoostLowRatioFiles=3
BBBoostLowRatioFilesBy=900
BBBoostFilesSmallerThan=0
BBDeboostLowIDs=4
BBDeboostHighRatioFiles=4
BBSessionMaxTrans=68719476736
BBSessionMaxTime=10800000
BBAutoFriendManagement=10
BBMaxUpClientsAllowed=8
BBMaxUploadTargetFillPerc=80
BBSlowRateTolerancePerc=133
BBSlowDownloaderSampleDepth=6
BBUploadClientMaxDataRate=1048576
BBBoostLowRatioFiles=3
BBBoostLowRatioFilesBy=500
BBBoostFilesSmallerThan=0
BBDeboostLowIDs=3
BBDeboostHighRatioFiles=4
BBSessionMaxTrans=68719476736
BBSessionMaxTime=10800000
BBAutoFriendManagement=10
Bear in mind that you can adjust the max trans and the max time, so to decide the best upload strategy for you, by rotating clients every x Mb, or every x seconds.
BBSessionMaxTrans=268435456
BBSessionMaxTime=10800000
Or as mentioned above, you can set the Max Trans to a percentage of the file being uploaded, like in example a third
BBSessionMaxTrans=33
As you might know, eMule servers assign you a Low or an High ID based on the fact you are able to receive inbound connections. So how to get an High ID? There are a number of guides to help you with this, but let me summarize few steps. Getting an High ID is important for a number of reasons and to improve your overall download/upload experience.
Ensure you got the UPnP option active in eMule's connectiong settings, this should work in most scenarios.
Some users might be behind network infrastructure that does not support it, so a very good option would be to get a VPN service that supports port mapping. Some do support UPnP, do a google search vpn with port forwarding. This has the benefit to help you with privacy.
Once you are setup you can check the port forwarding status with UPnP Wizard, to ensure the ports are correctly setup.
Then you can verify online if you are able to receive inbound connections on one of these websites https://www.yougetsignal.com/tools/open-ports/ or https://portchecker.co/check
As some other minor change to the upload list, the IP 2 Country is being added back. At some point it will be updated to latest formats, but for now just google GeoIPCountryWhois.csv
to download a reasonably recent file and place it in your %LOCALAPPDATA%\eMule\config
Refer to https://mailfud.org/geoip-legacy/ , download the file version GeoIP-legacy.csv.gz and remove the IPv6 entries from it at the bottom, with a text editor.
Please see this repo eMule-build for build instructions and scripts if you are interested in performing a build. This is the broadband branch for features and experimentation, but if you want to start from the base 0.60d here's the build branch which contains no changes.
Enjoy and contribute!
The one main difference is allow to fiddle with the values of
SESSIONMAXTRANS
SESSIONMAXTIME
MAX_UP_CLIENTS_ALLOWED
UPLOAD_CLIENT_MAXDATARATE
to more appropriate values for high-speed connections and large files, and by actually applying the limit of MAX_UP_CLIENTS_ALLOWED
, which can also be configured from ini file.
As the debate is long, my take on the matter is that it is best to upload at a high-speed to few clients rather than uploading to tenths of clients at ridicolously low speeds. In addition to that it is likely best to let clients download entire files, so SESSIONMAXTRANS
and SESSIONMAXTIME
are increased.
Some have argued that these values were marked as do not change in the opcodes file, but please consider that this software was literally designed with 3Mb average files and 56k connections in mind, running on 100MHz computers. The sole purpose of this mod is to seed back to the E2K network, which has been slowly fading very likely because the clients are not correctly set to cope with nowadays large files.
With the philosophy of keeping changes to a minimum:
- Added a bit of logic to remove from the upload slots clients that have been below a download rate for a certain period of time, so to give more priority to fast downloaders, which should also be fast uploaders to an extent so then they can propagate files quicker if they get it first. The slower clients will be able to be back in the slots once the fastest have been served
- Added a "ratio" display in upload slot, upload queue and shared files, so to provide evidence on the seeding ratio of files. Low ratio files from the queue will be "bumped" to an higher score, to spread quicker
For Linux and other platforms, or Windows as well, please check friend project https://github.com/mercu01/amule
Added some more technical fields to the Download and Upload Slots (like progress %), Queue, Shared Files (including a ratio column, similar to BT). Upload compression has been disabled, which logic was not applicable to nowadays extensions, thanks for the idea to https://github.com/mercu01/amule
The aim of this mod is to maximize seeding, by filling up the max upload bandwidth with a predefined number of upload slots.
This would be a normal upload slots list, in a scenario of 50Mbps capacity. So rather than having tenths of uploads, you can get few uploads at top speed.
Few more fields have been added for who likes to monitor how their seeding status is going. Check out the context menu as well.