agreed. 'ps -a | grep venti' shows the followg after about 15 minutes:

glenda          198    3:04   3:44   104508K Rendez   venti [main]
glenda          199    0:00   0:00   104508K Rendez   venti
glenda          200    0:00   0:00   104508K Sleep    venti
glenda          201    0:00   0:00   104508K Rendez   venti
[icachewriteproc:/dev/sdC0/isect]
glenda          202    4:49   4:23   104508K Rendez   venti [icachewritecoord]
glenda          203    0:00   0:00   104508K Sleep    venti
[delaykickproc icache]
glenda          204    0:23   1:11   104508K Rendez   venti [flushproc]
glenda          205    0:00   0:00   104508K Rendez   venti
[delaykickproc dcache]
glenda          206    0:00   0:00   104508K Rendez   venti
glenda          206    0:00   0:00   104508K Rendez   venti [bloomwriteproc]

once it hits "sync...", load, context, and sycall are pegged in stats;
memory ramps up a bit over the first ~ half minute, but levels out.
For the big three processes, here's everything over 3% in tprof:

:; tprof 198
total: 3040
TEXT 00001000
    ms      %   sym
   480   15.7   _tas
   240    7.8   runthread
   230    7.5   lock
   180    5.9   _threadrendezvous
   170    5.5   rendezvous
   140    4.6   qlock
   130    4.2   _sched
   110    3.6   trace
   110    3.6   _threadready
   100    3.2   waitforkick
   100    3.2   icachewritecoord

:; tprof 202
total: 7570
TEXT 00001000
    ms      %   sym
  1090   14.3   _tas
   520    6.8   runthread
   500    6.6   rendezvous
   490    6.4   _threadrendezvous
   490    6.4   lock
   290    3.8   icachewritecoord
   280    3.6   _sched
   260    3.4   qlock
   240    3.1   trace
   230    3.0   _threadready

:; tprof 204
total: 14040
TEXT 00001000
    ms      %   sym
  2020   14.3   _tas
  1010    7.1   _threadrendezvous
   950    6.7   rendezvous
   930    6.6   runthread
   920    6.5   lock
   590    4.2   icachewritecoord
   540    3.8   trace
   510    3.6   _sched
   470    3.3   _threadready

tight loops with most of its time in the thread library. poking around
with acid now to get more info.

On 9/28/07, Kernel Panic <[EMAIL PROTECTED]> wrote:
> Russ Cox wrote:
>
> >dma is worth around 10x, certainly less than 50.
> >i agree that your venti server is taking a very long
> >time to come back.  i reboot mine all the time
> >and don't have this problem.
> >
> >i am at a loss for what could be taking it so long.
> >it's probably not going to hurt any to stop it.
> >it could take forever -- maybe it's looping!
> >
> >
> It is...
>
> while(1){
> proc main: kick icache
> work icachewritecoord: start
> proc icachewritecoord: icachewritecoord kick dcache
> work flushproc: start
> proc flushproc: build t=131
> proc flushproc: writeblocks t=991
> proc flushproc: writeblocks.1 t=1632
> proc flushproc: writeblocks.2 t=2296
> proc flushproc: writeblocks.3 t=2944
> proc flushproc: undirty.4 t=3564
> work flushproc: finish
> proc icachewritecoord: kick dcache
> proc icachewritecoord: icachewritecoord kicked dcache
> proc icachewritecoord: icachewritecoord start flush
> proc icachewritecoord: icachedirty enter
> proc icachewritecoord: icachedirty exit
> proc icachewritecoord: icachewritecoord sleep
> proc main: kick icache
> }
>
> the main proc loops in icachealloc():
>
> while(icache.ndirty == icache.entries){
>       /*
>        * This is a bit suspect.  Kickicache will wake up the
>        * icachewritecoord, but if all the index entries are for
>        * unflushed disk blocks, icachewritecoord won't be
>        * able to do much.  It always rewakes everyone when
>        * it thinks it is done, though, so at least we'll go around
>        * the while loop again.  Also, if icachewritecoord sees
>        * that the disk state hasn't change at all since the last
>        * time around, it kicks the disk.  This needs to be
>        * rethought, but it shouldn't deadlock anymore.
>        */
>       kickicache();
>       rsleep(&icache.full);
> }
>
> but icache.ndirty never changes... so it hangs forever in
> "sync..." because it cant allocate ientries.
>
> >when you manage to boot in other means,
> >it would be nice to see what ps -a|grep venti
> >says.  venti sets its proc args that show up in ps -a
> >to tell you what each proc does.
> >
> >the new venti is very careful both about the
> >consistency of what is stored on disk and about
> >recovering quickly after a disk failure
> >(there's not a lot to do -- just pick up the unindexed
> >arena entries from the arena tocs and toss them
> >back into the index write buffer where they were
> >when you restarted the system).
> >
> >what you're describing could happen if you were
> >running a new venti (which buffers index updates
> >quite aggressively) and then on reboot managed
> >to start an old venti (which would then process the
> >unindexed new blocks one at a time instead of
> >buffering the updates, with about 3 seeks per block).
> >
> >without more information i'm afraid i have no good answers.
> >
> >russ
> >
> >
> >
>
>

Reply via email to