head -r344018 powerpc64 variant on Powermac G5 (2 sockets, 2 cores each): [*buffer arena] shows up more . . .?

Mark Millard marklmi at yahoo.com
Thu Mar 7 00:39:43 UTC 2019



On 2019-Mar-6, at 13:19, Justin Hibbits <chmeeedalf at gmail.com> wrote:

> On Mon, 4 Mar 2019 19:43:09 -0800
> Mark Millard via freebsd-ppc <freebsd-ppc at freebsd.org> wrote:
> 
>> [It is possible that the following is tied to my hack to
>> avoid threads ending up stuck-sleeping. But I ask about
>> an alternative that I see in the code.]
>> 
>> Context: using the modern powerpc64 VM_MAX_KERNEL_ADDRESS
>> and using usefdt=1 on an old Powermac G5 (2 sockets, 2 cores
>> each). Hacks are in use to provide fairly reliable booting
>> and to avoid threads getting stuck sleeping.
>> 
>> Before the modern VM_MAX_KERNEL_ADDRESS figure there were only
>> 2 or 3 bufspacedaemon-* threads as I remember. Now there are 8
>> (plus bufdaemon and its worker), for example:
>> 
>> root         23   0.0  0.0     0   288  -  DL   15:48     0:00.39
>> [bufdaemon/bufdaemon] root         23   0.0  0.0     0   288  -  DL
>> 15:48     0:00.05 [bufdaemon/bufspaced] root         23   0.0
>> 0.0     0   288  -  DL   15:48     0:00.05 [bufdaemon/bufspaced]
>> root         23   0.0  0.0     0   288  -  DL   15:48     0:00.05
>> [bufdaemon/bufspaced] root         23   0.0  0.0     0   288  -  DL
>> 15:48     0:00.05 [bufdaemon/bufspaced] root         23   0.0
>> 0.0     0   288  -  DL   15:48     0:00.05 [bufdaemon/bufspaced]
>> root         23   0.0  0.0     0   288  -  DL   15:48     0:00.07
>> [bufdaemon/bufspaced] root         23   0.0  0.0     0   288  -  DL
>> 15:48     0:00.05 [bufdaemon/bufspaced] root         23   0.0
>> 0.0     0   288  -  DL   15:48     0:00.56 [bufdaemon// worker]
>> 
>> I'm sometimes seeing processes showing [*buffer arena] that
>> seemed to wait for a fairly long time with that status, not
>> something I'd seen historically for those same types of
>> processes for a similar overall load (not much). During such
>> times trying to create processes to look around at what is
>> going on seems to also wait. (Probably with the same status?)
>> 
> 
> Hi Mark,
> 
> Can you try the attached patch?  It might be overkill in the
> synchronization, and I might be using the wrong barriers to be
> considered correct, but I think this should narrow the race down, and
> synchronize the timebases to within a very small margin.  The real
> correct fix would be to suspend the timebase on all cores, which is
> feasible (there's a GPIO for the G4s, and i2c for G5s), but that's a
> non-trivial extra work.
> 
> Be warned, I haven't tested it, I've only compiled it (I don't have a
> G5 to test with anymore).
> 

Sure, I'll try it when the G5 is again available: it is doing
a time consuming build.

I do see one possible oddity: tracing another
platform_smp_timebase_sync use in the code . . .

DEVMETHOD(cpufreq_drv_set,      pmufreq_set)

static int
pmufreq_set(device_t dev, const struct cf_setting *set)
{
. . .        
        error = pmu_set_speed(speed_sel);
. . .
}

int
pmu_set_speed(int low_speed)
{
. . .
        platform_sleep();
. . .
}

PLATFORMMETHOD(platform_sleep,          powermac_sleep),

void
powermac_sleep(platform_t platform)
{
        
        *(unsigned long *)0x80 = 0x100;
        cpu_sleep();
}

void
cpu_sleep()
{
. . .
        platform_smp_timebase_sync(timebase, 0);
. . .
}

PLATFORMMETHOD(platform_smp_timebase_sync, powermac_smp_timebase_sync),

The issue:

I do not see any matching platform_smp_timebase_sync(timebase, 1)
or other CPUs doing a powermac_smp_timebase_sync in this sequence.

(If this makes testing the patch inappropriate, let me know.)

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-ppc mailing list