Group, Their seems to be three large single allocation sections within the zfs code, local buf_init(), that perform KMEM_NOSLEEPs. Based on failure they drop to 1/2 of value and retry until succeed.
Would't this type of logic force a low memory condition if they were set too high? IMO, this would allow these three allocs to consume basicly all of kmem alloc'able memory and generate no warning that NOSLEEP memory allocations had failed. The single kmem_sleeps could then consume the rest with large mem allocs and forced reallocations. Thus, IMO, since they originate at a single location, return based on failure, generate a BAD CONFIGURATION message, and retry with a medium amount of memory consumption, and if that failed, retry with a low ZFS memory consumption mode. On the other had if one wishes to repeat the failed allocations without medium or low memory set configs, dropping to a conservative 1/8th each time could also prevent low memory conditions.. Mitchell Erblich ------------------