Vor einiger Zeit stellte ich eine Frage über die Kosten eines Systemaufrufs in Solaris 10 auf SPARC-Hardware. In den letzten paar Monaten ist dieses Problem ein paar Mal wieder aufgetaucht und hier ist, was ich gefunden habe.Syscall Overhead in Solaris vs Linux
Wenn wir einen synthetischen Test durchführen, bei dem eine 300-MB-Datei in 256-Byte-Blöcken von der Festplatte gelesen wird, dauert sie unter Solaris 10 wesentlich länger als unter Linux. Der Test wird in der folgenden Art und Weise geschehen:
dd if=test.dat of=/dev/null bs=256
Auch test.dat
wenn auf einem Memory-Mapped-Dateisystem wie /tmp
gespeichert, Linux Solaris trifft mit großem Vorsprung. Es scheint so, als ob der Aufwand, zwischen User Space und Kernel Space hin und her zu gehen, unter Solaris wesentlich höher ist als unter Linux, selbst wenn beide auf derselben Hardware laufen.
Ich habe zwei Fragen:
- Ist es eine Art von Know Nachteil von Solaris über Linux?
- Gibt es eine Möglichkeit, Solaris auf Linux-Nummern abzustimmen, vorausgesetzt, ich kann die Größe eines I/O-Blocks nicht von 256 erhöhen?
Vielen Dank!
Es gibt eine Menge nicht näher spezifizierter Variablen hier. Ist das auf vergleichbarer Hardware? Die gleichen Festplatten? Die gleichen Dateisysteme? Wenn Sie eine Frage zum Systemanruf-Overhead beantworten möchten, sollten Sie einen anderen Systemaufruf verwenden, der keine andere Arbeit verrichtet. – alberge
@alberge Die beste "vergleichbare Hardware", die ich bekommen kann, sind zwei Instanzen eines VirtualBox-Rechners, der auf einem Windows7-Host läuft. Ich weiß, dass dieser Aufbau flockig sein könnte, aber in Reihen von Experimenten bleiben die Zahlen innerhalb vernünftiger Dispersion. Im Test mit "/ tmp" sind beide Dateisysteme identisch - tmpfs. Ich habe auch den Test verbessert, indem ich ibs und obs getrennt spezifiziert und obs bei 8192 gehalten habe. – evolvah
Die Dateisysteme sind nur "identisch", weil sie denselben Namen haben.Die tmpfs-Implementierungen teilen nichts gemeinsam zwischen Linux und Solaris. Versuchen Sie, etwas zu finden, das den Systemaufruf-Overhead misst und nicht die komplexe Kombination, die Sie gerade verwenden. Sie sollten auch die Spezifikationen beider Systeme angeben und herausfinden, welchen Engpass sie während des Tests erfüllen. – jlliagre