工具与软件:
您好!
您能否提供有关 ARM Cortex-A72计算集群上 L2和 L3高速缓存处理的更多详细信息?
我们的当前设置为:
电路板:J784s4定制电路板
PDK 09.02.00.30
Linux
SPL 引导
MSMC:6MB 的存储器在 uboot 上配置为 L3高速缓存(board-cfg.yaml)
# msmc_cache_size calculation:
# If the whole memory is X MB the value you write to this field is n.
# The value of n sets the cache size as n * X/64. The value of n should
# be given in steps of 4, which makes the size of cache to be
# configured in steps on X/8 MB.
# Simplified: n = Cache_in_MB * 8
msmc:
subhdr:
magic: 0xA5C3
size: 5
# enable 6MB msmc cache
msmc_cache_size : 0x30相应的内核配置为:
&msmc_l3 {
cache-size = <0x600000>; // Set the L3 cache to 6MB
cache-line-size = <128>; // Cache line size is 128byte
cache-sets = <2048>; // Number of cache sets
};
lscpu 的输出:
lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0,1,4,5
Off-line CPU(s) list: 2,3,6,7
Vendor ID: ARM
Model name: Cortex-A72
Model: 0
Thread(s) per core: 1
Core(s) per cluster: 4
Socket(s): -
Cluster(s): 1
Stepping: r1p0
BogoMIPS: 400.00
Flags: fp asimd aes pmull sha1 sha2 crc32 cpuid
Caches (sum of all):
L1d: 128 KiB (4 instances)
L1i: 192 KiB (4 instances)
L2: 4 MiB (2 instances)
L3: 6 MiB (1 instance)当前的软件情况是:
在第一个 A72集群(集群0)上、我们有一个 dotnet 运行时、它在上托管几个 C#应用程序
其他群集(群集1)正在运行一个 c++实时应用程序。
我们的问题是:
dotnet 运行时为其运行的每个 CPU 内核(群集0)生成一个垃圾收集(GC)线程。
当 GC 线程偶尔工作时,我们会遇到实时线程的干扰
在第二个 A72集群(集群1)上运行的应用、使 CPU 时间几乎翻倍。
在某些情况下、这会导致应用中出现错误情况、从而导致 RT 期限未满。
无效化的,特别是 两个 A72集群之间共享 L3高速缓存、或(b) DDR 存储器控制器总线饱和或(c)这两种现象。
我们有一些问题可以验证我们的理论:
1.我们如何通过测量高速缓存缺失、总线饱和等方面的专用性能计数器来检验我们的假设?
2.是否可以将 L3高速缓存分开/分区并将其分别分配给两个 A72群集?
3.是否有增加 DDR 内存总线吞吐量的方法(当它被证明是瓶颈时)?
4.我们没有想到的其他原因?
此致
Thomas Willetal
