Optimización del rendimiento del pool de minería

¿Cuáles son los componentes principales en los que uno debe enfocarse cuando se trata de maximizar el rendimiento de un pool de minería? Suponiendo que el código es bastante óptimo (no hay ineficiencias), ¿a qué debería dedicar su atención o recursos el propietario de un grupo? Estoy pensando en factores como la velocidad del hardware, la velocidad de Internet, la latencia o algunas características adicionales, como sondeos largos, y qué prioridad deberían tener.

Hmm, esta parece ser la pregunta número 500 en este SE;).

Respuestas (2)

El código no es óptimo, especialmente en el lado de la minería fusionada. Actualmente no existe un método óptimo para manejar ambas cadenas de bloques sin un protocolo de comunicación minero-pool más avanzado.

Excluyendo los problemas de minería fusionada, la latencia es un factor importante. Cuando ocurre un cambio de bloque, el poder de hash efectivo de cada minero es cero hasta que comienzan a trabajar en el encabezado del bloque actualizado. Por lo tanto, el poder de hash efectivo de un grupo va desde el poder de hash total hasta 0 y luego aumenta a medida que se actualizan los mineros. Por lo tanto, el poder de hashing efectivo a largo plazo del grupo depende de la rapidez con la que pueda lidiar con un cambio de bloque.

Esto implica tres componentes.

  1. Detección de cambio de bloque. Un buen grupo debe tener una gran cantidad de conexiones a la red Bitcoin para minimizar el retraso en el aprendizaje de la cadena de bloques. Un buen operador de grupo se asegurará de mantener las conexiones "cercanas" (dentro de 1 o 2 saltos) de cada grupo importante.

  2. Recálculo de encabezados de bloque. Durante un bloque, cada minero completará su trabajo en diferentes momentos y, por lo tanto, las solicitudes de trabajo se escalonarán. Sin embargo, cuando un bloque cambia, el grupo debe actualizar el encabezado del bloque de cada minero a la vez. Un grupo que carece de suficiente poder de procesamiento para calcular rápidamente los encabezados de los bloques hará que los mineros trabajen en el trabajo obsoleto por más tiempo y, por lo tanto, tendrán un porcentaje obsoleto promedio más alto. Actualizar a los mineros en el orden de su poder de hash podría reducir ligeramente las obsolescencias generales del grupo. No sé si algún grupo actualmente hace eso.

  3. Actualizar mineros. La latencia del enlace del minero está más allá del control del grupo, pero un grupo puede mejorar la eficiencia al tener varios servidores de grupo que reducen la cantidad de saltos para todos los mineros. Los servidores del grupo deben ubicarse lo más cerca posible de los mineros. Un grupo compuesto principalmente por mineros en Asia no debería usar el centro de datos de la costa este de EE. UU., por ejemplo.

NTimeRolling reduce la cantidad de comunicaciones (getworks) requeridas para una cantidad determinada de hashes. esto hace que el grupo sea más eficiente, ya que una cantidad determinada de hardware puede admitir más clientes; sin embargo, no reduce la carga en un cambio de bloque.

La implementación de Long Polling garantiza que los mineros reciban una notificación cuando se produzca un cambio de bloque (menos la latencia indicada anteriormente) en lugar de continuar trabajando en datos obsoletos hasta que se complete. Completar un rango de nonce toma aproximadamente 10 segundos para un minero de 400MH. Sin un sondeo largo, en promedio, el minero perderá 5 segundos por cambio de bloque trabajando en datos que nunca pueden producir un bloque válido. Los cambios de bloque dados ocurren cada 600 segundos, lo que representa aproximadamente el 1 % del tiempo de CPU desperdiciado al codificar encabezados de bloque no válidos. Los mineros más lentos tienen un período más largo entre getworks y, por lo tanto, desperdician un mayor porcentaje de tiempo de GPU. Ningún pool puede ser eficiente sin una buena implementación de Long Polling.

Tanto NTimeRolling como Long Polling (LP) requieren un minero que comprenda correctamente estos comandos.

@ 2: Parece que Slush, de hecho, ha implementado alguna priorización de encuestas largas: bitcointalk.org/index.php?topic=1976.msg611014#msg611014
@ThePiachu Buena captura y sabia decisión de Slush.
"Los cambios de bloque dados ocurren cada 600 segundos, lo que representa un asombroso 8,3 % del tiempo de GPU desperdiciado", ¿no debería ser un 0,83 %?
Además del tema de las acciones obsoletas, presumiblemente el bloque también cambia a medida que el grupo recibe más transacciones para incluirlas en el bloque. Dependiendo de cómo un grupo gestionó eso, puede aumentar la cantidad de acciones obsoletas.
@HighlyIrregular Tienes razón en el 0,83 % frente al 8,3 %. Arreglé respuesta. La mayoría de los pools (¿todos?) no consideran una participación obsoleta solo porque se incluyen las transacciones. El antiguo conjunto de transacciones es hasta válido. Solo en un cambio de bloque, el conjunto no solo está desactualizado sino completamente inválido = obsoleto.
@DeathAndTaxes Sí, sería una locura rechazar una acción (y una posible solución por valor de 50 BTC) como obsoleta solo porque el bloque de transacciones se actualizó para incluir 0,01 BTC más en las tarifas... sin embargo, también he conocido a bastantes programadores locos. ..
¿Sería una mejora que los mineros escucharan la red y detectaran nuevos bloques por sí mismos? Entonces podrán detener el trabajo actual y al menos ahorrar algo de electricidad. Además, ¿los mineros reciben el encabezado del siguiente bloque (transacciones seleccionadas, etc., menos el hash del bloque anterior) antes de comenzar a trabajar en un nuevo bloque? Eso permitiría que el grupo solo envíe el hash del bloque nuevo, o incluso que los mineros lo detecten ellos mismos desde la red. ¿La asignación de rango de nonce se realiza de manera eficiente?

El factor más crítico es este: cuando se descubre un nuevo bloque en la red de Bitcoin, ¿cuánto tiempo le toma al grupo obtener una nueva unidad de trabajo basada en el nuevo bloque para la gran mayoría de sus clientes? Esto viene determinado por tres factores:

1) Sondeo largo: si le importa el rendimiento, debe admitir LP. Es así de simple.

2) Latencia de la red: si el controlador de minería está en un enlace lento o los mineros están ubicados a una gran distancia del controlador, esto se convierte en un factor importante.

3) CPU en el controlador: la CPU puede ser del 3% normalmente y puede pensar que lo está haciendo bien. Pero si maximiza un núcleo cuando se descubre un nuevo bloque, esto puede ser un factor importante en los mineros inactivos o las acciones obsoletas.