m_tag, malloc vs uma
Karim Fodil-Lemelin
kfl at xiplink.com
Sat Apr 11 12:56:37 PDT 2009
Robert Watson wrote:
> On Fri, 10 Apr 2009, Karim Fodil-Lemelin wrote:
>
>> Thank you for the answer, clear and concise. I asked the question
>> because I had modified pf_get_mtag() to use uma directly in the hope
>> that it would be faster then calling malloc. But since pf_mtag is
>> 20bytes, malloc will end up using a fixed 32bytes zone and I
>> shouldn't expect much speed gain from using something like (except
>> some savings from not having to select the 32bytes zone):
>
> There is another small overhead, the critical section used to protect
> the consistency of the per-CPU malloc type alloc and free counters,
> but it's also very small.
>
> I think it would be desirable to make a change to more flexible m_tag
> types for 8.0, but I'm not sure I have time to implement/test it. Is
> this something you might be interested in working on? I'm thinking of
> basically replacing the m_tag_free pointer with a pointer to a small
> vector of operations, possibly something along these lines:
>
> struct m_tag_ops {
> void (*m_tag_free)(struct m_tag *);
> struct m_tag (*m_tag_copy)(struct m_tag *);
> };
>
> If the m_tag_ops pointer is NULL, we go with today's default
> (requiring minimal change of existing consumers). I'm not sure if
> there are any other function pointers we'd need at this point?
Is the m_tag_copy an 'overloaded' function for the current m_tag_copy or
something else? Now it could also be interesting to have another
function pointer to overload m_tag_alloc to give more control over which
zone the user wants its tags from (ex: pf_mtag ...). The interest is
there not sure if the schedule will allow it but that depends if the new
m_tag designs allows me to squeeze some performances in.
Karim.
More information about the freebsd-net
mailing list