Ich möchte eine Reihe von Benchmarks auf einem Multi-Core-System unter Linux ausführen. Ich möchte einen der Kerne für meine Benchmarks reservieren. Ich weiß, dass ich sched_setaffinity
verwenden kann, um meine Benchmarks auf diesen Kern zu beschränken. Wie kann ich alle anderen Prozesse von mein Kern behalten? Mit anderen Worten, wie kann ich die Standardaffinität aller Prozesse so einstellen, dass mein Kern nicht eingeschlossen wird?Wie kann ich die Standardprozessoraffinität in Linux ändern?
1
A
Antwort
1
Auch wenn Sie alle anderen Prozesse von Ihrem "reserved for benchmarking" -Kern fernhalten, bedenken Sie, dass Sie nicht verhindern können, dass sie einen variablen und unvorhersehbaren Anteil der begrenzten Speicherbandbreite an einen Multi-Core-Chip verbrauchen, und dass man sie nicht davon abhalten kann, variable Anforderungen an die gemeinsamen L2- und L3-Caches zu stellen.
IMHO reproduzierbare, wissenschaftliche Benchmarking braucht eine Maschine für sich.
Dies ist eine dedizierte Maschine, die nur meine Benchmarks ausführt. Allerdings bin ich mit Linux nicht vertraut und kenne Windows genug, um zu wissen, dass im Hintergrund ein paar Dutzend Systemprozesse laufen, über die ich wenig Kontrolle habe. Ich versuche ihre Auswirkungen zu minimieren. –
Ah ich sehe; OK, ich nahm an, dass Sie versucht haben, eine Ressource auf Ihrem Desktop zu sperren. Aber persönlich würde ich das Problem mit der Zeitplanungspriorität angreifen; Führen Sie Ihren Benchmarking-Prozess mit höherer Priorität als diese Systemprozesse aus. Siehe auch http://stackoverflow.com/questions/6957687/thesdays-what-are-good-reasons-for-setting-thread-affinity-rather-than-leavin insbesondere mein Kommentar zu Ariels Antwort. – timday