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.
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.
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.
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.
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.
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.
DerPiachu