Remove b_thawed from arc_buf_hdr_t

The code involving b_thawed appears to be dead, so lets discard it.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Make dmu_sync_arg_cache

Signed-off-by: Richard Yao <ryao@gentoo.org>
Make zio_gang_node_t cache

Signed-off-by: Richard Yao <ryao@gentoo.org>
User namespace compatibility

Signed-off-by: Richard Yao <ryao@gentoo.org>
Move ARC allocations to slab caches

Signed-off-by: Richard Yao <ryao@gentoo.org>
Illumos #3603, #3604: bobj improvements

3603 panic from bpobj_enqueue_subobj()
3604 zdb should print bpobjs more verbosely
3871 GCC 4.5.3 does not like issue 3604 patch

https://www.illumos.org/issues/3603
https://www.illumos.org/issues/3604
https://www.illumos.org/issues/3871

Reviewed by: Henrik Mattson <henrik.mattson@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Dan McDonald <danmcd@nexenta.com>
Ported-by: Richard Yao <ryao@gentoo.org>

Note that the patch from Illumos issue 3871 is not accepted into Illumos
at the time of this writing. It is something that I wrote when porting
this. Documentation is in the Illumos issue.
Make SLAB caches for dmu_tx_* operations

Signed-off-by: Richard Yao <ryao@gentoo.org>
Make slab cache for rl_t

Signed-off-by: Richard Yao <ryao@gentoo.org>
Simplify reclaim

On Illumos, kswapd and arc_reclaim_thread share responsibility for
memory reclaimation. arc_reclaim_thread will attempt to keep ahead of
system memory needs and kswapd will signal it as needed. On Linux, a
thread that needs memory when there is none available will immediately
begin "direct reclaim", which means that it will try freeing memory
itself.

This poses a few problems. First, it is possible for hundreds of threads
to enter direct reclaim. Unfortunately, only one can reclaim from ARC at
a time. This means that one will reap while the others will be told to
do other things. If we enter a state where ARC is the only source of
memory available on the system, then we effectively have a fork bomb
where all of the other reclaim threads will starve reclaimation from ARC
of CPU time.

Additionally, it is possible for ARC and Linux to have different ideas
of when a system is low on memory. If Linux thinks it is out of memory
and ARC disagrees, we will have a situation where arc_reclaim_thread
spins.

This patch attempts to address the first issue by signalling
arc_reclaim_thread to enter reclaim and blocking until
eitheri signalled by arc_reclaim_thread 1 second passes. Resuming after
1 second is necessary to resolve a race between arc_reclaim_thread doing
its broadcast and sleeping. A previous patch had empirical success in
resolving the second by moving primary responsibility for ARC memory
reclaimation to the ARC shrinker callback. This patch moves all ARC
memory reclaimation duties to arc_reclaim_thread, which should have a
similar effect.

Signed-off-by: Richard Yao <ryao@gentoo.org>