-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Farm mode (getWork) deliberately looses valid shares. Lowered efficiency. #1213
Comments
Great analysis! How important this feature is nowadays? Are there any pool depending on this protocol? For sure this is the only way to communicate with some Ethereum clients like geth and aleth (cpp-ethereum). I think parity implemented stratum. Personally, I'd just deprecate the "getwork" protocol and inform the user that this is not optimal to use it. |
I think it's still the only option for solo mining where you connect to a geth daemon.
In addition there are still many users convinced (and thus using) that eth-proxy is efficient when more than one rig connected through a poor network link. We should decide wether amend the logic or completely drop getWork mode : in this last case we could also get rid completely of the json-rpccpp external project (already removed in API server) and finally won't see --farm-recheck put randomly in stratum mode. But, I reiterate, it seems like getWork mode might be useful for (not so) few people. |
Opinions from @smurfy and @jean-m-cyr welcome too. |
Another addition ... afaik EthOS ships bundled with eth-proxy and binds ethminer to it (one instance per GPU). |
Both pools have also stratum support. I don't think we should care about this case. The eth-proxy only supports getwork to communicate with the workers? Can more abstraction in PoolConnection help here? I mean can we abstract the logic of when solution are delivered from the protocol used? That could help both getwork and code quality in general. |
Yes. As they state eth-proxy it's a bridge eth_getwork => stratum
I believe not. PoolConnection has already a good level of abstraction. It's the implementation in the derived class which sucks. For instance those two methods do nothing else than setting two variables overwriting previous values.
SubmitSolution, at least, should send immediatley the solution instead of waiting for workloop. |
GetWork is definitely necessary to bind to a geth node. |
Addresses #1213 - Solution submit is immediate upon arrival and is no influenced by --farm-recheck value - Submission of hashrate is conditional - Renamed m_report_stratum_hashrate to m_report_hashrate as it's valid for both modes Now even sligtly higher --farm-recheck values may be applied to mitigate overhead.
Addresses #1213 - Solution submit is immediate upon arrival and is no influenced by --farm-recheck value - Submission of hashrate is conditional - Renamed m_report_stratum_hashrate to m_report_hashrate as it's valid for both modes Now even sligtly higher --farm-recheck values may be applied to mitigate overhead.
Solved. |
For first time readers ! This issue is only related to farm mode (getWork) ie using eth-proxy or connecting to pools still using getWork mode. Stratum mode is not affected.
Logic inside EthGetWorkClient is wrong by design due to a misinterpretation about --farm-recheck argument value.
Summary : all work is performed inside WorkLoop routine which is paused at every cycle by the amount of milliseconds defined in --farm-recheck cli argument (which defaults to 500 ms)
Problem : WorkLoop does not limit to check if new work is available from source but also sends found solution(s) on next loop. This causes two issues :
This leads to increased stale share ratio and possibly lowers the miner efficiency (as valid shares may never get submitted). To mitigate this users may enter insanely low values for --farm-recheck which leads to a huge overhead while hammering source with get_work and submissions of hashrates.
/CC @chfast
The text was updated successfully, but these errors were encountered: