System Call Aggregation for a Hybrid Thread Model
- Subject:System Architecture
- Type:Study Thesis
- Date:23.12.2010
- Supervisor:
Prof. Dr. Frank Bellosa, Konrad Miller
- Graduand:Marc Rittinghaus
- Links:PDF
-
Abstract (In German):
Um die Integrität sowie Stabilität in einem Computersystem zu gewährleisten, bedienen sich moderne Betriebsysteme wie Windows oder Linux hardwaregestützter Privilegebenen, die es ermöglichen, integrale Systemund Hardwarekomponenten vor unkontrolliertem Zugriff durch Anwendungen zu schützen. Zum Ausführen privilegierter Operationen (wie das Erstellen einer Datei) ist die Anwendung dabei auf definierte Systemdienste angewiesen, die über eine zentrale Betriebsystemschnittstelle zur Verfügung gestellt werden. Obwohl es gelungen ist die Effizienz diese Schnittstelle mit der Einführung eigens konzipierter Prozessorinstruktionen deutlich zu verbessern, sind die Kosten für das Aufrufen von Systemdiensten auch heute noch beträchtlich. Dies betrifft insbesondere systemnahe Anwendungen, die auf rege Interaktion mit dem Betriebsystem angewiesen sind. Die vorliegende Studienarbeit beschäftigt sich deshalb mit Verfahren zur Verringerung dieser Kosten und stellt in diesem Zuge einen neuen Mechanismus vor, der gezielt auf Anwendung mit hoher interner Parallelität (wie z.B. Server Anwendungen) ausgerichtet ist: Cluster Calls.
Ein bekanntes Verfahren zur Reduktion des anfragerelativen Overheads ist das sog. System Call Batching, bei dem mehrere Systemanfragen gesammelt und in einem einzigen Aufruf gemeinsam an das Betriebsystem abgegeben werden. Dieses Verfahren bleibt jedoch nicht ohne Nachteile für die Anwendung. So summiert sich beispielsweise die Ausführungszeit der Systemdienste und kann zu unerwünschten Latenzen führen. Dieser und weitere Umstände machen bisherige Implementierungen insbesondere für Server Anwendungen wenig attraktiv.
Cluster Calls integrieren eine fortgeschrittene Form des System Call Batchings und kombinieren diese mit einem hybriden Threadmodell, um den Nachteilen des reinen Batchings entgegenzuwirken. Dabei fügt sich das Threadmodell leicht in häufig genutzte Server Architekturen und ermöglicht dadurch ein effizientes Sammeln von Systemaufrufen. Die wichtigste Verbesserung liegt jedoch in der parallelen und asynchronen Ausführung der Systemaufrufe durch Betriebsystemthreads, die der Anwendung ein gleichzeitiges Voranschreiten erlauben. Das Verfahren setzt dabei auf eine frühe Integration in die Zielanwendung und bietet vielfältige Möglichkeiten zur anwendungsspezifischen Konfiguration. Es erweitert in diesem Zuge die Möglichkeiten der Systemschnittestelle und ermöglicht so beispielsweise die Spezialisierung von einzelnen Prozessorkernen auf definierte Systemdienste sowie die Priorisierung bei der Systemdienstausführung. Zur bidirektionalen Kommunikation zwischen Betriebsystem und Anwendung werden geteilte Speicherbereiche benutzt.
Eine Evaluation des Verfahrens hat gezeigt, dass Cluster Calls bis zu 58% des anfragerelativen Overheads für Systemdienste einsparen können. Um darüberhinaus die Anwendbarkeit von Cluster Calls in realitätsnahen Anwendungen zu bewerten, wurde im Rahmen dieser Arbeit das Verfahren in einen Web Server integriert und mit konventionellen Server Architekturen verglichen. Dabei hat sich gezeigt, dass Cluster Calls ein konkurrenzfähiges Threadmodell darstellen und eine gute Alternative zu Modellen basierend auf synchroner I/O bieten. In Tests konnte das Model einen vergleichbaren Throughput erreichen und zeigte gute Charateristiken bzgl. Latenz und CPU Nutzung. Durch den Einsatz von Cluster calls konnten bei der Verarbeitung von Webanfragen über 99% der Systemaufrufe vermieden werden. Es wurden jedoch auch einige Schwächen in der aktuellen Implementierung aufgedeckt, die ebenso in dieser Arbeit diskutiert werden.
BibTex:
@studythesis{rittinghaus10syscallaggregation,
author = {Marc Rittinghaus},
title = {System Call Aggregation for a Hybrid Thread Model},
type = {Study Thesis},
address = {System Architecture Group, University of Karlsruhe, Germany},
month = dec # "23",
year = 2010,
url = {http://os.ibds.kit.edu/}
}