[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 00/42] CXl 2.0 emulation Support
From: |
Alex Bennée |
Subject: |
Re: [PATCH v4 00/42] CXl 2.0 emulation Support |
Date: |
Tue, 25 Jan 2022 13:55:29 +0000 |
User-agent: |
mu4e 1.7.6; emacs 28.0.91 |
Jonathan Cameron <Jonathan.Cameron@huawei.com> writes:
> Previous version was RFC v3: CXL 2.0 Support.
> No longer an RFC as I would consider the vast majority of this
> to be ready for detailed review. There are still questions called
> out in some patches however.
>
> Looking in particular for:
> * Review of the PCI interactions
> * x86 and ARM machine interactions (particularly the memory maps)
> * Review of the interleaving approach - is the basic idea
> acceptable?
> * Review of the command line interface.
> * CXL related review welcome but much of that got reviewed
> in earlier versions and hasn't changed substantially.
>
<snip>
>
> Why do we want QEMU emulation of CXL?
>
> As Ben stated in V3, QEMU support has been critical to getting OS
> software written given lack of availability of hardware supporting the
> latest CXL features (coupled with very high demand for support being
> ready in a timely fashion). What has become clear since Ben's v3
> is that situation is a continuous one. Whilst we can't talk about
> them yet, CXL 3.0 features and OS support have been prototyped on
> top of this support and a lot of the ongoing kernel work is being
> tested against these patches.
Is the core CXL support already in the upstream kernel or do you need a
patched one?
> Other features on the qemu-list that build on these include PCI-DOE
> /CDAT support from the Avery Design team further showing how this
> code is useful. Whilst not directly related this is also the test
> platform for work on PCI IDE/CMA + related DMTF SPDM as CXL both
> utilizes and extends those technologies and is likely to be an early
> adopter.
> Refs:
> CMA Kernel:
> https://lore.kernel.org/all/20210804161839.3492053-1-Jonathan.Cameron@huawei.com/
> CMA Qemu:
> https://lore.kernel.org/qemu-devel/1624665723-5169-1-git-send-email-cbrowy@avery-design.com/
> DOE Qemu:
> https://lore.kernel.org/qemu-devel/1623329999-15662-1-git-send-email-cbrowy@avery-design.com/
>
>
> As can be seen there is non trivial interaction with other areas of
> Qemu, particularly PCI and keeping this set up to date is proving
> a burden we'd rather do without :)
>
> Ben mentioned a few other good reasons in v3:
> https://lore.kernel.org/qemu-devel/20210202005948.241655-1-ben.widawsky@intel.com/
>
> The evolution of this series perhaps leave it in a less than
> entirely obvious order and that may get tidied up in future postings.
> I'm also open to this being considered in bite sized chunks. What
> we have here is about what you need for it to be useful for testing
> currently kernel code.
Ah right...
> All comments welcome.
>
> Ben - I lifted one patch from your git tree that didn't have a
> Sign-off. hw/cxl/component Add a dumb HDM decoder handler
> Could you confirm you are happy for one to be added?
>
> Example of new command line (with virt ITS patches ;)
One thing I think is missing in this series is some documentation. We've
been historically bad at adding it for new devices but given the
complexity of CXL I think we should certainly try to improve. I think a
reasonable stab could be made from the commit messages in the series. I
would suggest:
docs/system/devices/cxl.rst
And include:
- an brief overview of CXL
- kernel config options
and an some example command lines, like bellow:
>
> qemu-system-aarch64 -M virt,gic-version=3,cxl=on \
> -m 4g,maxmem=8G,slots=8 \
> ...
> -object
> memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-mem4,share=on,mem-path=/tmp/cxltest4.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-lsa3,share=on,mem-path=/tmp/lsa3.raw,size=256M,align=256M
> \
> -object
> memory-backend-file,id=cxl-lsa4,share=on,mem-path=/tmp/lsa4.raw,size=256M,align=256M
> \
> -object memory-backend-file,id=tt,share=on,mem-path=/tmp/tt.raw,size=1g \
> -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
> -device pxb-cxl,bus_nr=222,bus=pcie.0,id=cxl.2 \
> -device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \
> -device
> cxl-type3,bus=root_port13,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0,size=256M
> \
> -device cxl-rp,port=1,bus=cxl.1,id=root_port14,chassis=0,slot=3 \
> -device
> cxl-type3,bus=root_port14,memdev=cxl-mem2,lsa=cxl-lsa2,id=cxl-pmem1,size=256M
> \
> -device cxl-rp,port=0,bus=cxl.2,id=root_port15,chassis=0,slot=5 \
> -device
> cxl-type3,bus=root_port15,memdev=cxl-mem3,lsa=cxl-lsa3,id=cxl-pmem2,size=256M
> \
> -device cxl-rp,port=1,bus=cxl.2,id=root_port16,chassis=0,slot=6 \
> -device
> cxl-type3,bus=root_port16,memdev=cxl-mem4,lsa=cxl-lsa4,id=cxl-pmem3,size=256M
> \
> -cxl-fixed-memory-window targets=cxl.1,size=4G,interleave-granularity=8k \
> -cxl-fixed-memory-window
> targets=cxl.1,targets=cxl.2,size=4G,interleave-granularity=8k
So AIUI the above creates some CXL pmem devices that are part of the CXL
root bus which itself is on the PCIe bus? Is the intention that
reads/writes into the pmem by the guest end up visible in various forms
in the memory backend files? Are memory backends required or can the
address space be treated as volatile RAM that doesn't persist beyond a
reset/reboot?
Maybe a simple diagram will help make things clearer?
>
> First CFMWS suitable for 2 way interleave, the second for 4 way (2 way
> at host level and 2 way at the host bridge).
> targets=<range of pxb-cxl uids> , multiple entries if range is disjoint.
>
<snip>
--
Alex Bennée
- [PATCH v4 34/42] mem/cxl_type3: Add read and write functions for associated hostmem., (continued)
- [PATCH v4 34/42] mem/cxl_type3: Add read and write functions for associated hostmem., Jonathan Cameron, 2022/01/24
- [PATCH v4 35/42] cxl/cxl-host: Add memops for CFMWS region., Jonathan Cameron, 2022/01/24
- [PATCH v4 36/42] arm/virt: Allow virt/CEDT creation, Jonathan Cameron, 2022/01/24
- [PATCH v4 38/42] RFC: softmmu/memory: Add ops to memory_region_ram_init_from_file, Jonathan Cameron, 2022/01/24
- [PATCH v4 37/42] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl, Jonathan Cameron, 2022/01/24
- [PATCH v4 39/42] hw/cxl/component Add a dumb HDM decoder handler, Jonathan Cameron, 2022/01/24
- [PATCH v4 40/42] i386/pc: Enable CXL fixed memory windows, Jonathan Cameron, 2022/01/24
- [PATCH v4 41/42] qtest/acpi: Add reference CEDT tables., Jonathan Cameron, 2022/01/24
- [PATCH v4 42/42] qtest/cxl: Add very basic sanity tests, Jonathan Cameron, 2022/01/24
- Re: [PATCH v4 00/42] CXl 2.0 emulation Support, Jonathan Cameron, 2022/01/24
- Re: [PATCH v4 00/42] CXl 2.0 emulation Support,
Alex Bennée <=
- Re: [PATCH v4 00/42] CXl 2.0 emulation Support, Ben Widawsky, 2022/01/25
- Re: [PATCH v4 00/42] CXl 2.0 emulation Support, Alex Bennée, 2022/01/27