On Tue, Sep 20, 2016 at 10:20:53PM +0300, Slawa Olhovchenkov wrote:
> On Tue, Sep 20, 2016 at 09:52:44AM +0300, Slawa Olhovchenkov wrote:
> 
> > On Mon, Sep 19, 2016 at 06:05:46PM -0700, John Baldwin wrote:
> > 
> > > > > If this panics, then vmspace_switch_aio() is not working for
> > > > > some reason.
> > > > 
> > > > I am try using next DTrace script:
> > > > ====
> > > > #pragma D option dynvarsize=64m
> > > > 
> > > > int req[struct vmspace  *, void *];
> > > > self int trace;
> > > > 
> > > > syscall:freebsd:aio_read:entry
> > > > {
> > > >         this->aio = *(struct aiocb *)copyin(arg0, sizeof(struct aiocb));
> > > >         req[curthread->td_proc->p_vmspace, this->aio.aio_buf] = 
> > > > curthread->td_proc->p_pid; 
> > > > }
> > > > 
> > > > fbt:kernel:aio_process_rw:entry
> > > > {
> > > >         self->job = args[0];
> > > >         self->trace = 1;
> > > > }
> > > > 
> > > > fbt:kernel:aio_process_rw:return
> > > > /self->trace/
> > > > {
> > > >         req[self->job->userproc->p_vmspace, self->job->uaiocb.aio_buf] 
> > > > = 0;
> > > >         self->job = 0;
> > > >         self->trace = 0;
> > > > }
> > > > 
> > > > fbt:kernel:vn_io_fault:entry
> > > > /self->trace && !req[curthread->td_proc->p_vmspace, 
> > > > args[1]->uio_iov[0].iov_base]/
> > > > {
> > > >         this->buf = args[1]->uio_iov[0].iov_base;
> > > >         printf("%Y vn_io_fault %p:%p pid %d\n", walltimestamp, 
> > > > curthread->td_proc->p_vmspace, this->buf, 
> > > > req[curthread->td_proc->p_vmspace, this->buf]);
> > > > }
> > > > ===
> > > > 
> > > > And don't got any messages near nginx core dump.
> > > > What I can check next?
> > > > May be check context/address space switch for kernel process?
> > > 
> > > Which CPU are you using?
> > 
> > CPU: Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz (2000.04-MHz K8-class CPU)
Is this sandy bridge ?  Show me first 100 lines of the verbose dmesg,
I want to see cpu features lines.  In particular, does you CPU support
the INVPCID feature.

Also you may show me the 'sysctl vm.pmap' output.

> > 
> > > Perhaps try disabling PCID support (I think vm.pmap.pcid_enabled=0 from
> > > loader prompt or loader.conf)?  (Wondering if pmap_activate() is somehow 
> > > not switching)
> 
> I am need some more time to test (day or two), but now this is like
> workaround/solution: 12h runtime and peak hour w/o nginx crash.
> (vm.pmap.pcid_enabled=0 in loader.conf).

Please try this variation of the previous patch.

diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index a23468e..f754652 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -481,6 +481,7 @@ vmspace_switch_aio(struct vmspace *newvm)
        if (oldvm == newvm)
                return;
 
+       spinlock_enter();
        /*
         * Point to the new address space and refer to it.
         */
@@ -489,6 +490,7 @@ vmspace_switch_aio(struct vmspace *newvm)
 
        /* Activate the new mapping. */
        pmap_activate(curthread);
+       spinlock_exit();
 
        /* Remove the daemon's reference to the old address space. */
        KASSERT(oldvm->vm_refcnt > 1,
_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to