From: Jike Song <jike.song@intel.com>
To: Kirti Wankhede <kwankhede@nvidia.com>
Cc: "Tian, Kevin" <kevin.tian@intel.com>,
Alex Williamson <alex.williamson@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"kraxel@redhat.com" <kraxel@redhat.com>,
"cjia@nvidia.com" <cjia@nvidia.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Ruan, Shuai" <shuai.ruan@intel.com>,
"Lv, Zhiyuan" <zhiyuan.lv@intel.com>
Subject: Re: [RFC PATCH v3 1/3] vGPU Core driver
Date: Mon, 09 May 2016 20:12:15 +0800 [thread overview]
Message-ID: <57307E9F.30203@intel.com> (raw)
In-Reply-To: <59e8f3d0-da40-4ba1-15c5-9fbfd075232f@nvidia.com>
On 05/07/2016 12:16 AM, Kirti Wankhede wrote:
>
>
> On 5/6/2016 5:44 PM, Jike Song wrote:
>> On 05/05/2016 05:06 PM, Tian, Kevin wrote:
>>>> From: Kirti Wankhede
>>>>
>>>> >> + * @validate_map_request: Validate remap pfn request
>>>> >> + * @vdev: vgpu device structure
>>>> >> + * @virtaddr: target user address to start at
>>>> >> + * @pfn: physical address of kernel memory, GPU
>>>> >> + * driver can change if required.
>>>> >> + * @size: size of map area, GPU driver can change
>>>> >> + * the size of map area if desired.
>>>> >> + * @prot: page protection flags for this mapping,
>>>> >> + * GPU driver can change, if required.
>>>> >> + * Returns integer: success (0) or error (< 0)
>>>> >
>>>> > Was not at all clear to me what this did until I got to patch 2, this
>>>> > is actually providing the fault handling for mmap'ing a vGPU mmio BAR.
>>>> > Needs a better name or better description.
>>>> >
>>>>
>>>> If say VMM mmap whole BAR1 of GPU, say 128MB, so fault would occur when
>>>> BAR1 is tried to access then the size is calculated as:
>>>> req_size = vma->vm_end - virtaddr
>> Hi Kirti,
>>
>> virtaddr is the faulted one, vma->vm_end the vaddr of the mmap-ed 128MB BAR1?
>>
>> Would you elaborate why (vm_end - fault_addr) results the requested size?
>>
>>
>
> If first access is at start address of mmaped address, fault_addr is
> vma->vm_start. Then (vm_end - vm_start) is the size mmapped region.
>
> req_size should not exceed (vm_end - vm_start).
>
[Thanks for the kind explanation, I spent some time to dig & recall the details]
So this consists of two checks:
1) vm_end >= vm_start
2) fault_addr >= vm_start && fault_addr <= vm_end
>>>> Since GPU is being shared by multiple vGPUs, GPU driver might not remap
>>>> whole BAR1 for only one vGPU device, so would prefer, say map one page
>>>> at a time. GPU driver returns PAGE_SIZE. This is used by
>>>> remap_pfn_range(). Now on next access to BAR1 other than that page, we
>>>> will again get a fault().
>>>> As the name says this call is to validate from GPU driver for the size
>>>> and prot of map area. GPU driver can change size and prot for this map area.
>>
>> If I understand correctly, you are trying to share a physical BAR among
>> multiple vGPUs, by mapping a single pfn each time, when fault happens?
>>
>
> Yes.
>
Thanks.
For the vma with a vm_ops, and each time only one pfn to proceed, can
we replace remap_pfn_range with vm_insert_pfn? I had a quick check on
kernel repo, it seems that remap_pfn_range is only called from fops.mmap,
not from vma->vm_ops.fault.
>>>
>>> Currently we don't require such interface for Intel vGPU. Need to think about
>>> its rationale carefully (still not clear to me). Jike, do you have any thought on
>>> this?
>>
>> We need the mmap method of vgpu_device to be implemented, but I was
>> expecting something else, like calling remap_pfn_range() directly from
>> the mmap.
>>
>
> Calling remap_pfn_range directly from mmap means you would like to remap
> pfn for whole BAR1 during mmap, right?
>
> In that case, don't set validate_map_request() and access start of mmap
> address, so that on first access it will do remap_pfn_range() for
> (vm_end - vm_start).
No. I'd like QEMU to be aware that only a *portion* of the physical BAR1
is available for the vGPU, like:
pGPU : 1GB size BAR1
vGPU : 128MB size BAR1
QEMU has the information of the available size for a particular vGPU,
calling mmap() with that.
I'd say that your implementation is nice and flexible, but in order to
ensure whatever level a resource QoS, you have to account it from the
device-model (where validate_map_request is implemented), right?
How about making QEMU be aware that only a portion of MMIO is available?
Would appreciate hearing your opinion on this. Thanks!
> Thanks,
> Kirti
>
--
Thanks,
Jike
WARNING: multiple messages have this Message-ID (diff)
From: Jike Song <jike.song@intel.com>
To: Kirti Wankhede <kwankhede@nvidia.com>
Cc: "Tian, Kevin" <kevin.tian@intel.com>,
Alex Williamson <alex.williamson@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"kraxel@redhat.com" <kraxel@redhat.com>,
"cjia@nvidia.com" <cjia@nvidia.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Ruan, Shuai" <shuai.ruan@intel.com>,
"Lv, Zhiyuan" <zhiyuan.lv@intel.com>
Subject: Re: [Qemu-devel] [RFC PATCH v3 1/3] vGPU Core driver
Date: Mon, 09 May 2016 20:12:15 +0800 [thread overview]
Message-ID: <57307E9F.30203@intel.com> (raw)
In-Reply-To: <59e8f3d0-da40-4ba1-15c5-9fbfd075232f@nvidia.com>
On 05/07/2016 12:16 AM, Kirti Wankhede wrote:
>
>
> On 5/6/2016 5:44 PM, Jike Song wrote:
>> On 05/05/2016 05:06 PM, Tian, Kevin wrote:
>>>> From: Kirti Wankhede
>>>>
>>>> >> + * @validate_map_request: Validate remap pfn request
>>>> >> + * @vdev: vgpu device structure
>>>> >> + * @virtaddr: target user address to start at
>>>> >> + * @pfn: physical address of kernel memory, GPU
>>>> >> + * driver can change if required.
>>>> >> + * @size: size of map area, GPU driver can change
>>>> >> + * the size of map area if desired.
>>>> >> + * @prot: page protection flags for this mapping,
>>>> >> + * GPU driver can change, if required.
>>>> >> + * Returns integer: success (0) or error (< 0)
>>>> >
>>>> > Was not at all clear to me what this did until I got to patch 2, this
>>>> > is actually providing the fault handling for mmap'ing a vGPU mmio BAR.
>>>> > Needs a better name or better description.
>>>> >
>>>>
>>>> If say VMM mmap whole BAR1 of GPU, say 128MB, so fault would occur when
>>>> BAR1 is tried to access then the size is calculated as:
>>>> req_size = vma->vm_end - virtaddr
>> Hi Kirti,
>>
>> virtaddr is the faulted one, vma->vm_end the vaddr of the mmap-ed 128MB BAR1?
>>
>> Would you elaborate why (vm_end - fault_addr) results the requested size?
>>
>>
>
> If first access is at start address of mmaped address, fault_addr is
> vma->vm_start. Then (vm_end - vm_start) is the size mmapped region.
>
> req_size should not exceed (vm_end - vm_start).
>
[Thanks for the kind explanation, I spent some time to dig & recall the details]
So this consists of two checks:
1) vm_end >= vm_start
2) fault_addr >= vm_start && fault_addr <= vm_end
>>>> Since GPU is being shared by multiple vGPUs, GPU driver might not remap
>>>> whole BAR1 for only one vGPU device, so would prefer, say map one page
>>>> at a time. GPU driver returns PAGE_SIZE. This is used by
>>>> remap_pfn_range(). Now on next access to BAR1 other than that page, we
>>>> will again get a fault().
>>>> As the name says this call is to validate from GPU driver for the size
>>>> and prot of map area. GPU driver can change size and prot for this map area.
>>
>> If I understand correctly, you are trying to share a physical BAR among
>> multiple vGPUs, by mapping a single pfn each time, when fault happens?
>>
>
> Yes.
>
Thanks.
For the vma with a vm_ops, and each time only one pfn to proceed, can
we replace remap_pfn_range with vm_insert_pfn? I had a quick check on
kernel repo, it seems that remap_pfn_range is only called from fops.mmap,
not from vma->vm_ops.fault.
>>>
>>> Currently we don't require such interface for Intel vGPU. Need to think about
>>> its rationale carefully (still not clear to me). Jike, do you have any thought on
>>> this?
>>
>> We need the mmap method of vgpu_device to be implemented, but I was
>> expecting something else, like calling remap_pfn_range() directly from
>> the mmap.
>>
>
> Calling remap_pfn_range directly from mmap means you would like to remap
> pfn for whole BAR1 during mmap, right?
>
> In that case, don't set validate_map_request() and access start of mmap
> address, so that on first access it will do remap_pfn_range() for
> (vm_end - vm_start).
No. I'd like QEMU to be aware that only a *portion* of the physical BAR1
is available for the vGPU, like:
pGPU : 1GB size BAR1
vGPU : 128MB size BAR1
QEMU has the information of the available size for a particular vGPU,
calling mmap() with that.
I'd say that your implementation is nice and flexible, but in order to
ensure whatever level a resource QoS, you have to account it from the
device-model (where validate_map_request is implemented), right?
How about making QEMU be aware that only a portion of MMIO is available?
Would appreciate hearing your opinion on this. Thanks!
> Thanks,
> Kirti
>
--
Thanks,
Jike
next prev parent reply other threads:[~2016-05-09 12:12 UTC|newest]
Thread overview: 150+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-02 18:40 [RFC PATCH v3 0/3] Add vGPU support Kirti Wankhede
2016-05-02 18:40 ` [Qemu-devel] " Kirti Wankhede
2016-05-02 18:40 ` [RFC PATCH v3 1/3] vGPU Core driver Kirti Wankhede
2016-05-02 18:40 ` [Qemu-devel] " Kirti Wankhede
2016-05-03 22:43 ` Alex Williamson
2016-05-03 22:43 ` [Qemu-devel] " Alex Williamson
2016-05-04 2:45 ` Tian, Kevin
2016-05-04 2:45 ` [Qemu-devel] " Tian, Kevin
2016-05-04 16:57 ` Alex Williamson
2016-05-04 16:57 ` [Qemu-devel] " Alex Williamson
2016-05-05 8:58 ` Tian, Kevin
2016-05-05 8:58 ` [Qemu-devel] " Tian, Kevin
2016-05-04 2:58 ` Tian, Kevin
2016-05-04 2:58 ` [Qemu-devel] " Tian, Kevin
2016-05-12 8:22 ` Tian, Kevin
2016-05-12 8:22 ` [Qemu-devel] " Tian, Kevin
2016-05-04 13:31 ` Kirti Wankhede
2016-05-04 13:31 ` [Qemu-devel] " Kirti Wankhede
2016-05-05 9:06 ` Tian, Kevin
2016-05-05 9:06 ` [Qemu-devel] " Tian, Kevin
2016-05-05 10:44 ` Kirti Wankhede
2016-05-05 10:44 ` [Qemu-devel] " Kirti Wankhede
2016-05-05 12:07 ` Tian, Kevin
2016-05-05 12:07 ` [Qemu-devel] " Tian, Kevin
2016-05-05 12:57 ` Kirti Wankhede
2016-05-05 12:57 ` [Qemu-devel] " Kirti Wankhede
2016-05-11 6:37 ` Tian, Kevin
2016-05-11 6:37 ` [Qemu-devel] " Tian, Kevin
2016-05-06 12:14 ` Jike Song
2016-05-06 12:14 ` [Qemu-devel] " Jike Song
2016-05-06 16:16 ` Kirti Wankhede
2016-05-06 16:16 ` [Qemu-devel] " Kirti Wankhede
2016-05-09 12:12 ` Jike Song [this message]
2016-05-09 12:12 ` Jike Song
2016-05-02 18:40 ` [RFC PATCH v3 2/3] VFIO driver for vGPU device Kirti Wankhede
2016-05-02 18:40 ` [Qemu-devel] " Kirti Wankhede
2016-05-03 22:43 ` Alex Williamson
2016-05-03 22:43 ` [Qemu-devel] " Alex Williamson
2016-05-04 3:23 ` Tian, Kevin
2016-05-04 3:23 ` [Qemu-devel] " Tian, Kevin
2016-05-04 17:06 ` Alex Williamson
2016-05-04 17:06 ` [Qemu-devel] " Alex Williamson
2016-05-04 21:14 ` Neo Jia
2016-05-04 21:14 ` [Qemu-devel] " Neo Jia
2016-05-05 4:42 ` Kirti Wankhede
2016-05-05 4:42 ` [Qemu-devel] " Kirti Wankhede
2016-05-05 9:24 ` Tian, Kevin
2016-05-05 9:24 ` [Qemu-devel] " Tian, Kevin
2016-05-05 20:27 ` Neo Jia
2016-05-05 20:27 ` [Qemu-devel] " Neo Jia
2016-05-11 6:45 ` Tian, Kevin
2016-05-11 6:45 ` [Qemu-devel] " Tian, Kevin
2016-05-11 20:10 ` Alex Williamson
2016-05-11 20:10 ` [Qemu-devel] " Alex Williamson
2016-05-12 0:59 ` Tian, Kevin
2016-05-12 0:59 ` [Qemu-devel] " Tian, Kevin
2016-05-04 16:25 ` Kirti Wankhede
2016-05-04 16:25 ` Kirti Wankhede
2016-05-02 18:40 ` [RFC PATCH v3 3/3] VFIO Type1 IOMMU change: to support with iommu and without iommu Kirti Wankhede
2016-05-02 18:40 ` [Qemu-devel] " Kirti Wankhede
2016-05-03 10:40 ` Jike Song
2016-05-03 10:40 ` [Qemu-devel] " Jike Song
2016-05-03 22:43 ` Alex Williamson
2016-05-03 22:43 ` [Qemu-devel] " Alex Williamson
2016-05-04 3:39 ` Tian, Kevin
2016-05-04 3:39 ` [Qemu-devel] " Tian, Kevin
2016-05-05 6:55 ` Jike Song
2016-05-05 6:55 ` [Qemu-devel] " Jike Song
2016-05-05 9:27 ` Tian, Kevin
2016-05-05 9:27 ` [Qemu-devel] " Tian, Kevin
2016-05-10 7:52 ` Jike Song
2016-05-10 7:52 ` [Qemu-devel] " Jike Song
2016-05-10 16:02 ` Neo Jia
2016-05-10 16:02 ` [Qemu-devel] " Neo Jia
2016-05-11 9:15 ` Jike Song
2016-05-11 9:15 ` [Qemu-devel] " Jike Song
2016-05-11 22:06 ` Alex Williamson
2016-05-11 22:06 ` [Qemu-devel] " Alex Williamson
2016-05-12 4:11 ` Jike Song
2016-05-12 4:11 ` [Qemu-devel] " Jike Song
2016-05-12 19:49 ` Neo Jia
2016-05-12 19:49 ` [Qemu-devel] " Neo Jia
2016-05-13 2:41 ` Tian, Kevin
2016-05-13 2:41 ` [Qemu-devel] " Tian, Kevin
2016-05-13 6:22 ` Jike Song
2016-05-13 6:22 ` [Qemu-devel] " Jike Song
2016-05-13 6:43 ` Neo Jia
2016-05-13 6:43 ` [Qemu-devel] " Neo Jia
2016-05-13 7:30 ` Jike Song
2016-05-13 7:30 ` [Qemu-devel] " Jike Song
2016-05-13 7:42 ` Neo Jia
2016-05-13 7:42 ` [Qemu-devel] " Neo Jia
2016-05-13 7:45 ` Tian, Kevin
2016-05-13 7:45 ` [Qemu-devel] " Tian, Kevin
2016-05-13 8:31 ` Neo Jia
2016-05-13 8:31 ` [Qemu-devel] " Neo Jia
2016-05-13 9:23 ` Jike Song
2016-05-13 9:23 ` [Qemu-devel] " Jike Song
2016-05-13 15:50 ` Neo Jia
2016-05-13 15:50 ` [Qemu-devel] " Neo Jia
2016-05-16 6:57 ` Jike Song
2016-05-16 6:57 ` [Qemu-devel] " Jike Song
2016-05-13 6:08 ` Jike Song
2016-05-13 6:08 ` [Qemu-devel] " Jike Song
2016-05-13 6:41 ` Neo Jia
2016-05-13 6:41 ` [Qemu-devel] " Neo Jia
2016-05-13 7:13 ` Tian, Kevin
2016-05-13 7:13 ` [Qemu-devel] " Tian, Kevin
2016-05-13 7:38 ` Neo Jia
2016-05-13 7:38 ` [Qemu-devel] " Neo Jia
2016-05-13 8:02 ` Tian, Kevin
2016-05-13 8:02 ` [Qemu-devel] " Tian, Kevin
2016-05-13 8:41 ` Neo Jia
2016-05-13 8:41 ` [Qemu-devel] " Neo Jia
2016-05-12 8:00 ` Tian, Kevin
2016-05-12 8:00 ` [Qemu-devel] " Tian, Kevin
2016-05-12 19:05 ` Alex Williamson
2016-05-12 19:05 ` [Qemu-devel] " Alex Williamson
2016-05-12 20:12 ` Neo Jia
2016-05-12 20:12 ` [Qemu-devel] " Neo Jia
2016-05-13 9:46 ` Jike Song
2016-05-13 9:46 ` [Qemu-devel] " Jike Song
2016-05-13 15:48 ` Neo Jia
2016-05-13 15:48 ` [Qemu-devel] " Neo Jia
2016-05-16 2:27 ` Jike Song
2016-05-16 2:27 ` [Qemu-devel] " Jike Song
2016-05-13 3:55 ` Tian, Kevin
2016-05-13 3:55 ` [Qemu-devel] " Tian, Kevin
2016-05-13 16:16 ` Alex Williamson
2016-05-13 16:16 ` [Qemu-devel] " Alex Williamson
2016-05-13 7:10 ` Dong Jia
2016-05-13 7:24 ` Neo Jia
2016-05-13 8:39 ` Dong Jia
2016-05-13 8:39 ` [Qemu-devel] " Dong Jia
2016-05-13 9:05 ` Neo Jia
2016-05-19 7:28 ` Dong Jia
2016-05-20 3:21 ` Tian, Kevin
2016-05-20 3:21 ` Tian, Kevin
2016-06-06 6:59 ` Dong Jia
2016-06-07 2:47 ` Tian, Kevin
2016-06-07 2:47 ` Tian, Kevin
2016-06-07 7:04 ` Dong Jia
2016-05-05 7:51 ` Kirti Wankhede
2016-05-05 7:51 ` [Qemu-devel] " Kirti Wankhede
2016-05-04 1:05 ` [RFC PATCH v3 0/3] Add vGPU support Tian, Kevin
2016-05-04 1:05 ` [Qemu-devel] " Tian, Kevin
2016-05-04 6:17 ` Neo Jia
2016-05-04 6:17 ` [Qemu-devel] " Neo Jia
2016-05-04 17:07 ` Alex Williamson
2016-05-04 17:07 ` [Qemu-devel] " Alex Williamson
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=57307E9F.30203@intel.com \
--to=jike.song@intel.com \
--cc=alex.williamson@redhat.com \
--cc=cjia@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=shuai.ruan@intel.com \
--cc=zhiyuan.lv@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.