linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Valmiki <valmikibow@gmail.com>
To: John Hubbard <jhubbard@nvidia.com>,
	Ralph Campbell <rcampbell@nvidia.com>,
	linux-mm@kvack.org
Cc: jglisse@redhat.com
Subject: Re: Regarding HMM
Date: Sun, 23 Aug 2020 18:51:35 +0530	[thread overview]
Message-ID: <c1e7786a-76d8-93d6-b7db-91355d206920@gmail.com> (raw)
In-Reply-To: <9af4d56c-61f5-9367-28bf-b6f1236e90fa@nvidia.com>

On 19-08-2020 02:05 am, John Hubbard wrote:
> On 8/18/20 10:06 AM, Ralph Campbell wrote:
>>
>> On 8/18/20 12:15 AM, Valmiki wrote:
>>> Hi All,
>>>
>>> Im trying to understand heterogeneous memory management, i have 
>>> following doubts.
>>>
>>> If HMM is being used we dont have to use DMA controller on device for 
>>> memory transfers ?
> 
> Hi,
> 
> Nothing about HMM either requires or prevents using DMA controllers.
> 
>>> Without DMA if software is managing page faults and migrations, will 
>>> there be any performance impacts ?
>>>
>>> Is HMM targeted for any specific use cases where DMA controller is 
>>> not there on device ?
>>>
>>> Regards,
>>> Valmiki
>>>
>>
>> There are two APIs that are part of "HMM" and are independent of each 
>> other.
>>
>> hmm_range_fault() is for getting the physical address of a system 
>> resident memory page that
>> a device can map but is not pinned in the usual way I/O increases the 
>> page reference count
>> to pin the page. The device driver has to handle invalidation 
>> callbacks to remove the device
>> mapping. This lets the device access the page without moving it.
>>
>> migrate_vma_setup(), migrate_vma_pages(), and migrate_vma_finalize() 
>> are used by the device
>> driver to migrate data to device private memory. After migration, the 
>> system memory is freed
>> and the CPU page table holds an invalid PTE that points to the device 
>> private struct page
>> (similar to a swap PTE). If the CPU process faults on that address, 
>> there is a callback
>> to the driver to migrate it back to system memory. This is where 
>> device DMA engines can
>> be used to copy data to/from system memory and device private memory.
>>
>> The use case for the above is to be able to run code such as OpenCL on 
>> GPUs and CPUs using
>> the same virtual addresses without having to call special memory 
>> allocators.
>> In other words, just use mmap() and malloc() and not clSVMAlloc().
>>
>> There is a performance consideration here. If the GPU accesses the 
>> data over PCIe to
>> system memory, there is much less bandwidth than accessing local GPU 
>> memory. If the
>> data is to be accessed/used many times, it can be more efficient to 
>> migrate the data
>> to local GPU memory. If the data is only accessed a few times, then it 
>> is probably
>> more efficient to map system memory.
>>
> 
> Ralph, that's a good write-up!
> 
> Valmiki, did you already read Documentation/vm/hmm.rst, before posting 
> your question?
> 
> It's OK to say "no"--I'm not asking in order to criticize, but in order 
> to calibrate
> the documentation. Because, we should consider merging in Ralph's 
> write-up above
> into hmm.rst, depending on if it helps (which I expect it does, but I'm 
> tainted by
> reading hmm.rst too many times and now I can't see what might be missing).
> 
> Any time someone new tries to understand the system, it's an opportunity 
> to "unit test"
> the documentation. Ideally, hmm.rst would answer many of a first-time 
> reader's questions,
> that's where we'd like to end up.
> 
> 
> thanks,
Hi John, i did give initial reading, but Ralph details on migration_* 
API's above helped a lot to clarify things better, yes adding above 
details into hmm.rst would help beginners.

Regards,
Valmiki


  reply	other threads:[~2020-08-23 13:21 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-18  7:15 Valmiki
2020-08-18 17:06 ` Ralph Campbell
2020-08-18 20:35   ` John Hubbard
2020-08-23 13:21     ` Valmiki [this message]
2020-08-23 13:08   ` Valmiki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c1e7786a-76d8-93d6-b7db-91355d206920@gmail.com \
    --to=valmikibow@gmail.com \
    --cc=jglisse@redhat.com \
    --cc=jhubbard@nvidia.com \
    --cc=linux-mm@kvack.org \
    --cc=rcampbell@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox