SimonX
2007-12-10, 03:40:24
Hi,
Unter Solaris und HP-UX sind System-Calls, wie ich messen konnte, extrem teuer.
Z.B. auf Solaris:
100000 time() calls + 800000 sigprocmask() calls kosten fast 1,5 Sekunden, wobei die eigentliche Software selbst nur 2,3 Sekunden benötigt. (truss -c ...)
Ich spreche hier von einer Datenbank-Library, die ihre Critical-Sektion durch Signalblocking mehr oder weniger schützt.
Auf Linux sieht das nicht so extrem aus, ist aber auch dort zu messen.
Ich habe mir nun überlegt einfach meinen eigenen Signalhandler-Wrapper zu schreiben, der alle Signale über Flags gesteuert an die echten Signal-Handler weiter gibt bzw. zwischenspeichert bis die Flags wieder freigeschaltet werden.
Gibt es einen Möglichkeit sich generell zwischen die Signal-Handler-Function zu hängen ohne das immer zu wiederholen, da ich ja nicht weiss was die eigentliche Application mit ihren Signalen macht?
Unter Solaris und HP-UX sind System-Calls, wie ich messen konnte, extrem teuer.
Z.B. auf Solaris:
100000 time() calls + 800000 sigprocmask() calls kosten fast 1,5 Sekunden, wobei die eigentliche Software selbst nur 2,3 Sekunden benötigt. (truss -c ...)
Ich spreche hier von einer Datenbank-Library, die ihre Critical-Sektion durch Signalblocking mehr oder weniger schützt.
Auf Linux sieht das nicht so extrem aus, ist aber auch dort zu messen.
Ich habe mir nun überlegt einfach meinen eigenen Signalhandler-Wrapper zu schreiben, der alle Signale über Flags gesteuert an die echten Signal-Handler weiter gibt bzw. zwischenspeichert bis die Flags wieder freigeschaltet werden.
Gibt es einen Möglichkeit sich generell zwischen die Signal-Handler-Function zu hängen ohne das immer zu wiederholen, da ich ja nicht weiss was die eigentliche Application mit ihren Signalen macht?