Το Linux 7.2 φέρνει επιτάχυνση CRC64-NVMe με NEON και σε 32-bit ARM επεξεργαστές
Τι έφερε η βελτίωση στο ARM64
Η αρχική υλοποίηση για ARM64 παρείχε CRC64-NVMe βελτίωση σχεδόν 6x σε σύγχρονα Arm SoC. Η NEON-βελτιστοποιημένη υλοποίηση CRC64 ακολούθησε το πρότυπο αντίστοιχων αρχιτεκτονικά-ειδικών υλοποιήσεων, όπως αυτών για x86_64 και RISC-V. Τα αποτελέσματα αυτά μετρήθηκαν σε Arm Cortex-A72 SoC, με την υλοποίηση να βασίζεται στις εντολές NEON Polynomial Multiply Long (PMULL). Ο γενικός αλγόριθμος shift-and-XOR είναι αργός και δημιουργεί σημείο συμφόρησης στα υποσυστήματα NVMe, ενώ η επιταχυνόμενη υλοποίηση χρησιμοποιεί C intrinsics (arm_neon.h) αντί για raw assembly, για καλύτερη αναγνωσιμότητα και συντηρησιμότητα.
Η νέα σειρά patches για ARM32
Μια σειρά patches του Ard Biesheuvel επιτρέπει την κοινή χρήση των NEON intrinsics εντός του πυρήνα Linux μεταξύ 32-bit ARM και 64-bit ARM, καθιστώντας τα ARM64 NEON intrinsics για CRC64 διαθέσιμα σε 32-bit ARM περιβάλλοντα Linux όπου οι πυρήνες CPU διαθέτουν υποστήριξη NEON. Αυτή η αρχιτεκτονική απόφαση — κοινός κώδικας αντί για χωριστές υλοποιήσεις — απλοποιεί τη μακροπρόθεσμη συντήρηση του πυρήνα.
Όπως φαίνεται σε ένα από τα μηνύματα της σειράς patches, η επίδραση στην απόδοση είναι εξίσου σημαντική με αυτή που παρατηρήθηκε στον χώρο του ARM64 — για όσους εξακολουθούν να χρησιμοποιούν 32-bit ARM και upstream builds του πυρήνα Linux το 2026 και μετά.
Ενσωμάτωση στο Linux 7.2 και xor_gen()
Η επιτάχυνση CRC64-NVMe για 32-bit ARM ενσωματώθηκε αυτή την εβδομάδα στον πυρήνα Linux 7.2 μέσω της ενημέρωσης CRC· η ίδια αλλαγή αποδίδει στο ARM32 NEON και τη βελτιστοποιημένη συνάρτηση xor_gen() από τον ARM64 κώδικα. Η συνάρτηση xor_gen() χρησιμοποιείται σε λειτουργίες XOR επί πινάκων δεδομένων, οι οποίες απαντώνται σε RAID και παρόμοια υποσυστήματα.
Η κίνηση αυτή έχει πρακτική σημασία για embedded συστήματα, βιομηχανικούς ελεγκτές και συσκευές IoT που εξακολουθούν να τρέχουν 32-bit ARM SoC με NEON — ειδικά εκεί που χρησιμοποιείται NVMe αποθήκευση και η ακεραιότητα δεδομένων είναι κρίσιμη. Δεδομένου ότι το Linux 7.1 έφερε επίσης υποστήριξη πραγματικού χρόνου (PREEMPT_RT) για 32-bit ARM στον mainline πυρήνα, το οικοσύστημα ARM32 λαμβάνει σταδιακά σοβαρές βελτιώσεις στις νέες εκδόσεις του πυρήνα.
Πηγές
Phoronix: Linux's ARM64 NEON Intrinsics CRC64 Code Adapted To Work On 32-bit ARM Phoronix: Linux 7.1 Lands ARM64 NEON-Accelerated CRC64-NVMe For ~6x Improvement Phoronix: ARM NEON Accelerated CRC64 Optimization Shows Nearly 6x Improvement Linux Kernel Mailing List: Patch series by Ard Biesheuvel
522
