Leistungsoptimierung des Mining-Pools

Auf welche Hauptkomponenten sollte man sich konzentrieren, wenn man versucht, die Leistung eines Mining-Pools zu maximieren? Angenommen, der Code ist ziemlich optimal (es gibt keine Ineffizienzen), worauf sollte ein Poolbesitzer seine Aufmerksamkeit oder Ressourcen verwenden? Ich denke über Faktoren wie Hardwaregeschwindigkeit, Internetgeschwindigkeit, Latenz oder einige zusätzliche Funktionen wie lange Abfragen nach und welche Priorität diese haben sollten.

Hmm, das scheint die 500. Frage zu dieser SE zu sein;).

Antworten (2)

Der Code ist nicht optimal, besonders nicht auf der Merged-Mining-Seite. Derzeit gibt es keine optimale Methode, um beide Blockchains ohne ein fortschrittlicheres Miner-Pool-Kommunikationsprotokoll zu handhaben.

Abgesehen von Merged-Mining-Problemen ist Latenz ein großer Faktor. Wenn ein Blockwechsel auftritt, ist die effektive Hashing-Leistung jedes einzelnen Miners null, bis sie mit der Arbeit am aktualisierten Blockheader beginnen. Somit geht die effektive Hashing-Leistung eines Pools von der gesamten Hashing-Leistung auf 0 und steigt dann an, wenn die Miner aktualisiert werden. Die langfristig wirksame Hashing-Leistung von Pool hängt also davon ab, wie schnell es mit einer Blockänderung umgehen kann.

Dazu gehören drei Komponenten.

  1. Blockwechsel erkennen. Ein guter Pool sollte eine große Anzahl von Verbindungen zum Bitcoin-Netzwerk haben, um die Verzögerung beim Erlernen der Blockchain zu minimieren. Ein guter Pool-Betreiber stellt sicher, dass er Verbindungen „nah“ (innerhalb von 1 oder 2 Hops) von jedem größeren Pool aufrechterhält.

  2. Blockheader neu berechnen. Während eines Blocks wird jeder Miner seine Arbeit zu unterschiedlichen Zeiten abschließen und somit werden Getwork-Anfragen gestaffelt. Wenn sich jedoch ein Block ändert, muss der Pool den Block-Header jedes Miners auf einmal aktualisieren. In einem Pool, dem es an ausreichender Rechenleistung mangelt, um Blockheader schnell zu berechnen, werden Bergleute länger an veralteter Arbeit arbeiten und daher einen höheren durchschnittlichen veralteten Prozentsatz haben. Die Aktualisierung der Miner in der Reihenfolge ihrer Hashing-Leistung könnte die Gesamtzeit des Pools leicht reduzieren. Ich weiß nicht, ob das derzeit in einem Pool möglich ist.

  3. Miner aktualisieren. Die Latenz der Miner-Verbindung liegt außerhalb der Kontrolle des Pools, aber ein Pool kann die Effizienz verbessern, indem mehrere Pool-Server die Anzahl der Hops zu allen Minern reduzieren. Pool-Server sollten so nah wie möglich an Minern stehen. Ein Pool, der hauptsächlich aus Minern in Asien besteht, sollte beispielsweise kein Rechenzentrum an der US-Ostküste verwenden.

NTimeRolling reduziert die Anzahl der Kommunikationen (getworks), die für eine bestimmte Anzahl von Hashes erforderlich sind. Dadurch wird der Pool effizienter, da eine bestimmte Menge an Hardware mehr Clients unterstützen kann, die Last bei einem Blockwechsel jedoch nicht reduziert wird.

Die Implementierung von Long Polling stellt sicher, dass Miner benachrichtigt werden, wenn ein Blockwechsel auftritt (abzüglich der oben angegebenen Latenz), anstatt weiter an veralteten Daten zu arbeiten, bis sie abgeschlossen sind. Das Abschließen einer Nonce-Reichweite dauert für einen 400-MH-Miner ungefähr 10 Sekunden. Ohne lange Abfragen verschwendet der Miner im Durchschnitt 5 Sekunden pro Blockänderung, um an Daten zu arbeiten, die niemals einen gültigen Block erzeugen können. Gegebene Blockänderungen treten alle 600 Sekunden auf, was ungefähr 1 % der CPU-Zeit ist, die für das Hashing ungültiger Blockheader verschwendet wird. Langsamere Miner haben einen längeren Zeitraum zwischen getworks und verschwenden somit einen größeren Prozentsatz der GPU-Zeit. Kein Pool kann ohne eine gute Long-Polling-Implementierung effizient sein.

Sowohl NTimeRolling als auch Long Polling (LP) erfordern einen Miner, der diese Befehle richtig versteht.

@ 2: Es scheint, dass Slush tatsächlich eine gewisse Priorisierung von Longpolling implementiert hat: bitcointalk.org/index.php?topic=1976.msg611014#msg611014
@ThePiachu Schöner Fang und eine weise Entscheidung von Slush.
„Angesichts der Tatsache, dass Blockänderungen alle 600 Sekunden stattfinden, sind das erstaunliche 8,3 % der verschwendeten GPU-Zeit“ – sollten das nicht 0,83 % sein?
Neben dem Thema veraltete Aktien ändert sich vermutlich auch der Block, wenn weitere Transaktionen vom Pool zur Aufnahme in den Block empfangen werden. Je nachdem, wie ein Pool dies verwaltet hat, kann dies die Anzahl der veralteten Aktien erhöhen.
@HighlyIrregular Ihr Recht auf 0,83 % gegenüber 8,3 %. Ich habe die Antwort festgelegt. Die meisten (alle?) Pools berücksichtigen einen veralteten Anteil nicht, nur weil Transaktionen enthalten sind. Der alte Transaktionssatz ist noch gültig. Nur bei einem Blockwechsel ist das Set nicht nur veraltet sondern komplett ungültig = veraltet.
@DeathAndTaxes Ja, es wäre verrückt, eine Aktie (und eine mögliche Lösung im Wert von 50 BTC) als veraltet abzulehnen, nur weil der Transaktionsblock aktualisiert wurde, um 0,01 BTC mehr an Gebühren einzubeziehen ... aber ich habe auch eine ganze Reihe verrückter Programmierer getroffen. ..
Wäre es eine Verbesserung, wenn Miner das Netzwerk abhören und selbst neue Blöcke erkennen würden? Sie können dann die laufende Arbeit unterbrechen und zumindest etwas Strom sparen. Erhalten Miner außerdem den nächsten Block-Header (ausgewählte Transaktionen usw. abzüglich des Hashs des vorherigen Blocks), bevor sie mit der Arbeit an einem neuen Block beginnen? Das würde es dem Pool ermöglichen, nur den Hash des neuen Blocks zu senden oder Miner ihn sogar selbst aus dem Netzwerk erkennen zu lassen. Wird die Nonce-Bereichszuweisung effizient durchgeführt?

Der kritischste Faktor ist folgender: Wenn ein neuer Block im Bitcoin-Netzwerk entdeckt wird, wie lange dauert es, bis der Pool der überwiegenden Mehrheit seiner Kunden eine neue Arbeitseinheit auf der Grundlage des neuen Blocks zur Verfügung stellt? Dies wird durch drei Faktoren bestimmt:

1) Long Polling: Wenn Ihnen Leistung wichtig ist, müssen Sie LP unterstützen. So einfach ist das.

2) Netzwerklatenz: Wenn sich der Mining-Controller auf einer langsamen Verbindung befindet oder die Miner weit vom Controller entfernt sind, wird dies zu einem wichtigen Faktor.

3) CPU auf dem Controller: Die CPU kann normalerweise 3% betragen und Sie könnten denken, dass Sie gut abschneiden. Aber wenn es einen Kern ausschöpft, wenn ein neuer Block entdeckt wird, kann dies ein wesentlicher Faktor für untätige Miner oder veraltete Anteile sein.