Page MenuHomeFreeBSD

amd64: compare TLB shootdown target to all_cpus

Authored by gallatin on Mon, Jan 11, 9:24 PM.



On amd64, the pmap code passes all_cpus to smp_targeted_tlb_shootdown() when unmapping from the kernel map. This function has an optimized path to send ipi's to all but itself, which it intends to do when the target is all cpus. However, we need to compare the target cpu mask with all_cpus(), rather than using CPU_ISFULLSET(). Comparing with CPU_ISFULLSET() will only work when we have MAXCPU cpus active in the system, otherwise, we'll be sending repeated ipis, rather than a single ipi to all cpus but ourselves.

Fixing this should reduce the time spent in native_lapic_ipi_wait as we will be sending ipis in parallel, rather than one-by-one. This result is confirmed by dtrace

Diff Detail

R10 FreeBSD src repository
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

gallatin created this revision.
gallatin added reviewers: kib, jhb, markj, jtl.
kib added a reviewer: alc.
This revision is now accepted and ready to land.Mon, Jan 11, 9:31 PM

i386 should probably get the same patch?

i386 should probably get the same patch?

Possibly, but I don't have any i386 to test on, so I'm reluctant to touch it.