Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 Jun 2010 19:09:40 +0300
From:      Alexander Motin <mav@FreeBSD.org>
To:        Andriy Gapon <avg@freebsd.org>
Cc:        freebsd-acpi@freebsd.org
Subject:   Re: cpufreq_curr_sysctl: memory allocation
Message-ID:  <4C1E3D44.6020708@FreeBSD.org>
In-Reply-To: <4C1E3AE9.3020505@freebsd.org>
References:  <4C1E3AE9.3020505@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Andriy Gapon wrote:
> I noticed that cpufreq_curr_sysctl performs a substantial memory allocation and
> deallocation on each call.  Its size is CF_MAX_LEVELS * sizeof(*levels), which
> is ~24KB.  This happens even for read-only calls to just query current level.
> And such calls happen quite frequently when powerd is running.

Worse is that it not just consumes time, but causes a bunch or TLB flush
IPIs on free(). For read-only call it doesn't even needs CF_MAX_LEVELS *
sizeof(*levels). sizeof(*levels) seems should be enough there. May be
then it fits into some existing UMA zone, minimizing penalty.

> I think that this is an unnecessary and avoidable load for VM system.
> Couldn't a buffer be preallocated in sc and re-used for the calls?
> Even if not, for some reason, then wouldn't it be better to have a dedicated uma
> zone for that rather than doing malloc+free?

Dedicated rarely used UMA zone may eat much more memory then it is
needed on SMP.

-- 
Alexander Motin



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