feat: Node: fast mode support

feat: enable fast mode in simple mode if available memory > 4GB
feat: Node tab advanced sublenu add checkbox to enable fast mode
This commit is contained in:
Cyrix126 2025-02-07 21:57:45 +01:00
parent 920287b7fd
commit 8988ad9c63
11 changed files with 110 additions and 1 deletions

View file

@ -0,0 +1,18 @@
# TODO v.x.x.x
*description of release, what it focus on etc*
## UI
### Common
*changes applied to the entire UI*
- [ ] changes, issues related
### Tab
*changes applied to specific Tab*
- [ ] changes, issues related
## Internal
*changes to backend*
### Subject if needed
- [ ] changes, issues related
## Fixes
*fixed issues*
- [ ] description or direct link to issue

32
kuno.md Normal file
View file

@ -0,0 +1,32 @@
Gupaxx is a maintained fork of Gupax aiming to make monero easy to mine.
https://github.com/Cyrix126/gupaxx
Goal of Gupaxx:
- Easy UI (for beginners, automate as much as possible)
- Advanced controls available (for advanced users with complex setup)
- Decentralized (own node possible, use of p2pool, completely custodial)
- Efficient (best defaults for xmrig, participation in the P2Pool Bonus Hash Rate Raffle by XMRvsBEAST)
- Informative (stats/history available)
- Trustless (include only libre code)
ROADMAP:
https://github.com/Cyrix126/gupaxx/issues/68
IDEAS (probably getting into roadmap):
https://github.com/Cyrix126/gupaxx/blob/main/IDEAS.md
How the funds are used:
Every monero given will be converted to hours of work. When a goal is attained, a new release will occur, including elements present in the roadmap. A release is about 20 hours of work.
Bug fixing releases will not wait for a new funding goal to be completed.
Each time a goal is completed, a new goal of the same amount will occur to fund the next release.
Hours of work can also be used to develop/improve a library/program that will be used directly by Gupaxx.
Proof of being Cyrix126:
The address to funding is the same as in the README of the github repository

0
log Normal file
View file

2
log.out Normal file
View file

@ -0,0 +1,2 @@
Compiling gupaxx v1.7.2 (/home/lm/git/gupaxx)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.01s

33
note_difficulty Normal file
View file

@ -0,0 +1,33 @@
The algo needs a precise estimation of hashrate to make a good decision.
If the proxy HR estimation deviate too much from the real HR, it could for example change the round target.
Proxy will by default only calculate HR with share accepted from the pool, not sent to miners.
Add --custom-diff-stats to take into account shares accepted from miners.
to have a more precise value of hashrate from the proxy, it should send a lower difficulty or watch a longer timeframe.
The downside of looking at a longer timeframe is that it will not be able to react swiftly to variation in hashrate if any.
A too short timeframe could also make a wrong decision.
Algo watch the timeframe the closer to the time of a decision. 10mn for proxy, 15mn for xmrig, 15mn for p2pool.
Current auto difficulty is set to have a share every 30 seconds.
Proxy can apply difficulty for miners. P2Pool will set the difficulty sent from miners (-u x+diff)
The downside of reducing difficulty is that more trafic is necessary between miners and proxy, which lower HR (how much ?)
Reducing the difficulty to get a share every 10 seconds instead of 30 seems to make much more accurate stats. The HR should not be impacted.
Also:
If a miner switch pool, it will loose the work that it was doing for a share not completed ? The more the difficulty, the longer the time lost ?
In this case, a lower diff will make
The shorter the timeframe, the more the algo can adapt quicly to a change in hashrate.
Solution:
change code source of proxy to set auto diff to lower value
watch HR and reproduce auto diff with lower value

View file

@ -20,7 +20,7 @@ use crate::app::panels::middle::common::header_tab::header_tab;
use crate::app::panels::middle::common::state_edit_field::{path_db_field, slider_state_field};
use crate::app::panels::middle::{rpc_bind_field, rpc_port_field, zmq_bind_field, zmq_port_field};
use crate::{
NODE_DNS_BLOCKLIST, NODE_DNS_CHECKPOINT, NODE_INPUT, NODE_PRUNNING, NODE_URL,
NODE_DNS_BLOCKLIST, NODE_DNS_CHECKPOINT, NODE_FULL_MEM, NODE_INPUT, NODE_PRUNNING, NODE_URL,
START_OPTIONS_HOVER,
};
use egui::TextStyle;
@ -99,6 +99,9 @@ impl Node {
ui.separator();
ui.checkbox(&mut self.disable_dns_checkpoint, "DNS checkpoint")
.on_hover_text(NODE_DNS_CHECKPOINT);
ui.separator();
ui.checkbox(&mut self.full_memory, "Fast Mode")
.on_hover_text(NODE_FULL_MEM);
});
});

View file

@ -338,6 +338,7 @@ pub struct Node {
pub dns_blocklist: bool,
pub disable_dns_checkpoint: bool,
pub path_db: String,
pub full_memory: bool,
pub console_height: u32,
}
@ -357,6 +358,7 @@ impl Default for Node {
dns_blocklist: true,
disable_dns_checkpoint: true,
path_db: String::new(),
full_memory: false,
console_height: APP_DEFAULT_CONSOLE_HEIGHT,
}
}

View file

@ -179,6 +179,7 @@ mod test {
dns_blocklist = true
disable_dns_checkpoint = true
path_db = ""
full_memory = false
console_height = 360
[version]

View file

@ -28,6 +28,7 @@ use std::{
thread,
time::{Duration, Instant},
};
use sysinfo::MemoryRefreshKind;
use tokio::spawn;
use crate::{
@ -239,6 +240,16 @@ impl Helper {
debug!("Node | Creating command...");
let mut cmd = portable_pty::cmdbuilder::CommandBuilder::new(path.clone());
cmd.args(args);
// if in simple state and enough free memory, enable full memory env
if state.simple {
let mut sys = sysinfo::System::new();
sys.refresh_memory_specifics(MemoryRefreshKind::nothing().with_ram());
if sys.available_memory() > 4_000_000_000 {
cmd.env("MONERO_RANDOMX_FULL_MEM", "1");
}
} else if state.full_memory {
cmd.env("MONERO_RANDOMX_FULL_MEM", "1");
}
cmd.cwd(path.as_path().parent().unwrap());
// 1c. Create child
debug!("Node | Creating child...");

View file

@ -476,6 +476,7 @@ pub const NODE_API_BIND: &str = "bind address of RPC API";
pub const NODE_API_PORT: &str = "RPC API listen port";
pub const NODE_ZMQ_BIND: &str = "bind address of ZMQ API";
pub const NODE_ZMQ_PORT: &str = "ZMQ API listen port";
pub const NODE_FULL_MEM: &str = "Use 2GB of RAM insteal of 256MB for faster block verification";
// XMRig
pub const XMRIG_API_PORT_DEFAULT: u16 = 18088;
pub const XMRIG_SIMPLE: &str = r#"Use simple XMRig settings:

6
track_hours Normal file
View file

@ -0,0 +1,6 @@
fix #73 investigate 0.5h
fix #76 2.5h
#77 2h
#78 0.5h
crawler monero rust lib 4h30
920287b 10h30