Re: [PATCH] mm: fix up a spurious page fault whenever it happens
From: Rik van Riel <hidden>
Date: 2013-05-23 12:20:09
Also in:
lkml
On 05/23/2013 04:07 AM, Stanislav Meduna wrote:
On 22.05.2013 20:43, Rik van Riel wrote:quoted
quoted
Some CPUs have had errata when it comes to flushing large pages that have been split into small pages by hardware, e.g. due to MTRR conflicts. In that case, fragments of the large page may have been left in the TLB.Can I somehow find if this is the case? The memory mapping for the failing process has two regions slightly larger than 4 MB - code and heap. The process also does not access any funny memory regions from userspace - it is basically networking (both TCP/IP and raw sockets) and crunching of the data received. No mmapped devices or something like that.quoted
static inline void __native_flush_tlb_single(unsigned long addr) { __flush_tlb(); } This on top of the other two patches.It did not crash overnight, but it also does not show any minor fault counted for the threads, so I'm afraid the situation just did not happen - there should be at least one visible in the ps -o min_flt output, right?
If all the page faults are done by he main thread, and the TLB gets properly flushed now, the other threads might not see minor faults.
I will give it some more testing time.
That is a good idea. Now to figure out how we properly fix this issue in the kernel... We can add a bit in the architecture bits that we use to check against other CPU and system errata, and conditionally flush the whole TLB from __native_flush_tlb_single(). The question is, how do we identify what CPUs need the extra flushing? And in what circumstances do they require it?