Hi Marcin, On Thu, Oct 17, 2024 at 06:19:59PM +0200, Marcin Juszkiewicz wrote: > Date: Thu, 17 Oct 2024 18:19:59 +0200 > From: Marcin Juszkiewicz <marcin.juszkiewicz@xxxxxxxxxx> > Subject: Re: [PATCH v3 1/7] hw/core: Make CPU topology enumeration > arch-agnostic > > W dniu 12.10.2024 o 12:44, Zhao Liu pisze: > > Cache topology needs to be defined based on CPU topology levels. Thus, > > define CPU topology enumeration in qapi/machine.json to make it generic > > for all architectures. > > I have a question: how to create other than default cache topology in C > source? What does "C source" mean? Does it refer to the C code for sbsa-ref? There's the ARM change to support cache topology for virt machine: https://lore.kernel.org/qemu-devel/20241010111822.345-5-alireza.sanaee@xxxxxxxxxx/ If you're looking to store cache information for some common purposes, you could also define a cache model structure similar to how it's done for x86: static const CPUCaches epyc_cache_info = { .l1d_cache = &(CPUCacheInfo) { .type = DATA_CACHE, .level = 1, .size = 32 * KiB, .line_size = 64, .associativity = 8, .partitions = 1, .sets = 64, .lines_per_tag = 1, .self_init = 1, .no_invd_sharing = true, .share_level = CPU_TOPOLOGY_LEVEL_CORE, }, .l1i_cache = &(CPUCacheInfo) { .type = INSTRUCTION_CACHE, .level = 1, .size = 64 * KiB, .line_size = 64, .associativity = 4, .partitions = 1, .sets = 256, .lines_per_tag = 1, .self_init = 1, .no_invd_sharing = true, .share_level = CPU_TOPOLOGY_LEVEL_CORE, }, .l2_cache = &(CPUCacheInfo) { .type = UNIFIED_CACHE, .level = 2, .size = 512 * KiB, .line_size = 64, .associativity = 8, .partitions = 1, .sets = 1024, .lines_per_tag = 1, .share_level = CPU_TOPOLOGY_LEVEL_CORE, }, .l3_cache = &(CPUCacheInfo) { .type = UNIFIED_CACHE, .level = 3, .size = 8 * MiB, .line_size = 64, .associativity = 16, .partitions = 1, .sets = 8192, .lines_per_tag = 1, .self_init = true, .inclusive = true, .complex_indexing = true, .share_level = CPU_TOPOLOGY_LEVEL_DIE, }, }; > If I would like to change default cache structure for sbsa-ref then how > would I do it? I'm not very familiar with sbsa-ref. How is the cache model defined? Does it use ACPI PPTT like the virt machine? If so, you can refer to the virt machine series link I provided above. > QEMU has powerful set of command line options. But it is hard to convert set > of cli options into C code. The CLI is currently quite complex, as different machine configurations may vary. But don't worry. The general steps for enabling smp-cache here are: 1. Set cache levels support in sbsa_ref_class_init(). You can refer my patch 6, to set ture for which cache level you need. 2. Then, the cli can support "-machine smp-cache" for sbsa-ref machine. You can refer the doc in my patch 6 to get the correct format. 3. Next, the MachineState will store the user's cache topology in "smp_cache". You can refer my patch 5 to get cache topology level from machine. 4. Finally, it's architecture-specific code, depending on whether you want to express cache information in the same pptt table as virt machine. Regards, Zhao