Το Facebook δημοσιεύει το Hermit, μια εργαλειοθήκη για επαναλαμβανόμενη εκτέλεση προγραμμάτων

Το Facebook (απαγορευμένο στη Ρωσική Ομοσπονδία) δημοσίευσε τον κώδικα της εργαλειοθήκης Hermit, που σχηματίζει ένα περιβάλλον ντετερμινιστικής εκτέλεσης προγράμματος, το οποίο επιτρέπει τη λήψη του ίδιου αποτελέσματος και την επανάληψη της προόδου της εκτέλεσης χρησιμοποιώντας τα ίδια δεδομένα εισόδου σε διαφορετικές εκκινήσεις. Ο κώδικας του έργου είναι γραμμένος σε Rust και διανέμεται με την άδεια BSD.

Κατά την κανονική εκτέλεση, διάφοροι εξωγενείς παράγοντες επηρεάζουν το αποτέλεσμα, όπως η τρέχουσα ώρα, οι δυνατότητες προγραμματισμού νημάτων, οι διευθύνσεις εικονικής μνήμης, τα δεδομένα από τη γεννήτρια ψευδοτυχαίων αριθμών και διάφορα μοναδικά αναγνωριστικά. Το Hermit σάς επιτρέπει να εκτελέσετε το πρόγραμμα σε ένα κοντέινερ στο οποίο αυτοί οι παράγοντες παραμένουν σταθεροί στις επόμενες εκτελέσεις. Η επαναλαμβανόμενη εκτέλεση, η οποία αναπαράγει πλήρως τις ρυθμίσεις ασταθούς περιβάλλοντος, μπορεί να χρησιμοποιηθεί για διάγνωση σφαλμάτων, εντοπισμό σφαλμάτων πολλαπλών σταδίων με επαναλήψεις, δημιουργία σταθερού περιβάλλοντος για δοκιμές παλινδρόμησης, δοκιμές ακραίων καταστάσεων, αντιμετώπιση προβλημάτων πολλαπλών νημάτων και επαναλαμβανόμενα συστήματα κατασκευής.

Το Facebook δημοσιεύει το Hermit, μια εργαλειοθήκη για επαναλαμβανόμενη εκτέλεση προγραμμάτων

Δημιουργείται ένα αναπαραγώγιμο περιβάλλον με την υποκλοπή κλήσεων συστήματος, μερικές από τις οποίες αντικαθίστανται με δικούς τους χειριστές που παράγουν ένα σταθερό αποτέλεσμα, και κάποιες ανακατευθύνονται στον πυρήνα, μετά τον οποίο το αποτέλεσμα διαγράφεται από μη μόνιμα δεδομένα. Για την υποκλοπή κλήσεων συστήματος χρησιμοποιείται το πλαίσιο ονειροπόλησης, ο κώδικας του οποίου δημοσιεύεται επίσης από το Facebook. Για να αποτρέψετε τις αλλαγές στο σύστημα αρχείων και τα αιτήματα δικτύου να επηρεάσουν την πρόοδο της εκτέλεσης, η εκτέλεση εκτελείται χρησιμοποιώντας μια σταθερή εικόνα FS και με απενεργοποιημένη την πρόσβαση σε εξωτερικά δίκτυα. Κατά την πρόσβαση στη γεννήτρια ψευδοτυχαίων αριθμών, ο Hermit παράγει μια προκαθορισμένη ακολουθία που επαναλαμβάνεται κάθε φορά που εκτελείται.

Μεταξύ των πιο περίπλοκων μη μόνιμων επιρροών στην εκτέλεση είναι ο προγραμματιστής νημάτων, του οποίου η συμπεριφορά εξαρτάται από πολλούς εξωτερικούς παράγοντες, όπως ο αριθμός των πυρήνων της CPU και η παρουσία άλλων νημάτων που εκτελούνται. Για να διασφαλιστεί η επαναλαμβανόμενη συμπεριφορά του χρονοπρογραμματιστή, όλα τα νήματα είναι σειριακά, δεσμευμένα σε έναν μόνο πυρήνα της CPU και με τη σειρά με την οποία ο έλεγχος μεταβιβάζεται στα νήματα. Κάθε νήμα επιτρέπεται να εκτελέσει έναν σταθερό αριθμό εντολών, μετά τον οποίο η εκτέλεση σταματά και μεταφέρεται σε άλλο νήμα (για περιορισμό, χρησιμοποιείται η CPU PMU (Performance Monitoring Unit), η οποία σταματά την εκτέλεση μετά από έναν καθορισμένο αριθμό διακλαδώσεων υπό όρους).

Για τη διάγνωση προβλημάτων με νήματα που οφείλονται σε κατάσταση αγώνα, ο Hermit διαθέτει μια λειτουργία για τον εντοπισμό λειτουργιών που ήταν εκτός λειτουργίας και οδήγησαν σε συντριβή. Για τον εντοπισμό τέτοιων προβλημάτων, γίνεται σύγκριση των καταστάσεων στις οποίες καταγράφηκε η σωστή λειτουργία και η μη φυσιολογική ολοκλήρωση της εκτέλεσης.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο