Hi,

The default value for the snoop directory is 8MiB. I am trying to find the
minimum size for my configuration. I ran a dual-core system (-n 2) with 2
levels of caches with one L1D prefetcher (DCPT), with small L1 and L2
caches:
build/X86/gem5.fast ./configs/example/se.py --caches --l2cache   -n 2 -c
~/borrower/borrower/micro/stream -I 40000000 --cpu-type=X86O3CPU
--l2_size=512 --l1d_size=128 --l1i_size=128 --l1d-hwp-type=DCPTPrefetcher

Given that L1I and L1D are 128 bytes (128/64=2 blocks), and L2 is 512 bytes
(512/64=8 blocks), I expected that "system.tol2bus.snoop_filter" to need a
maximum of 2cores*(2+2)+8=16 entries or size of 1024bytes to be able to
track everything on the chip. Note that "system.tol2bus.snoop_filter" is
only connected to L1I, L1D, and L2. However, with this size, the simulation
breaks:

build/X86/mem/snoop_filter.cc:200: panic: panic condition !is_hit &&
(cachedLocations.size() >= maxEntryCount) occurred: snoop filter exceeded
capacity of 16 cache blocks
Memory Usage: 643508 KBytes

I have two questions:
(1) Why in the current code, the snoop size is checked only once?
https://github.com/gem5/gem5/blob/f554b1a7b56b5889bd5daec6e09eda8c3fbd93d1/src/mem/snoop_filter.cc#L199

Should not we check if right after pushing a new address to the
cachedLocations at here:
https://github.com/gem5/gem5/blob/f554b1a7b56b5889bd5daec6e09eda8c3fbd93d1/src/mem/snoop_filter.cc#L93

(2) Why do we need more spaces than the number of blocks that can
theoretically be on the chip?

Thanks,
Majid
_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to