Doing zero-copy stuff in drivers, or "is vm_fault_quick_hold_pages() enough" ?

Adrian Chadd adrian at freebsd.org
Tue Mar 3 00:37:14 UTC 2015


On 2 March 2015 at 16:25, Konstantin Belousov <kostikbel at gmail.com> wrote:

>> Ok, but is there a specific time length that this should be?
> Difference between hold and wire is effectively that held pages are
> still kept on the page queues, providing potentially uneccessary work
> for pagedaemon to find them and skip. Wired pages are removed from the
> queues.
>
> This means that holding a page is much cheaper, by the cost of leaving
> slightly more work to the system. Also, holding a page only requires the
> page lock, while wiring contend on the page queue lock, in addition to
> the page lock.

Thanks for the description - that makes things a lot clearer!

>>
>> A DMA operation to a slow device could be up to hundreds of
>> milliseconds; or seconds if things are really backed up.
>>
>> Using wire instead of hold definitely made things work without having
>> the page disappear from underneath it. Oleksander knows more about the
>> details of that.
>
> Page cannot 'disappear'. The only thing which could happen with the
> memory page is reuse, when the page is removed from the previous object
> and re-purposed for some other object, loosing old content.
>
> Your terminology suggests that something unrelated happen.

Yup, and that's what I'm worried about :(




-adrian


More information about the freebsd-current mailing list