¿Cómo calcular el hashrate promedio cuando ethminer informa hashrates que parecen variables?

El minero Ethereum ethminera veces produce hashrates variables como:

miner  02:16:07.510|ethminer  Mining on PoWhash #ad8608a0… : 20971520 H/s = 4194304 hashes / 0.2 s
miner  02:16:07.711|ethminer  Mining on PoWhash #ad8608a0… : 83468736 H/s = 16777216 hashes / 0.201 s
miner  02:16:07.913|ethminer  Mining on PoWhash #ad8608a0… : 41734368 H/s = 8388608 hashes / 0.201 s
miner  02:16:08.114|ethminer  Mining on PoWhash #ad8608a0… : 83468736 H/s = 16777216 hashes / 0.201 s
miner  02:16:08.315|ethminer  Mining on PoWhash #ad8608a0… : 41734368 H/s = 8388608 hashes / 0.201 s
miner  02:16:08.517|ethminer  Mining on PoWhash #ad8608a0… : 83468736 H/s = 16777216 hashes / 0.201 s
miner  02:16:08.718|ethminer  Mining on PoWhash #ad8608a0… : 41734368 H/s = 8388608 hashes / 0.201 s
miner  02:16:08.920|ethminer  Mining on PoWhash #ad8608a0… : 83468736 H/s = 16777216 hashes / 0.201 s

¿Cómo se calcula el hashrate promedio en este caso?

Esta situación ocurre comúnmente cuando sus GPU están overclockeadas, o los ethminerparámetros --cl-local-worky --cl-global-workse cambian de la configuración predeterminada.

Actualizar

El usuario de Reddit athropal ha declarado en reddit.com/r/EtherMining :

El hashrate no es variable, solo las matemáticas de informes son inexactas debido al corto tiempo de revisión de la granja. Si observa qtminer, que utiliza un método más efectivo para obtener datos, tiene períodos de tiempo más largos para calcular el hashrate de 2 segundos frente a 0,2. El hashrate informado allí es mucho más estable.

#1: Use una versión más nueva de ethminer. #2: Use un --farm-recheckvalor de 1000-4000 ( si usa un estrato ). Esto debería suavizar la tasa mostrada . Pero... La tasa que muestra e informa su minero no significa nada con respecto a los ingresos. Se trata de soluciones. Más hashrate ayuda a más soluciones, por supuesto, pero las soluciones informadas por un grupo es lo que debe observar. (Significado: las soluciones encontradas se utilizan para determinar el hashrate en un grupo determinado, normalmente). Si se cultiva directamente/solo/getwork/http, la revisión de la granja debe ser pequeña (100-500).

Respuestas (1)

Aquí hay un script de Perl que calculará su tasa de hash promedio y mostrará las líneas importantes en sus ethminerarchivos de registro:

ℹ  21:19:58.840|ethminer  B-) Submitted and accepted.
✘  20:23:53.048|ethminer  FAILURE: GPU gave incorrect result!`

Este script funciona en Linux y Mac OS X, ya que el intérprete de Perl está disponible en estas plataformas de forma predeterminada. Para Windows, puede que tenga que probar Perl de perl.org .

Tenga en cuenta que esta tasa de hash se calcula cuando ethminerse calculan sus hashes y no incluye el tiempo en que ethminerse obtiene un nuevo paquete de trabajo geth(o el grupo) o cuando se envían los resultados a geth/pool.

Copie las siguientes líneas en $HOME/bin/calcHashratey configure el bit ejecutable para este archivo ejecutando el comando chmod 700 $HOME/bin/calcHashrate.



calcHashrate

#!/usr/bin/perl -W
use Getopt::Long;

my $DEFAULTHASHLINES = 1000;
my $DEFAULTACCEPTLINES = 4;
my $DEFAULTFAILURELINES = 4;

my ($hashlines, $acceptlines, $failurelines, $removecolour, $help);

GetOptions(
  "hashlines:i"    => \$hashlines,
  "acceptlines:i"  => \$acceptlines,
  "failurelines:i" => \$failurelines,
  "removecolour"   => \$removecolour,
  "help"           => \$help
);

die "Usage: $0 [options]\n\n" .
    " where the options are:\n" .
    "  --hashlines=x     Calculate average hashrate over the last x lines, default $DEFAULTHASHLINES\n" .
    "  --acceptlines=y   Display the last y 'accept' lines, default $DEFAULTACCEPTLINES\n" .
    "  --failurelines=z  Display the last z 'FAILURE' lines, default $DEFAULTFAILURELINES\n" .
    "  --removecolour    Don't display colour in the accept and failure lines\n" .
    "  --help            Display this help\n\n" .
    "Enjoy. BokkyPooBah 2016.\n\n" .
    "Stopped"
  if defined $help;

$hashlines = $DEFAULTHASHLINES
  unless defined $hashlines;
$acceptlines = $DEFAULTACCEPTLINES
  unless defined $acceptlines;
$failurelines = $DEFAULTFAILURELINES
  unless defined $failurelines;

my (@hashlinearray, @acceptlinearray, @failurelinearray) = ((), (), ());
while (<>) {
  if (/(\d\d:\d\d:\d\d.\d\d\d).*:\s(\d+).*=\s(\d+).*\/\s(\d+\.\d+)/) {
    push @hashlinearray, $_;
    shift @hashlinearray
      if ($#hashlinearray >= $hashlines);
  } elsif (/accept/) {
    push @acceptlinearray, $_;
    shift @acceptlinearray
      if ($#acceptlinearray >= $acceptlines);
  } elsif (/FAILURE/) {
    push @failurelinearray, $_;
    shift @failurelinearray
      if ($#failurelinearray >= $failurelines);
  }
}

my ($totalhashes, $totalperiod) = (0, 0);
my ($lasttime) = ();
foreach (@hashlinearray) {
  if (/(\d\d:\d\d:\d\d.\d\d\d).*:\s(\d+).*=\s(\d+).*\/\s(\d+\.\d+)/) {
    my ($time, $rate, $hashes, $period) = $_ =~ /(\d\d:\d\d:\d\d.\d\d\d).*:\s(\d+).*=\s(\d+).*\/\s(\d+\.\d+)/;
    $totalhashes += $hashes;
    $totalperiod += $period;
    $lasttime = $time;
  }
}

foreach (@acceptlinearray) {
  s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g
    if defined $removecolour;
  print;
}

foreach (@failurelinearray) {
  s/\x1b\[[0-9;]*m//g
    if defined $removecolour;
  print;
}

if ($totalperiod > 0) {
  my $averagehashrate = $totalhashes / $totalperiod / 1000 / 1000;
  printf "%s %.3f MH/s\n", $lasttime, $averagehashrate;
} else {
  print "No statistics\n";
}



Ejemplo de uso

user@Kumquat:~$ calcHashrate --help
Usage: calcHashrate [options]

 where the options are:
  --hashlines=x     Calculate average hashrate over the last x lines, default 1000
  --acceptlines=y   Display the last y 'accept' lines, default 4
  --failurelines=z  Display the last z 'FAILURE' lines, default 4
  --removecolour    Don't display colour in the accept and failure lines
  --help            Display this help

Enjoy. BokkyPooBah 2016.

Stopped at ./calcHashrate line 18.

Ejecute el script con la configuración predeterminada, calculando el hashrate promedio en las últimas 1000 líneas, muestre hasta 4 acceptlíneas y muestre hasta 4 FAILURElíneas. La línea en la parte inferior muestra el tiempo de la última tasa de hash y la tasa de hash promedio en megahashes por segundo.

user@Kumquat:~$ calcHashrate logs/ethminer.log --removecolour
  ℹ  21:24:12.221|ethminer  B-) Submitted and accepted.
  ℹ  21:24:14.671|ethminer  B-) Submitted and accepted.
  ℹ  21:24:17.519|ethminer  B-) Submitted and accepted.
  ℹ  21:24:30.835|ethminer  B-) Submitted and accepted.
  ✘  18:11:00.367|ethminer  FAILURE: GPU gave incorrect result!
  ✘  18:41:12.725|ethminer  FAILURE: GPU gave incorrect result!
  ✘  20:03:32.135|ethminer  FAILURE: GPU gave incorrect result!
  ✘  20:23:53.048|ethminer  FAILURE: GPU gave incorrect result!
21:25:04.239 62.619 MH/s

Ejecute el script para mostrar solo el hashrate en las últimas 1000 líneas de hashrate.

user@Kumquat:~$ calcHashrate ethminer.log --acceptlines=0 --failurelines=0
21:25:04.239 62.619 MH/s