Hi Andreas, I just follow your instructions to build the NUMA config, but it does not work, gem5 would start to run and quit immediately, here is the debug ouput
=======debug output begin======= command line: /vagrant/gem5/build/X86/gem5.opt gem5/configs/example/fs.py --num-cpus=4 --disk-image=x86root-parsec.img --kernel=vmlinux Global frequency set at 1000000000000 ticks per second info: kernel located at: /vagrant/binaries/vmlinux 0: rtc: Real-time clock set to Sun Jan 1 00:00:00 2012 Listening for com_1 connection on port 3456 warn: Reading current count from inactive timer. 0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000 0: system.remote_gdb.listener: listening for remote gdb #1 on port 7001 0: system.remote_gdb.listener: listening for remote gdb #2 on port 7002 0: system.remote_gdb.listener: listening for remote gdb #3 on port 7003 Program received signal SIGSEGV, Segmentation fault. 0x0000000000a845f2 in PacketQueue::checkFunctional (this=0x28aac98, pkt=pkt@entry=0x7fffffffd250) at build/X86/mem/packet_queue.cc:71 71 { (gdb) list 66 sendDeferredPacket(); 67 } =====debug output end====== I am not proficient enough to debug this problem, so I want your help to point out what's wrong with my configs. I just created: A. a 4 cpu numa system, B. each cpu connect to a membus and then a dram controller, C. each dram is 128MB, D. every two membus is connected to each other by a Cache(in two directions), E. with address range set to the slave mebus's address range. F. IO devices are connected to the first node. Here is the modification I did for the NUMA model. ========diff start=============== diff --git a/configs/common/CacheConfig.py b/configs/common/CacheConfig.py index b467b16..85f68b5 100644 --- a/configs/common/CacheConfig.py +++ b/configs/common/CacheConfig.py @@ -67,14 +67,21 @@ def config_cache(options, system): # are not connected using addTwoLevelCacheHierarchy. Use the # same clock as the CPUs, and set the L1-to-L2 bus width to 32 # bytes (256 bits). - system.l2 = l2_cache_class(clk_domain=system.cpu_clk_domain, - size=options.l2_size, - assoc=options.l2_assoc) + l2s = [l2_cache_class(clk_domain=system.cpu_clk_domain, + size=options.l2_size, + assoc=options.l2_assoc) + for x in option.num_cpus] + + tol2buses = [CoherentBus(clk_domain=system.cpu_clk_domain, + width=32) + for x in option.num_cpus] + + for i, l2 in enumerate(l2s): + l2.cpu_side = tol2buses[i].master + l2.mem_side = system.membuses[i].slave - system.tol2bus = CoherentBus(clk_domain = system.cpu_clk_domain, - width = 32) - system.l2.cpu_side = system.tol2bus.master - system.l2.mem_side = system.membus.slave + system.l2s = l2s + system.tol2buses = tol2buses for i in xrange(options.num_cpus): if options.caches: @@ -93,8 +100,9 @@ def config_cache(options, system): system.cpu[i].addPrivateSplitL1Caches(icache, dcache) system.cpu[i].createInterruptController() if options.l2cache: - system.cpu[i].connectAllPorts(system.tol2bus, system.membus) + system.cpu[i].connectAllPorts(system.tol2buses[i], + system.membuses[i]) else: - system.cpu[i].connectAllPorts(system.membus) + system.cpu[i].connectAllPorts(system.membuses[i]) return system diff --git a/configs/common/Caches.py b/configs/common/Caches.py index 9f7ac7a..0c1f7f1 100644 --- a/configs/common/Caches.py +++ b/configs/common/Caches.py @@ -72,6 +72,14 @@ class IOCache(BaseCache): forward_snoops = False is_top_level = True +class NUMACache(BaseCache): + assoc = 8 + hit_latency = 50 + response_latency = 50 + mshrs = 20 + tgts_per_mshr = 12 + is_top_level = True + class PageTableWalkerCache(BaseCache): assoc = 2 hit_latency = 2 diff --git a/configs/common/FSConfig.py b/configs/common/FSConfig.py index dc24adf..79518da 100644 --- a/configs/common/FSConfig.py +++ b/configs/common/FSConfig.py @@ -331,13 +331,13 @@ def connectX86ClassicSystem(x86_sys, numCPUs): interrupts_address_space_base = 0xa000000000000000 APIC_range_size = 1 << 12; - x86_sys.membus = MemBus() + x86_sys.membuses = [MemBus() for x in range(numCPUs)] # North Bridge x86_sys.iobus = NoncoherentBus() x86_sys.bridge = Bridge(delay='50ns') x86_sys.bridge.master = x86_sys.iobus.slave - x86_sys.bridge.slave = x86_sys.membus.master + x86_sys.bridge.slave = x86_sys.membuses[0].master # Allow the bridge to pass through the IO APIC (two pages), # everything in the IO address range up to the local APIC, and # then the entire PCI address space and beyond @@ -356,7 +356,7 @@ def connectX86ClassicSystem(x86_sys, numCPUs): # the local APIC (two pages) x86_sys.apicbridge = Bridge(delay='50ns') x86_sys.apicbridge.slave = x86_sys.iobus.master - x86_sys.apicbridge.master = x86_sys.membus.slave + x86_sys.apicbridge.master = x86_sys.membuses[0].slave x86_sys.apicbridge.ranges = [AddrRange(interrupts_address_space_base, interrupts_address_space_base + numCPUs * APIC_range_size @@ -365,7 +365,7 @@ def connectX86ClassicSystem(x86_sys, numCPUs): # connect the io bus x86_sys.pc.attachIO(x86_sys.iobus) - x86_sys.system_port = x86_sys.membus.slave + x86_sys.system_port = x86_sys.membuses[0].slave def connectX86RubySystem(x86_sys): # North Bridge diff --git a/configs/common/MemConfig.py b/configs/common/MemConfig.py index e954407..e8c623e 100644 --- a/configs/common/MemConfig.py +++ b/configs/common/MemConfig.py @@ -153,7 +153,13 @@ def config_mem(options, system): # For every range (most systems will only have one), create an # array of controllers and set their parameters to match their # address mapping in the case of a DRAM - for r in system.mem_ranges: + + AddrRange = m5.objects.AddrRange + numa_mem_ranges = [AddrRange('0MB', size='128MB'), + AddrRange('128MB', size='128MB'), + AddrRange('256MB', size='128MB'), + AddrRange('384MB', size='128MB')] + for r in numa_mem_ranges: for i in xrange(nbr_mem_ctrls): # Create an instance so we can figure out the address # mapping and row-buffer size @@ -191,4 +197,4 @@ def config_mem(options, system): # Connect the controllers to the membus for i in xrange(len(system.mem_ctrls)): - system.mem_ctrls[i].port = system.membus.master + system.mem_ctrls[i].port = system.membuses[i].master diff --git a/configs/common/NUMAConfig.py b/configs/common/NUMAConfig.py new file mode 100644 index 0000000..71ea0a5 --- /dev/null +++ b/configs/common/NUMAConfig.py @@ -0,0 +1,86 @@ +import itertools + +from m5.objects import * +from Benchmarks import * +from m5.util import * +from Caches import * + +def config_numa(options, system): + link_nodes(options, system) + +def link_nodes(options, system): + numa_caches = [] + for src, dst in itertools.permutations(range(options.num_cpus), r=2): + cache = NUMACache(size="256kB", + addr_ranges=[system.mem_ctrls[dst].range]) + numa_caches.append(cache) + cache.cpu_side = system.membuses[src].master + cache.mem_side = system.membuses[dst].slave + system.numa_caches = numa_caches diff --git a/configs/example/fs.py b/configs/example/fs.py index 5847482..de2b0eb 100644 --- a/configs/example/fs.py +++ b/configs/example/fs.py @@ -60,6 +60,7 @@ from Benchmarks import * import Simulation import CacheConfig import MemConfig +import NUMAConfig from Caches import * import Options @@ -177,7 +178,7 @@ def build_test_system(np): else: test_sys.iobridge = Bridge(delay='50ns', ranges = test_sys.mem_ranges) test_sys.iobridge.slave = test_sys.iobus.master - test_sys.iobridge.master = test_sys.membus.slave + test_sys.iobridge.master = test_sys.membuses[0].slave # Sanity check if options.fastmem: @@ -195,6 +196,7 @@ def build_test_system(np): CacheConfig.config_cache(options, test_sys) MemConfig.config_mem(options, test_sys) + NUMAConfig.config_numa(options, test_sys) return test_sys ========diff end=============== Regards, Chen Houwu On Mon, 7 Apr 2014 08:32:55 +0100, Andreas Hansson <andreas.hans...@arm.com> wrote: > Hi Faris, > > I do not thing there are any existing examples out there. In essence, > this is what I would suggest (and believe should work): > > 1 change an existing script to create two completely separate CC-UMA > "chiplets" with CPU clusters, along with their L2/L3, membus and > (multi-channel) DRAM controller > 2 connect these two blobs with a "numa cache" in each direction, from > membus to membus. Configured right, this will allow the CPUs in one of > the chiplets to talk to the DRAMs in the other in a coherent fashion. > > I hope that provides enough information to get you started. > > Andreas > > From: faris priadi <farispri...@gmail.com <mailto:farispri...@gmail.com>> > Reply-To: gem5 users mailing list <gem5-users@gem5.org > <mailto:gem5-users@gem5.org>> > Date: Sunday, 6 April 2014 09:47 > To: gem5 users mailing list <gem5-users@gem5.org > <mailto:gem5-users@gem5.org>> > Subject: Re: [gem5-users] help : cc-NUMA in gem5 > > Hi, > I tried to configure NUMA in gem5 , but i'm still stuck. Actually > about create own memory controller each CPU, because that i found in > internet and forums were about multi-channels in gem5. Isn't similar > configuring multi-channels and adding own memory controller for each > CPU in gem5? thanks > > > On Tue, Apr 1, 2014 at 11:57 PM, faris priadi <farispri...@gmail.com > <mailto:farispri...@gmail.com>> wrote: > > Hi Andreas, > > Ok , I will try it first dan try to understand implement my model > to gem5 . anyway i have tried to increase memory size to 4GB with > --mem-size in ALPHA Fullsystem but this following error happened : > > 1146167500: system.cpu00.break_event: break event panic triggered > fatal: Unable to find destination for addr 0xfffff00188 on bus > system.piobus > @ cycle 14723200500 > [findPort:build/ALPHA_FS/mem/bus.cc, line 353] > Memory Usage: 5619064 KBytes > > Do you know what error it is ? Can you help me solve this? . Thanks > > > On Tue, Apr 1, 2014 at 2:48 PM, Andreas Hansson > <andreas.hans...@arm.com <mailto:andreas.hans...@arm.com>> wrote: > > Hi Faris, > > Not at all. You simply assemble the existing building blocks > in a slightly different manner. You should be able to do this > entirely through the Python scripts. > > Andreas > > From: faris priadi <farispri...@gmail.com > <mailto:farispri...@gmail.com>> > Reply-To: gem5 users mailing list <gem5-users@gem5.org > <mailto:gem5-users@gem5.org>> > Date: Tuesday, 1 April 2014 03:13 > > To: gem5 users mailing list <gem5-users@gem5.org > <mailto:gem5-users@gem5.org>> > Subject: Re: [gem5-users] help : cc-NUMA in gem5 > > Thank you Andreas for quick response.actually i still little > bit confuse . Do i also have to modify .cc/hh file manually to > create NUMA model ? > > > On Tue, Apr 1, 2014 at 1:46 AM, Andreas Hansson > <andreas.hans...@arm.com <mailto:andreas.hans...@arm.com>> wrote: > > Hi Faris, > > The short answer is yes. You will have to manually adapt > se.py or fs.py based on your needs. You could, for > example, create two clusters of CPUs, each with their own > LLC and memory controllers (and memory ranges), and then > connect their membus instances with a "glue" cache. > > Andreas > > From: faris priadi <farispri...@gmail.com > <mailto:farispri...@gmail.com>> > Reply-To: gem5 users mailing list <gem5-users@gem5.org > <mailto:gem5-users@gem5.org>> > Date: Monday, 31 March 2014 18:58 > To: "gem5-users@gem5.org <mailto:gem5-users@gem5.org>" > <gem5-users@gem5.org <mailto:gem5-users@gem5.org>> > Subject: [gem5-users] help : cc-NUMA in gem5 > > Hello everyone , > I have final project about cc-NUMA and now i try to use > gem5 , but i need help to configure NUMA in gem5. Can gem5 > be used to simulate cc-NUMA system ? > > -- > Best Regards, > Faris Priadi ,Amd. > > 082121325532 <tel:082121325532> > farispri...@gmail.com <mailto:farispri...@gmail.com> > > -- IMPORTANT NOTICE: The contents of this email and any > attachments are confidential and may also be privileged. > If you are not the intended recipient, please notify the > sender immediately and do not disclose the contents to any > other person, use it for any purpose, or store or copy the > information in any medium. Thank you. > > ARM Limited, Registered office 110 Fulbourn Road, > Cambridge CB1 9NJ, Registered in England & Wales, Company > No: 2557590 > ARM Holdings plc, Registered office 110 Fulbourn Road, > Cambridge CB1 9NJ, Registered in England & Wales, Company > No: 2548782 > > _______________________________________________ > gem5-users mailing list > gem5-users@gem5.org <mailto:gem5-users@gem5.org> > http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users > > > > > -- > Best Regards, > Faris Priadi ,Amd. > > 082121325532 <tel:082121325532> > farispri...@gmail.com <mailto:farispri...@gmail.com> > > -- IMPORTANT NOTICE: The contents of this email and any > attachments are confidential and may also be privileged. If > you are not the intended recipient, please notify the sender > immediately and do not disclose the contents to any other > person, use it for any purpose, or store or copy the > information in any medium. Thank you. > > ARM Limited, Registered office 110 Fulbourn Road, Cambridge > CB1 9NJ, Registered in England & Wales, Company No: 2557590 > ARM Holdings plc, Registered office 110 Fulbourn Road, > Cambridge CB1 9NJ, Registered in England & Wales, Company No: > 2548782 > > _______________________________________________ > gem5-users mailing list > gem5-users@gem5.org <mailto:gem5-users@gem5.org> > http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users > > > > > -- > Best Regards, > Faris Priadi > > farispri...@gmail.com <mailto:farispri...@gmail.com> > > > > > -- > Best Regards, > Faris Priadi ,Amd. > > 082121325532 > farispri...@gmail.com <mailto:farispri...@gmail.com> > > -- IMPORTANT NOTICE: The contents of this email and any attachments > are confidential and may also be privileged. If you are not the > intended recipient, please notify the sender immediately and do not > disclose the contents to any other person, use it for any purpose, or > store or copy the information in any medium. Thank you. > > ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, > Registered in England & Wales, Company No: 2557590 > ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 > 9NJ, Registered in England & Wales, Company No: 2548782 > > > _______________________________________________ > gem5-users mailing list > gem5-users@gem5.org > http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________ gem5-users mailing list gem5-users@gem5.org http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users