Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Apr 2012 11:46:28 -0700 (PDT)
From:      Sushanth Rai <sushanth_rai@yahoo.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: mlockall() on freebsd 7.2 + amd64 returns EAGAIN
Message-ID:  <1334342788.95842.YahooMailClassic@web180002.mail.gq1.yahoo.com>
In-Reply-To: <1334342264.8672.YahooMailClassic@web180006.mail.gq1.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Just in case the attachment doesn't come through. Here is the program:=0A=
=0A#include <stdio.h>=0A#include <stdlib.h>=0A#include <sys/types.h>=0A#inc=
lude <sys/time.h>=0A#include <strings.h>=0A#include <pthread.h>=0A#include =
<unistd.h>=0A#include <errno.h>=0A#include <sys/mman.h>=0A=0Avoid * thr_fun=
c(void *);=0A#define MAX_THREADS 5=0A=0Amain()=0A{=0A        int i;=0A     =
   int thread_num[MAX_THREADS];=0A        pthread_t tid[MAX_THREADS];=0A=0A=
        if (mlockall(MCL_CURRENT|MCL_FUTURE) < 0) {=0A                perro=
r("Failure to lock address space");=0A                exit(1);=0A        }=
=0A=0A        for (i=3D0; i < MAX_THREADS; i++) {=0A                thread_=
num[i] =3D i+1;=0A                if (pthread_create(&tid[i], NULL, thr_fun=
c,=0A                                     &thread_num[i]) !=3D 0) {=0A     =
                   perror("thread creation failed");=0A                    =
    exit(1);=0A                }=0A        }=0A=0A        for (i=3D0; i < M=
AX_THREADS; i++) {=0A                if (pthread_join(tid[i], NULL) !=3D 0)=
 {=0A                        perror("pthread_join failed\n");=0A           =
             exit(1);=0A                }=0A        }=0A}=0A=0Avoid * thr_f=
unc(void *arg)=0A{=0A       int *tnum =3D (int *)arg;=0A       printf("Thea=
d %d going to sleep\n", *tnum);=0A=0A       while(1) {=0A                sl=
eep(5);=0A        }        =0A}=0A=0A=0A--- On Fri, 4/13/12, Sushanth Rai <=
sushanth_rai@yahoo.com> wrote:=0A=0A> From: Sushanth Rai <sushanth_rai@yaho=
o.com>=0A> Subject: Re: mlockall() on freebsd 7.2 + amd64 returns EAGAIN=0A=
> To: "Konstantin Belousov" <kostikbel@gmail.com>=0A> Cc: freebsd-hackers@f=
reebsd.org=0A> Date: Friday, April 13, 2012, 11:37 AM=0A> I've attached the=
 simple program that=0A> creates 5 threads. Following is the o/p of=0A> /pr=
oc/<pid>/map when this program is running. Note=0A> that I modified =0A> sy=
s/fs/procfs/procfs_map.c to print whether a region is=0A> wired. As you can=
 see from this o/p, none of stack areas get=0A> wired. =0A> =0A> 0x400000 0=
x401000 1 0 0xffffff002d943bd0 r-x 1 0 0x1000 COW=0A> NC wired vnode /var/t=
mp/thread1=0A> 0x500000 0x501000 1 0 0xffffff002dd13e58 rw- 2 0 0x3100 NCOW=
=0A> NNC wired default -=0A> 0x501000 0x600000 255 0 0xffffff002dd13e58 rwx=
 2 0 0x3100=0A> NCOW NNC wired default -=0A> 0x800500000 0x800526000 38 0 0=
xffffff0025574000 r-x 192 46=0A> 0x1004 COW NC wired vnode /libexec/ld-elf.=
so.1=0A> 0x800526000 0x800537000 17 0 0xffffff002d9f81b0 rw- 1 0=0A> 0x3100=
 NCOW NNC wired default -=0A> 0x800626000 0x80062d000 7 0 0xffffff002dd13bd=
0 rw- 1 0=0A> 0x3100 COW NNC wired vnode /libexec/ld-elf.so.1=0A> 0x80062d0=
00 0x800633000 6 0 0xffffff002dd145e8 rw- 1 0=0A> 0x3100 NCOW NNC wired def=
ault -=0A> 0x800633000 0x800645000 18 0 0xffffff00256d71b0 r-x 63 42=0A> 0x=
4 COW NC wired vnode /lib/libthr.so.3=0A> 0x800645000 0x800646000 1 0 0xfff=
fff002d975510 r-x 1 0=0A> 0x3100 COW NNC wired vnode /lib/libthr.so.3=0A> 0=
x800646000 0x800746000 0 0 0xffffff002dc5cca8 --- 4 0=0A> 0x3100 NCOW NNC n=
ot-wired default -=0A> 0x800746000 0x80074a000 4 0 0xffffff002572a288 rw- 1=
 0=0A> 0x3100 COW NNC wired vnode /lib/libthr.so.3=0A> 0x80074a000 0x80074c=
000 2 0 0xffffff002dc5cca8 rw- 4 0=0A> 0x3100 NCOW NNC wired default -=0A> =
0x80074c000 0x80083e000 242 0 0xffffff001cd226c0 r-x 238 92=0A> 0x1004 COW =
NC wired vnode /lib/libc.so.7=0A> 0x80083e000 0x80083f000 1 0 0xffffff002dd=
12000 r-x 1 0=0A> 0x3100 COW NNC wired vnode /lib/libc.so.7=0A> 0x80083f000=
 0x80093e000 0 0 0xffffff002dc5cca8 --- 4 0=0A> 0x3100 NCOW NNC not-wired d=
efault -=0A> 0x80093e000 0x80095d000 31 0 0xffffff002dddc360 rw- 1 0=0A> 0x=
3100 COW NNC wired vnode /lib/libc.so.7=0A> 0x80095d000 0x800974000 23 0 0x=
ffffff002dc5cca8 rw- 4 0=0A> 0x3100 NCOW NNC wired default -=0A> 0x800a0000=
0 0x800b00000 256 0 0xffffff002dbd1798 rw- 1 0=0A> 0x3100 NCOW NNC wired de=
fault -=0A> 0x800b00000 0x800c00000 256 0 0xffffff002dd14948 rw- 1 0=0A> 0x=
3100 NCOW NNC wired default -=0A> 0x7fffff3db000 0x7fffff3fb000 1 0 0xfffff=
f002dbb4360 rw- 1 0=0A> 0x3100 NCOW NNC not-wired default -=0A> 0x7fffff5dc=
000 0x7fffff5fc000 1 0 0xffffff002dc66af8 rw- 1 0=0A> 0x3100 NCOW NNC not-w=
ired default -=0A> 0x7fffff7dd000 0x7fffff7fd000 1 0 0xffffff002dbea438 rw-=
 1 0=0A> 0x3100 NCOW NNC not-wired default -=0A> 0x7fffff9de000 0x7fffff9fe=
000 1 0 0xffffff002dd7fd80 rw- 1 0=0A> 0x3100 NCOW NNC not-wired default -=
=0A> 0x7fffffbdf000 0x7fffffbff000 1 0 0xffffff002dbe9438 rw- 1 0=0A> 0x310=
0 NCOW NNC not-wired default -=0A> 0x7fffffbff000 0x7fffffc00000 0 0 0 --- =
0 0 0x0 NCOW NNC=0A> not-wired none -=0A> 0x7ffffffe0000 0x800000000000 32 =
0 0xffffff002dd125e8 rwx 1=0A> 0 0x3100 NCOW NNC wired default -=0A> =0A> -=
-- On Fri, 4/13/12, Konstantin Belousov <kostikbel@gmail.com>=0A> wrote:=0A=
> =0A> > From: Konstantin Belousov <kostikbel@gmail.com>=0A> > Subject: Re:=
 mlockall() on freebsd 7.2 + amd64 returns=0A> EAGAIN=0A> > To: "Sushanth R=
ai" <sushanth_rai@yahoo.com>=0A> > Cc: freebsd-hackers@freebsd.org=0A> > Da=
te: Friday, April 13, 2012, 1:11 AM=0A> > On Thu, Apr 12, 2012 at 08:10:26P=
M=0A> > -0700, Sushanth Rai wrote:=0A> > > > =0A> > > > Then it should be f=
ixed in r190885.=0A> > > > =0A> > > =0A> > > Thanks. That works like a char=
m. =0A> > > =0A> > > mlockall() mostly works now. There is still a,=0A> iss=
ue in=0A> > wiring the stacks of multithreaded program when the=0A> program=
=0A> > uses default stack allocation scheme. Thread library=0A> > allocates=
 stack for each thread by calling mmap() and=0A> > sending address and size=
 to be mapped. The kernel=0A> adjusts=0A> > the start address to sgrowsz in=
=A0 vm_map_stack() and=0A> > maps at the adjusted address. But the subseque=
nt wiring=0A> is=0A> > done using the original address, which fails. =0A> >=
 > =0A> > Can you, please provide stand-alone example which=0A> > demostrat=
es the issue ?=0A> > I suspect this should have not changed in HEAD.=0A> >=
=0A> -----Inline Attachment Follows-----=0A> =0A> _________________________=
______________________=0A> freebsd-hackers@freebsd.org=0A> mailing list=0A>=
 http://lists.freebsd.org/mailman/listinfo/freebsd-hackers=0A>; To unsubscri=
be, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1334342788.95842.YahooMailClassic>