4b3fae2c br Dec. 8, 2016, 4:28 p.m.
Sponsored by:	DARPA, AFRL
cgit ViewVC
9373759d mav Dec. 8, 2016, 3:58 p.m.
Original commit "7090 zfs should improve allocation order" declares alloc
queue sorted by time and offset.  But in practice io_offset is always zero,
so sorting happened only by time, while order of writes with equal time was
completely random.  On Illumos this did not affected much thanks to using
high resolution timestamps.  On FreeBSD due to using much faster but low
resolution timestamps it caused bad data placement on disks, affecting
further read performance.

This change switches zio_timestamp_compare() from comparing uninitialized
io_offset to really populated io_bookmark values.  I haven't decided yet
what to do with timestampts, but on simple tests this change gives the
same peformance results by just making code to work as declared.

MFC after:	1 week
cgit ViewVC
29edde94 kib Dec. 8, 2016, 11:39 a.m.
In particular, the fault access type is accounted for when the
aperture page is moved to GTT domain.  On the other hand, the current
pager structure is left intact, most important, only one page is
instantiated per populate call.

Reviewed by:	alc
Sponsored by:	The FreeBSD Foundation
MFC after:	3 weeks
cgit ViewVC
ed01d989 kib Dec. 8, 2016, 11:35 a.m.
It allows to provide configurable agressive prefaulting and useful
hints to page daemon about memory allocations, on faults for pages
managed by phys pager.  In fact, this implementation is superior to
the MAP_SHARED_PHYS hack from my Postgresql paper, while giving
similar benefits of reducing the page faults numbers on SysV shared
memory mappings.

Reviewed by:	alc
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	3 weeks
cgit ViewVC
c42b43a0 kib Dec. 8, 2016, 11:26 a.m.
with cdev_pg_populate() to provide device drivers access to it.  It
gives drivers fine control of the pages ownership and allows drivers
to implement arbitrary prefault policies.

The populate method is called on a page fault and is supposed to
populate the vm object with the page at the fault location and some
amount of pages around it, at pager's discretion.  VM provides the
pager with the hints about current range of the object mapping, to
avoid instantiation of immediately unused pages, if pager decides so.
Also, VM passes the fault type and map entry protection to the pager,
allowing it to force the optimal required ownership of the mapped
pages.

Installed pages must contiguously fill the returned region, be fully
valid and exclusively busied.  Of course, the pages must be compatible
with the object' type.

After populate() successfully returned, VM fault handler installs as
many instantiated pages into the process page tables as it sees
reasonable, while still obeying the correct semantic for COW and vm
map locking.

The method is opt-in, pager sets OBJ_POPULATE flag to indicate that
the method can be called.  If pager' vm objects can be shadowed, pager
must implement the traditional getpages() method in addition to the
populate().  Populate() might fall back to the getpages() on per-call
basis as well, by returning VM_PAGER_BAD error code.

For now for device pagers, the populate() method is only allowed to be
used by the managed device pagers, but the limitation is only made
because there is no unmanaged fault handlers which could use it right
now.

KPI designed together with, and reviewed by:	alc
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	3 weeks
cgit ViewVC
dc5401d2 kib Dec. 8, 2016, 10:29 a.m.
Reviewed by:	alc
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
cgit ViewVC
272cc3c4 kib Dec. 8, 2016, 10:28 a.m.
Reviewed by:	alc
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
cgit ViewVC
4869f594 adrian Dec. 8, 2016, 7:57 a.m.
36c8d0de adrian Dec. 8, 2016, 7:56 a.m.
pushed back up into net80211.
cgit ViewVC
096d83fe sephe Dec. 8, 2016, 5:37 a.m.
MFC after:	1 week
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D8723
cgit ViewVC
98cb13b6 sephe Dec. 8, 2016, 5:15 a.m.
MFC after:	1 week
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D8686
cgit ViewVC
e94965d8 alc Dec. 8, 2016, 4:29 a.m.
contain a vm_page_t at the specified index.  However, with this
change, vm_radix_remove() no longer panics.  Instead, it returns NULL
if there is no vm_page_t at the specified index.  Otherwise, it
returns the vm_page_t.  The motivation for this change is that it
simplifies the use of radix tries in the amd64, arm64, and i386 pmap
implementations.  Instead of performing a lookup before every remove,
the pmap can simply perform the remove.

Reviewed by:	kib, markj
Differential Revision:	https://reviews.freebsd.org/D8708
cgit ViewVC
3c606f67 markj Dec. 7, 2016, 11:38 p.m.
MFC after:	1 week
Sponsored by:	Dell EMC Isilon
cgit ViewVC
058f5a9a markj Dec. 7, 2016, 11:37 p.m.
MFC after:	1 week
Sponsored by:	Dell EMC Isilon
cgit ViewVC
6b91eae9 markj Dec. 7, 2016, 11:36 p.m.
MFC after:	1 week
Sponsored by:	Dell EMC Isilon
cgit ViewVC