On 2008-07-30 at 02:01:47 [+0200], Salvatore Benedetto <emitrax@xxxxxxxxx> wrote: > 2008/7/29 Ingo Weinhold <ingo_weinhold@xxxxxx>: > >> Because as I said, the performance issues happens only on process exit > >> and > >> from > >> an user point of view it shouldn't be a problem. > > > > Not sure what to say. You wrote yourself in your previous mail that SETVAL > > and SETALL are affected (BTW, the latter is even very suboptimally > > implemented and thus O(m*n) with m = number of sems in the set and n = > > total > > number of undo entries). And as I wrote in my previous mail RMID should be > > affected in the same way. So the performance issues when a lot of > > semaphores > > are used are definitely not limited to program exit only. > > Exactly. It also affect the performances of initialization, as that's > what SETVAL and > SETALL are. Theorically during inizialization there won't be any > process waiting on > it, nor there be a sem_undo request queued. > > The other design I started with, required a private list in every > XsiSemaphore, so that > when SETALL or SETVAL was called, all it has to do was iterate through > the list and > set the sem_undo value to zero. Despite improving the inizialization > performance, it > would also require to add another list to the team to keep an object > per semaphore > used with SEM_UNDO. This list would be accessed at exit time in the > very same manner > the XsiSemaphore private one is. This design though, add the > complexity of keeping the > two list synchronized, plus something else I don't recall right now Managing too lists is not really more complex than managing one list and a counter. You basically have to replace the counter increments/decrements by list adds/removes. The only additional complexity is the per team structure, but that is needed anyway to keep track of private semaphore sets, that should be deleted on team exit/exec*(). I would go with an undo entry per semaphore set and team, BTW. > Anyway, I decided to choose semplicity as I though that the > performances lost on exit > and initialization won't be a big problem. Theorically there won't > even be a process with > requested sem_undo at inizialization, as theorically, SETVAL and > SETALL are the very > first operation done on a set. It doesn't make a difference when SETVAL/SETALL are called or whether there are undo entries for these semaphores, since you unconditionally iterate through the whole global undo entry list in any case. CU, Ingo