On 2015/12/18 3:43, Luck, Tony wrote:
As Tony requested, we may need a knob to stop a fallback in "movable->normal", 
later.


If the mirrored memory is small and the other is large,
I think we can both enable "non-mirrored -> normal" and "normal -> 
non-mirrored".

Size of mirrored memory can be configured by software(EFI var).
So, having both is just overkill and normal->non-mirroed fallback is 
meaningless considering
what the feature want to guarantee.

In the original removable usage we wanted to guarantee that Linux did not 
allocate any
kernel objects in removable memory - because that would prevent later removal 
of that
memory.

Mirror case is the same - we don't want to allocate kernel structures in 
non-mirrored memory
because an uncorrectable error in one of them would crash the system.

But I think some users might like some flexibility here.  If the system doesn't 
have enough
memory for the kernel (non-movable or mirrored), then it seems odd to end up 
crashing
the system at the point of memory exhaustion (a likely result ... the kernel 
can try to reclaim
some pages from SLAB, but that might only return a few pages, if the shortage 
continues
the system will perform poorly and eventually fail).

The whole point of removable memory or mirrored memory is to provide better 
availability.

I'd vote for a mode where running out of memory for kernel results in a

    warn_on_once("Ran out of mirrored/non-removable memory for kernel - now 
allocating from all zones\n")

because I think most people would like the system to stay up rather than worry 
about some future problem that may never happen.

Hmm...like this ?
      sysctl.vm.fallback_mirror_memory = 0  // never fallback  # default.
      sysctl.vm.fallback_mirror_memory = 1  // the user memory may be allocated 
from mirrored zone.
      sysctl.vm.fallback_mirror_memory = 2  // usually kernel allocates memory 
from mirrored zone before OOM.
      sysctl.vm.fallback_mirror_memory = 3  // 1+2

However I believe my customer's choice is always 0, above implementation can be 
done in a clean way.
(adding a flag to zones (mirrored or not) and controlling fallback zonelist 
walk.)

BTW, we need this Taku's patch to make a progress. I think other devs should be 
done in another
development cycle. What does he need to get your Acks ?

Thanks,
-Kame




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to