lkml.org 
[lkml]   [2000]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: Semaphores slow???
Date
On Wed, 27 Dec 2000, Rogier Wolff wrote:
> Hi,
>
> We have a typical semaphore application that has a producer and a
> consumer.
>
> Without the semaphores we are limited by the rest of the stuff to
> 10000 times around the loop per second. That's good.
>
> When we put the "push the semaphore" call in there, the rate drops to
> around 8000 per second. I'm not happy about that, but ok. When we add
> the "wait for bufferspace" semaphore wait in there, the rate drops to
> 4000 per second. This is way too low.

This sound weird to me.
I think that linux semaphores ( not SysV IPC ) are quite fast instead.
They're based on fast spinlocks and linux scheduling ( no need of predefined
scheduling points ) code.


>
> Does anybody have an idea why linux semaphores are so slow?
>
> init:
> sem_init (&write_sem, 1, 0);
> sem_init (&write_buffer_sem, 1, 0);
>
>
>
> producer:
>
>
> while (1) {
> sem_wait (&write_buffer_sem);
> ...
>
> sem_post (&write_sem);
> }
>
>
> consumer:
> for (i=0;i<nbufs;i++) {
> Create_buffer (i);
> sem_post (&write_buffer_sem);
> }
>
> while (1) {
> sem_wait (&write_sem);
> ...
>
> sem_post (&write_buffer_sem);
> }
>

Which kind of syncronization have You used to get 10000 loops/sec ?



> (pshared == 0 doesn't work: returns error. The manpage claims that
> thsi would happen for pshared != 0... )

Which glibc version are You using ?
This is the code for sem_init() ( 2.1.3 ) :

int __new_sem_init(sem_t *sem, int pshared, unsigned int value)
{
if (value > SEM_VALUE_MAX) {
errno = EINVAL;
return -1;
}
if (pshared) {
errno = ENOSYS;
return -1;
}
__pthread_init_lock((struct _pthread_fastlock *) &sem->__sem_lock);
sem->__sem_value = value;
sem->__sem_waiting = NULL;
return 0;
}


Are You sure You're not using a pthread emulation of GNU Pth library ?




- Davide

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:52    [W:0.037 / U:0.972 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site