Kryptomining mit AMD-Prozessoren – ein How-To für Interessierte
Optimierungen und zur Hardware passende Coins
Ein genauerer Blick lohnt sich jedoch auf die Ausgabe von xmrig. Grün ist gut, rot und gelb sind schlecht. Wir sehen z.B. dass sich xmrig freut, Huge-Pages- und AES-Support entdeckt zu haben (1 GB Pages gibt’s nur unter Linux), dass mit dem korrekten Pool über den Port Kontakt aufgenommen wird, den wir vorher eingestellt haben, aber auch ein paar Warnungen. So sehen wir z.B. dass xmrig zwar Large-/Huge-Pages nutzen kann, aber nur 11% des Speicherbereichs auf diese schnelle Art und Weise gesperrt werden konnten. Meist passiert das, wenn der PC schon eine Weile lief und der Arbeitsspeicher entsprechend fragmentiert ist. Ein Neustart behebt das Problem meist.
Ein anderer Hinweis betrifft einen MSR-Mod, den die Software nicht setzen konnte. xmrig ist ein hochoptimierter Miner. Dessen Entwickler hat sich dem Umstand angenommen, dass die Hardware-Prefetcher moderner CPUs in ihrem Übereifer kontraproduktiv sind für das Mining mit RandomX. Daher würde xmrig gerne, sofern die Software das CPU-Modell kennt, einen MSR-Mod anwenden, um die Hardware-Prefetcher zu deaktivieren. Das geht aber nur, wenn der Miner mit “Rechtsklick / Als Administrator ausführen” gestartet wurde, da ihm sonst die Rechte dazu fehlen.
Im Idealfall sieht das dann so aus:
Alles grün und wie man sieht ist die Hashrate nun auch entsprechend höher. Dass OpenCL und CUDA rot sind, interessiert uns an dieser Stelle nicht, da RandomX ein reiner CPU-Algorithmus ist, der zwar auch mit Grafikkarten geschürft werden könnte, aber nur sehr ineffizient. Sprich: Grafikkarten lässt man in jedem Fall auf einen anderen Algorithmus los als RandomX!
Nun können wir den Miner laufen lassen und auf der Pool-Webseite beobachten was dort so alles geschieht. Sobald der Pool einen Block gefunden hat, wird das angezeigt und der eigene Anteil erscheint im Kasten “Pending Rewards”. Sobald sichergestellt ist nach einer Weile, dass der Block valide ist, wird der Betrag gutgeschrieben auf “Confirmed Balance”. Allerdings zahlen die Pools nicht jeden Kleinstbetrag sofort auf die Wallet-Adresse aus, sondern erst wenn ein bestimmter Mindestwert erreicht wurde. Das unterscheidet sich von Pool zu Pool. Bei Hashvault ist das sog. Min Payout Limit bei Monero 0,001 XMR. Erst wenn man diesen Wert erreicht hat, wird ausbezahlt.
Welcher Coin?
Für unser erstes Beispiel haben wir Monero verwendet. Aber nicht jede Hardware eignet sich gleich gut für jeden Coin. Wie wir schon geschildert haben, verwendet der RandomX-Algo von Monero eine Scratchpad-Größe von 2 MB je Thread. Das ist bei einem Ryzen 7 2700 gut um 8 Threads gleichzeitig laufen zu lassen. Ideal ist es aber nicht, da die CPU ja dank SMT 16 Threads starten könnte. Dafür jedoch ist der Last-Level-Cache mit 16 MB zu klein. Da sieht es beim Nachfolger Ryzen 7 3700X besser aus. Der hat 32 MB Last-Level Cache, also perfekt, um in Monero alle zur Verfügung stehenden Ressourcen zu nutzen. Daher (und aufgrund der Architektur-Verbesserungen von Zen 2 gegenüber Zen 1) ist der Ryzen 7 3700X mit ca. 8.000 H/s trotz gleicher Kernanzahl deutlich schneller als der Ryzen 7 2700 mit ca. 5.000 H/s.
Anderes, extremes Beispiel: ein AMD Bristol Ridge hat gar keinen L3-Cache und der L2-Cache, der hier den Last-Level-Cache bildet, ist lediglich 1 MB je Modul groß. Es passt also nicht mal das Scratchpad eines einzelnen Threads in den Cache, daher ist Monero für einen Bristol Ridge gänzlich ungeeignet. Der Algorithmus muss zur Hardware passen. xmrig listet auf der Webseite detailliert auf, welcher Algorithmus welche Scratchpad-Größe verwendet:
Was hier als Memory bezeichnet wird, ist die Scratchpad-Größe je Thread. Um am Beispiel AMD Bristol Ridge zu bleiben, müssten wir also einen Algorithmus wählen, der höchstens 1 MB je Thread verwendet, damit wenigstens das Scratchpad eines Threads je Modul in den Cache passt. rx/wow wäre so ein Algorithmus, den der Coin Wownero verwendet. Auf der oben bereits verlinkten Webseite MiningPoolStats kann man nachschlagen, welcher Coin welchen Algo verwendet.
Wer sich nicht sicher ist, wieviel Cache die eigene CPU besitzt, kann das Tool CPU‑Z konsultieren:
Entscheidend ist die letzte Cache-Stufe, hier 2x 8 MB, genug also, um acht Monero-Threads zu starten. Bei einem AMD A8-9600 “Bristol Ridge” z.B. wäre der L2-Cache die letzte Cachestufe. Hier würde 2x 1 MB stehen.
Doch wie kann man andere Coins minen? Im Idealfall – und deswegen haben wir als Beispiel HashVault verwendet – betreibt der Pool seiner Wahl neben Monero noch andere Coins, hier wie man sieht eine ganze Reihe von Alternativen, ohne dass man sich in Sachen Look&Feel umgewöhnen müsste.
Man wählt also statt den Monero-Bereich den gewünschten anderen. Alles weitere erfolgt äquivalent zur Anleitung oben. Wallet des gewünschten Coins herunterladen, die Mining-Software xmrig haben wir bereits, im Getting-Started-Bereich des Pools die relevanten Angaben machen und die Pool-Sektion der Konfigurationsdatei in die config.json-Datei kopieren.
Wichtig ist, dass man die Daten nicht durcheinander bringt. Wenn man z.B. Wownero minen möchte und die Pool-Angaben entsprechend gemacht hat, muss man auch eine Wownero-Wallet-Adresse angeben. Man kann also nicht Wownero minen wollen und eine Monero- oder gar Bitcoin-Adresse angeben, in dem Glauben, man würde dann Monero oder Bitcoins ausbezahlt bekommen. Wer Wownero minen möchte, muss hier auch eine Wownero-Wallet-Adresse angeben, damit der Betrag ausbezahlt werden kann sobald er die Min-Payout-Schwelle überschritten hat.