Huge pages για ταχύτερη εξόρυξη Blocknet

· Ανάγνωση: 6 λεπ.

Με δεσμευμένες huge pages (μεγάλες σελίδες μνήμης), το seine τοποθετεί τη μνήμη κάθε νήματος εξόρυξης σε λίγες μεγάλες σελίδες αντί για εκατοντάδες χιλιάδες μικρές. Αυτός ο οδηγός εξηγεί γιατί αυτό επιταχύνει την απόδειξη εργασίας Argon2id του Blocknet, πόσες σελίδες να δεσμεύσετε και τις ακριβείς εντολές για Linux, WSL2 και Windows.

Γιατί οι huge pages επιταχύνουν την εξόρυξη Blocknet;

Σύντομη απάντηση

Κάθε νήμα του seine υπολογίζει hashes μέσα σε μια arena Argon2id των 2 GiB και διαβάζει μπλοκ από απρόβλεπτα σημεία της. Με κανονικές σελίδες 4 KiB, η arena καλύπτει 524.288 σελίδες, πολύ περισσότερες μεταφράσεις διευθύνσεων από όσες μπορεί να κρατήσει το TLB της CPU. Οι huge pages την καλύπτουν με 1.024 ή μόλις 2 σελίδες, οπότε λιγότερες αναγνώσεις καθυστερούν σε διασχίσεις πινάκων σελίδων.

Κάθε πρόσβαση στη μνήμη ξεκινά με μια εικονική διεύθυνση που η CPU πρέπει να μεταφράσει σε φυσική. Οι πρόσφατες μεταφράσεις φυλάσσονται στο translation lookaside buffer (TLB), το οποίο η τεκμηρίωση του πυρήνα Linux περιγράφει ως «μια cache μεταφράσεων από εικονικές σε φυσικές διευθύνσεις» και «έναν πολύ σπάνιο πόρο του επεξεργαστή». Όταν μια διεύθυνση δεν βρίσκεται στο TLB, η CPU διασχίζει τους πίνακες σελίδων στη μνήμη πριν καν αρχίσει να φέρνει τα δεδομένα.

Η απόδειξη εργασίας του Blocknet κάνει αυτή τη διάσχιση συχνή. Κάθε hash γεμίζει μια arena 2 GiB με μπλοκ του 1 KiB, και στο δεύτερο μισό του περάσματος κάθε νέο μπλοκ διαβάζει ένα προηγούμενο μπλοκ του οποίου η θέση εξαρτάται από δεδομένα που υπολογίστηκαν μια στιγμή πριν. Όπως δείχνει ο οδηγός για το Argon2id, αυτό αθροίζεται σε περίπου 2 GiB διάσπαρτων αναγνώσεων ανά hash. Το μέγεθος της σελίδας καθορίζει πόσες μεταφράσεις χρειάζονται αυτές οι αναγνώσεις:

Μέγεθος σελίδας Σελίδες ανά arena 2 GiB
4 KiB (κανονική) 524.288
2 MiB 1.024
1 GiB 2

Με huge pages, μία εγγραφή του TLB καλύπτει 512 ή 262.144 φορές περισσότερη μνήμη, οπότε πολύ μεγαλύτερο μέρος της arena μένει στην εμβέλεια του TLB και περισσότερος χρόνος κάθε νήματος πηγαίνει στον υπολογισμό hashes.

Πόσο ταχύτερη είναι η εξόρυξη με huge pages;

Ο οδηγός για τις huge pages του seine τις χαρακτηρίζει τη σημαντικότερη ρύθμιση για εξόρυξη με CPU στο Linux. Στον υπολογιστή επαλήθευσης, οι δεσμευμένες σελίδες 2 MiB πρόσθεσαν περίπου 4–6% και οι σελίδες 1 GiB περίπου 2% ακόμη. Ο οδηγός σημειώνει επίσης ότι, όταν τρέχουν πολλά νήματα, η κάλυψη με huge pages συνήθως μετράει περισσότερο από τη ρύθμιση του συνόλου εντολών.

Τα αποτελέσματα διακομιστών στο γράφημα επιδόσεων του seine μετρήθηκαν με ρητές huge pages 2 MiB. Τα 49,4 H/s από ένα AMD EPYC Zen 5 (EPYC 9R45) με 32 νήματα, που μετρήθηκαν τον Οκτώβριο του 2026, επιτεύχθηκαν με 34.407 δεσμευμένες σελίδες, τον ίδιο αριθμό με τη γραμμή των 32 νημάτων στον παρακάτω πίνακα. Ο οδηγός υλικού εξόρυξης έχει όλα τα αποτελέσματα ανά γενιά.

Ακόμη και χωρίς δέσμευση, το seine ζητά από τον πυρήνα transparent huge pages στο Linux. Μια δεσμευμένη δεξαμενή πηγαίνει πιο μακριά, επειδή οι σελίδες κρατούνται εκ των προτέρων, οπότε κάθε νήμα τις παίρνει όσο κατακερματισμένη κι αν έχει γίνει η μνήμη.

Πόσες huge pages χρειάζεται το seine;

Σύντομη απάντηση

Κάθε νήμα του seine χρειάζεται 1.024 huge pages των 2 MiB για να χωρέσει την arena των 2 GiB, ή δύο σελίδες του 1 GiB. Για σελίδες 2 MiB, δεσμεύστε νήματα × 1.024 × 1,05 και στρογγυλοποιήστε προς τα πάνω, ώστε να μείνει 5% περιθώριο. Οκτώ νήματα χρειάζονται 8.602 σελίδες, περίπου 16,8 GiB. Αν η δέσμευση δεν φτάνει, το seine τυπώνει τον ακριβή αριθμό κατά την εκκίνηση.

Ο αριθμός νημάτων είναι η τιμή Threads στον πίνακα ελέγχου του seine. Το seine την επιλέγει με βάση τη RAM και τους πυρήνες σας, οπότε ξεκινήστε το seine μία φορά χωρίς huge pages και σημειώστε την. Αν η δέσμευση είναι πολύ μικρή, το αρχείο καταγραφής εκκίνησης του seine τυπώνει μια γραμμή hugepages | με τις σελίδες που χρειάζεται και την εντολή sysctl για να τις δεσμεύσετε.

Νήματα Σελίδες 2 MiB (με 5% περιθώριο) Δεσμευμένη μνήμη Σελίδες 1 GiB
4 4.301 8,4 GiB 8
8 8.602 16,8 GiB 16
16 17.204 33,6 GiB 32
24 25.805 50,4 GiB 48
32 34.407 67,2 GiB 64

Οι δεσμευμένες σελίδες κρατούνται για προγράμματα που ζητούν huge pages, οπότε προσαρμόστε τη δέσμευση στον αριθμό νημάτων με τον οποίο κάνετε πραγματικά εξόρυξη. Το seine υπολογίζει τη δεσμευμένη δεξαμενή ως διαθέσιμη μνήμη όταν ορίζει τα νήματα, οπότε η δέσμευση σελίδων αφήνει τον αριθμό νημάτων σας όπως ήταν.

Πώς ρυθμίζετε huge pages 2 MiB στο Linux;

Δεσμεύστε τις σελίδες για τον αριθμό νημάτων σας. Αυτό το παράδειγμα είναι για 4 νήματα:

sudo sysctl -w vm.nr_hugepages=4301

Ελέγξτε ότι ο πυρήνας τις βρήκε όλες:

grep -E 'HugePages_Total|HugePages_Free|Hugepagesize' /proc/meminfo

Αν το HugePages_Total βγει μικρότερο από αυτό που ζητήσατε, η μνήμη είναι κατακερματισμένη. Αδειάστε τις cache, συμπυκνώστε τη μνήμη και δοκιμάστε ξανά:

echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 1 | sudo tee /proc/sys/vm/compact_memory
sudo sysctl -w vm.nr_hugepages=4301

Κάντε τη δέσμευση μόνιμη:

echo 'vm.nr_hugepages=4301' | sudo tee /etc/sysctl.d/99-seine-hugepages.conf
sudo sysctl --system

Για μεγάλες δεσμεύσεις, η μόνιμη ρύθμιση μαζί με μια επανεκκίνηση είναι ο πιο αξιόπιστος δρόμος, επειδή ο πυρήνας δεσμεύει σελίδες νωρίς στην εκκίνηση, πριν κατακερματιστεί η μνήμη. Μετά ξεκινήστε το seine όπως συνήθως. Η προεπιλεγμένη λειτουργία σελίδων του, auto, αντιστοιχίζει την arena κάθε νήματος από τη δεσμευμένη δεξαμενή χωρίς επιπλέον flags.

Πώς προσθέτετε σελίδες 1 GiB;

Οι σελίδες 1 GiB θέλουν λίγο περισσότερη ρύθμιση και προσθέτουν περίπου 2% πάνω από τις σελίδες 2 MiB. Κάθε arena 2 GiB χρειάζεται ακριβώς δύο, οπότε δεν υπάρχει περιθώριο να υπολογίσετε. Λειτουργούν σε Linux x86_64 και WSL.

Δεσμεύστε τις κατά την εκκίνηση με παραμέτρους πυρήνα, που είναι ο πιο αξιόπιστος τρόπος για σελίδες τέτοιου μεγέθους. Για 9 νήματα:

hugepagesz=1G hugepages=18

Σε ένα μηχάνημα που μόλις ξεκίνησε μπορείτε επίσης να δοκιμάσετε δέσμευση κατά τη λειτουργία και μετά να ελέγξετε τον αριθμό ελεύθερων σελίδων:

echo 18 | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
cat /sys/kernel/mm/hugepages/hugepages-1048576kB/free_hugepages

Οι γραμμές HugePages_* στο /proc/meminfo αφορούν μόνο το προεπιλεγμένο μέγεθος 2 MiB, οπότε διαβάστε τη δεξαμενή 1 GiB από το /sys. Μετά ξεκινήστε το seine με τη λειτουργία 1 GiB:

./seine --cpu-page-mode large-1g

Σε αυτή τη λειτουργία κάθε νήμα αντιστοιχίζει την arena του από τη δεξαμενή 1 GiB, οπότε ξέρετε ότι όλη η εκτέλεση χρησιμοποίησε σελίδες 1 GiB.

Πώς δεσμεύετε huge pages στο WSL2;

Το WSL2 τρέχει πραγματικό πυρήνα Linux, οπότε οι παραπάνω εντολές Linux λειτουργούν μέσα σε αυτό. Για σελίδες 1 GiB, περάστε τις παραμέτρους εκκίνησης μέσω του %UserProfile%\.wslconfig από την πλευρά των Windows. Η εικονική μηχανή χρειάζεται επίσης αρκετή μνήμη για τη δέσμευση και για τις υπηρεσίες των Windows και του WSL. Ο επαληθευμένος υπολογιστής 64 GiB του seine χρησιμοποίησε αυτό:

[wsl2]
memory=48GB
processors=32
swap=8GB
kernelCommandLine = hugepagesz=1G hugepages=18

Αποθηκεύστε το αρχείο, εκτελέστε wsl --shutdown από τα Windows και ανοίξτε ξανά τη διανομή σας. Επιβεβαιώστε ότι ο αριθμός ελεύθερων σελίδων καλύπτει κάθε νήμα πριν ξεκινήσετε την εξόρυξη.

Πώς ενεργοποιείτε τις large pages στα Windows;

Η εξόρυξη απευθείας στα Windows είναι συνήθως ταχύτερη από το WSL στο ίδιο υλικό, και εκεί το seine χρησιμοποιεί τις large pages των Windows. Χρειάζεται ένα δικαίωμα, το Κλείδωμα σελίδων στη μνήμη (Lock pages in memory):

  1. Ανοίξτε το secpol.msc και μετά Τοπικές πολιτικές → Εκχώρηση δικαιωμάτων χρήστη.
  2. Προσθέστε τον χρήστη σας στο Κλείδωμα σελίδων στη μνήμη.
  3. Αποσυνδεθείτε και συνδεθείτε ξανά, επειδή το δικαίωμα ισχύει για νέες συνδέσεις.

Το secpol.msc περιλαμβάνεται στα Windows Pro, Enterprise και Education. Στις εκδόσεις Home, δώστε το ίδιο δικαίωμα με ένα εργαλείο όπως το ntrights.

Αυτή είναι όλη η ρύθμιση. Κατά την εκκίνηση το seine ενεργοποιεί το δικαίωμα για τον εαυτό του και δεσμεύει την arena 2 GiB κάθε νήματος με VirtualAlloc και MEM_LARGE_PAGES, τη μέθοδο που τεκμηριώνει η Microsoft για μνήμη με large pages. Αν οι large pages δεν είναι διαθέσιμες, το seine κάνει εξόρυξη σε κανονικές σελίδες και καταγράφει τον λόγο μαζί με την ακριβή λύση. Το seine δεν αλλάζει ποτέ μόνο του δικαιώματα λογαριασμού ούτε σας αποσυνδέει.

Ποια λειτουργία σελίδων να χρησιμοποιήσετε;

Η προεπιλογή ταιριάζει σχεδόν σε όλους. Οι υπόλοιπες λειτουργίες υπάρχουν για σελίδες 1 GiB και για μετρήσεις:

Λειτουργία Τι κάνει
--cpu-page-mode auto (προεπιλογή) Χρησιμοποιεί δεσμευμένες huge pages ή large pages των Windows, μετά transparent huge pages και μετά κανονικές σελίδες
--cpu-page-mode large Απαιτεί δεσμευμένες huge pages ή large pages των Windows για κάθε νήμα και σταματά κατά την εκκίνηση αν λείπουν
--cpu-page-mode large-1g Απαιτεί σελίδες 1 GiB για κάθε νήμα (Linux x86_64 και WSL)
--cpu-page-mode regular Μόνο κανονικές σελίδες, για μέτρηση πριν και μετά

Για να μετρήσετε το κέρδος στο δικό σας μηχάνημα, κάντε εξόρυξη για λίγο με --cpu-page-mode regular, μετά με auto ή large-1g, και συγκρίνετε το hashrate στον πίνακα ελέγχου. Σε διακομιστές με πολλούς κόμβους NUMA, οι δεσμευμένες σελίδες πρέπει επίσης να βρίσκονται στους κόμβους που τρέχουν τα νήματά σας· ο οδηγός εξόρυξης σε διακομιστές το καλύπτει.

Συχνές ερωτήσεις

Χρειάζομαι huge pages για να κάνω εξόρυξη Blocknet με το seine;

Όχι. Το seine κάνει εξόρυξη σε κανονική μνήμη μόλις το ξεκινήσετε και ζητά μόνο του transparent huge pages από το Linux. Η δέσμευση huge pages είναι μια προαιρετική προσθήκη για τα τελευταία λίγα τοις εκατό: περίπου 4 έως 6% με σελίδες 2 MiB στον υπολογιστή επαλήθευσης και περίπου 2% επιπλέον με σελίδες 1 GiB.

Πόσες huge pages χρειάζεται κάθε νήμα του seine;

Κάθε νήμα χρειάζεται 1.024 σελίδες των 2 MiB, που χωρούν ακριβώς την arena Argon2id των 2 GiB, ή δύο σελίδες του 1 GiB. Για σελίδες 2 MiB, πολλαπλασιάστε τον αριθμό νημάτων με 1.024, προσθέστε 5% περιθώριο και στρογγυλοποιήστε προς τα πάνω. Οκτώ νήματα χρειάζονται 8.602 σελίδες, δηλαδή δέσμευση περίπου 16,8 GiB RAM.

Χρησιμοποιεί το seine αυτόματα huge pages του 1 GiB;

Η προεπιλεγμένη λειτουργία σελίδων του seine χρησιμοποιεί τη δεσμευμένη δεξαμενή σελίδων 2 MiB και μετά transparent huge pages. Για σελίδες 1 GiB, δεσμεύστε δύο ανά νήμα, κατά προτίμηση κατά την εκκίνηση με hugepagesz=1G hugepages=N, και ξεκινήστε το seine με --cpu-page-mode large-1g. Η λειτουργία αυτή δουλεύει σε Linux x86_64 και WSL και προσθέτει περίπου 2% πάνω από τις σελίδες 2 MiB.

Πώς ενεργοποιώ τις large pages για το seine στα Windows;

Δώστε στον λογαριασμό σας των Windows το δικαίωμα Κλείδωμα σελίδων στη μνήμη (Lock pages in memory) στο secpol.msc, στις Τοπικές πολιτικές και την Εκχώρηση δικαιωμάτων χρήστη, και μετά αποσυνδεθείτε και συνδεθείτε ξανά. Το seine ενεργοποιεί το δικαίωμα για τον εαυτό του κατά την εκκίνηση και δεσμεύει την arena 2 GiB κάθε νήματος με large pages. Στις εκδόσεις Home, δώστε το δικαίωμα με ένα εργαλείο όπως το ntrights.