itlezy / eMule

eMule Community - broadband edition
31 stars 1 forks source link
emule kad kademlia p2p

eMule - broadband branch

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.

Installation

eMule

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

Broadband Edition

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

Optimal Settings

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.

2022-06-14 14_05_11-Window

Upload Slots Settings

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.

Broadband Settings

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

Example Settings

More aggressive

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

More Relaxed

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

Control over Max Trans and Max Time

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

Get an High ID

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.
2022-09-19 09_10_51-Window \ \ 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.
2022-09-19 09_02_57-Window \ \ 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

IP 2 Country

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.

Building

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!

Summary of changes

opcodes

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.

UploadQueue

With the philosophy of keeping changes to a minimum:

For Linux

For Linux and other platforms, or Windows as well, please check friend project https://github.com/mercu01/amule

More stuff

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

Sample Results

The aim of this mod is to maximize seeding, by filling up the max upload bandwidth with a predefined number of upload slots.
up-chart

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.

2022-06-16 12_30_07-Window

Downloads

2022-06-16 12_08_58-Window

Uploads

Few more fields have been added for who likes to monitor how their seeding status is going. Check out the context menu as well.
2022-09-18 19_31_28-Window

Shared Files

2022-06-16 12_11_24-Window

Queue

2022-06-16 12_17_22-Window

All Settings (suggested)

2022-09-18 19_44_23-Window \ 2022-09-18 19_43_57-Window \ 2022-09-18 19_45_58-Window \ 2022-09-18 19_45_21-Window \ 2022-09-18 19_44_56-Window