On 10/15/13 1:21 AM, Matthew Ahrens wrote: > I'm not super familiar with the VM subsystem. Can you explain where > physical memory fragmentation comes into play? It looks to me like > segkmem_xalloc() will call segkmem_page_create() (it's the > page_create_func), which calls page_create_va(), which looks for N > physical pages, but they need not be contiguous.
Interesting, then disregard that part of my original hypothesis. > The stack trace from the message you mentioned looks like it hasn't > gotten to allocating physical memory yet. It looks like it is trying to > allocate virtual address space (segkmem_xalloc() calling vmem_alloc()). > Which would seem to indicate that the kernel's virtual address space > *is* very fragmented, even on 64-bit. This is a little surprising to > me, but as I mentioned I'm not a VM expert. And I'm even less so. In any case, if allocation of large contiguous memory chunks isn't a problem, then we can simply scrap the 2D hash table business and simply change the KM_NOSLEEP into a KM_SLEEP. In that the case, however, I have to ask why the original author put the retry mechanism in with the pressure valve (halving the memory request size each iteration) in the first place... -- Saso _______________________________________________ developer mailing list [email protected] http://lists.open-zfs.org/mailman/listinfo/developer
