Frage

Wenn Sie wissen, dass Ihre Software (keinen Fahrer, die nicht Teil des Os, nur eine Anwendung) läuft meist in einer virtualisierten Umgebung gibt es Strategien, um Ihren Code und / oder Compiler-Einstellungen zu optimieren? Oder irgendwelche Führer für das, was Sie sollten und nicht tun?

Es geht nicht um einen 0.0x% Performance-Gewinn, aber vielleicht, nur vielleicht gibt es einfache Dinge, die Leistung drastisch oder Dinge zu verbessern, die einfach erscheinen, aber in virtualisierten Umgebungen katastrophal sein, sind bekannt. Zum Beispiel CONFIG_PARAVIRT in einem Kernel-Build ermöglicht ist leicht getan und kann viel Leistungssteigerung. Jetzt suche ich ähnliche Dinge für Anwendungen, wenn es welche gibt.

In meinem Fall wird es C ++ Code und wahrscheinlich VMWare sein, aber ich möchte die Frage, wie Sprache / produktunabhängig wie möglich zu halten. Ich frage mich, ob es überhaupt solche Strategien sind oder wenn dies wäre eine komplette Zeitverschwendung sein - schließlich das Konzept der Virtualisierung ist, dass Sie nicht zu viel über ihn kümmern müssen

.
War es hilfreich?

Lösung

Der einzige Rat, den ich dir geben kann ist eine sorgfältige Verwendung von mlock () / mlockall () .. während der Suche nach Buggy Ballonfahrer.

Zum Beispiel, wenn ein Xen-Gast mit 1 GB gebootet wird, aufgebläht dann bis auf 512 MB, die sehr typisch, dass die privilegierte Domain NICHT der paravirtualisierte Kernel aussahen war, wie viel Speicher tatsächlich viel versprechende Verfahren (das heißt Committed_AS). Eigentlich mit Xen, es sei denn, dieser Wert auf Xenbus gelegt wird, hat die privilegierte Host keine Ahnung, was ein solcher Ballon tun wird. Ich glaube, dies deckt sich auch mit KVM, je nachdem, wie der Kernel konfiguriert ist .. aber Ihre Frage setzt voraus, dass wir wissen nichts über solche Dinge:)

Also, Sachen schützen (Vorsicht, aber klug), die einfach nicht ausgelagert werden, berücksichtigen immer für den ‚Himmel fällt‘ -Szenario.

Auch die Verwendung von posix_fadvise () / posix_madvise () nur dem PV-Kernel zu sagen, wie viel Sie zu tun oder nicht Pufferung benötigen, ist immer eine gute Idee.

Darüber hinaus gibt es sehr wenig, dass Sie tun können .. da Sie nur auf die paravirtualisierte Kernel sprechen, die entwickelt, um Prozesse blind zu machen in erster Linie zur Virtualisierung.

I KVM nicht viel nutzen (noch) nicht, obwohl ich es in Zukunft noch mehr erkunden möchten. Jedoch 90% der Sachen, die ich in letzter Zeit geschrieben ist speziell auf paravirtualisierte Xen Gäste läuft.Um. Leider ein wenig Xen / C centric sein, aber das ist, wo meine Erfahrung ist, und pv_ops ist in Hauptstrecke (bald auch xen-0 ops):)

Gute Frage, btw:)

Edit:

Als ich sagte, ‚vorsichtig aber klug‘, meinte ich einen Schritt über konservativ. Wenn Ihr Programm eine Auftragsstruktur zuordnet, dass die meisten Funktionen benötigen, verriegeln. Wenn Ihre Zuweisung Puffer große Dateien zu lesen, sperren sie nicht .. und sicher sein, posix_fadvise () aufrufen, um den Kernel zu wissen, dass Sie nur die Absicht, es einmal zu gelangen (wenn das der Fall ist). Auch sicher sein, den Kernel auf Ihrer Verwendung von Memory-Mapped-Dateien zu beraten, vor allem, wenn sie dazu dienen, die Parallelität zu organisieren.

Kurz gesagt, helfen Ihrem Host-Kernel verwalten Speicher, lassen Sie sich nicht kritisch zugeordnete Blöcke in schmutzige Paging geworfen bekommen, nicht davon ausgehen, Ihr Programm ist wichtiger als alles andere, indem sie alles Verriegelung weist er:)

Sorry für die Mehrdeutigkeit. Der beste Satz, den ich kommen könnte mit war ‚vorsichtig, aber klug.‘

Andere Tipps

Ich habe es gefunden alle über I / O zu sein.

VMs saugen typischerweise unglaublich schlecht bei IO. Dies macht verschiedene Dinge viel schlimmer, als sie auf dem realen Zinn sein würden.

Swapping ist vor allem ein schlechter Killer - es VM Leistung völlig Wracks, sogar ein wenig, wie IO so langsam ist.

Die meisten Implementierungen eine große Menge an IO Streit zwischen VMs haben, habe ich nicht gesehen, die dies vermeidet oder behandelt es sinnvoll.

So eine Ramdisc für temporäre Dateien verwenden, wenn Sie kann, aber nicht dazu führen, es, zu tauschen, weil das noch schlimmer wäre.

Mein einziger Rat ist halten Sie Ihr Gedächtnis und IO niedrig verwenden, wenn möglich.

IO in einer VM ist ziemlich langsam im Vergleich zu physischer Hardware. Wenn Sie vermeiden können, es zu tun, dann es vermeiden.

Die Dinge, die langsam auf echte Hardware sind noch langsamer, wenn das System virtualisiert wird. Es hängt von der Virtualisierungstechnologie verwendet wird, wie viel langsamer werden sie.

Vor allem alles vermeiden, was I / O mit der Welt außerhalb der virtuellen Umgebung erfordert. Auswuchten, wie die Dinge eingerichtet sind, diese auf dem Bildschirm beinhaltet Zeichnen, Swapping und Festplatten- und Netzwerk-I / O. Das ist in etwa in einer abnehmenden Reihenfolge ihrer Bedeutung.

Wenn möglich, so tun Sie für einen zehn Jahre alten Computer zu schreiben. Wenn Ihre Anwendung auf einem Desktop-PC 1999 funktionieren würde, oder Laptop, sollte es OK tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top