Add support for per-way cache metadata
Adds a new cache parameter (SplitMetadata) and an associated knob. Closes #62
This commit is contained in:
		| @@ -49,6 +49,7 @@ env: | |||||||
|     - CONFIG=BroadcastRegressionTestConfig |     - CONFIG=BroadcastRegressionTestConfig | ||||||
|     - CONFIG=CacheRegressionTestConfig |     - CONFIG=CacheRegressionTestConfig | ||||||
|     - CONFIG=UnitTestConfig |     - CONFIG=UnitTestConfig | ||||||
|  |     - CONFIG=SplitL2MetadataTestConfig | ||||||
|  |  | ||||||
| # blacklist private branches | # blacklist private branches | ||||||
| branches: | branches: | ||||||
|   | |||||||
| @@ -110,6 +110,7 @@ class DefaultConfig extends Config ( | |||||||
|       case RowBits => findBy(CacheName) |       case RowBits => findBy(CacheName) | ||||||
|       case NTLBEntries => findBy(CacheName) |       case NTLBEntries => findBy(CacheName) | ||||||
|       case CacheIdBits => findBy(CacheName) |       case CacheIdBits => findBy(CacheName) | ||||||
|  |       case SplitMetadata => findBy(CacheName) | ||||||
|       case ICacheBufferWays => Knob("L1I_BUFFER_WAYS") |       case ICacheBufferWays => Knob("L1I_BUFFER_WAYS") | ||||||
|       case "L1I" => { |       case "L1I" => { | ||||||
|         case NSets => Knob("L1I_SETS") //64 |         case NSets => Knob("L1I_SETS") //64 | ||||||
| @@ -117,6 +118,7 @@ class DefaultConfig extends Config ( | |||||||
|         case RowBits => 4*site(CoreInstBits) |         case RowBits => 4*site(CoreInstBits) | ||||||
|         case NTLBEntries => 8 |         case NTLBEntries => 8 | ||||||
|         case CacheIdBits => 0 |         case CacheIdBits => 0 | ||||||
|  | 	case SplitMetadata => false | ||||||
|       }:PF |       }:PF | ||||||
|       case "L1D" => { |       case "L1D" => { | ||||||
|         case NSets => Knob("L1D_SETS") //64 |         case NSets => Knob("L1D_SETS") //64 | ||||||
| @@ -124,6 +126,7 @@ class DefaultConfig extends Config ( | |||||||
|         case RowBits => 2*site(CoreDataBits) |         case RowBits => 2*site(CoreDataBits) | ||||||
|         case NTLBEntries => 8 |         case NTLBEntries => 8 | ||||||
|         case CacheIdBits => 0 |         case CacheIdBits => 0 | ||||||
|  | 	case SplitMetadata => false | ||||||
|       }:PF |       }:PF | ||||||
|       case ECCCode => None |       case ECCCode => None | ||||||
|       case Replacer => () => new RandomReplacement(site(NWays)) |       case Replacer => () => new RandomReplacement(site(NWays)) | ||||||
| @@ -295,6 +298,7 @@ class WithL2Cache extends Config( | |||||||
|       case NWays => Knob("L2_WAYS") |       case NWays => Knob("L2_WAYS") | ||||||
|       case RowBits => site(TLKey(site(TLId))).dataBitsPerBeat |       case RowBits => site(TLKey(site(TLId))).dataBitsPerBeat | ||||||
|       case CacheIdBits => log2Ceil(site(NMemoryChannels) * site(NBanksPerMemoryChannel)) |       case CacheIdBits => log2Ceil(site(NMemoryChannels) * site(NBanksPerMemoryChannel)) | ||||||
|  |       case SplitMetadata => Knob("L2_SPLIT_METADATA") | ||||||
|     }: PartialFunction[Any,Any]  |     }: PartialFunction[Any,Any]  | ||||||
|     case NAcquireTransactors => 2 |     case NAcquireTransactors => 2 | ||||||
|     case NSecondaryMisses => 4 |     case NSecondaryMisses => 4 | ||||||
| @@ -307,7 +311,7 @@ class WithL2Cache extends Config( | |||||||
|         case OuterTLId => "L2toMC"}))) |         case OuterTLId => "L2toMC"}))) | ||||||
|     case L2Replacer => () => new SeqRandom(site(NWays)) |     case L2Replacer => () => new SeqRandom(site(NWays)) | ||||||
|   }, |   }, | ||||||
|   knobValues = { case "L2_WAYS" => 8; case "L2_CAPACITY_IN_KB" => 2048 } |   knobValues = { case "L2_WAYS" => 8; case "L2_CAPACITY_IN_KB" => 2048; case "L2_SPLIT_METADATA" => false } | ||||||
| ) | ) | ||||||
|  |  | ||||||
| class WithPLRU extends Config( | class WithPLRU extends Config( | ||||||
| @@ -457,3 +461,6 @@ class OneOrEightChannelVLSIConfig extends Config(new WithOneOrMaxChannels ++ new | |||||||
| class SimulateBackupMemConfig extends Config(){ Dump("MEM_BACKUP_EN", true) } | class SimulateBackupMemConfig extends Config(){ Dump("MEM_BACKUP_EN", true) } | ||||||
| class BackupMemVLSIConfig extends Config(new SimulateBackupMemConfig ++ new DefaultVLSIConfig) | class BackupMemVLSIConfig extends Config(new SimulateBackupMemConfig ++ new DefaultVLSIConfig) | ||||||
| class OneOrEightChannelBackupMemVLSIConfig extends Config(new WithOneOrMaxChannels ++ new With8MemoryChannels ++ new BackupMemVLSIConfig) | class OneOrEightChannelBackupMemVLSIConfig extends Config(new WithOneOrMaxChannels ++ new With8MemoryChannels ++ new BackupMemVLSIConfig) | ||||||
|  |  | ||||||
|  | class WithSplitL2Metadata extends Config(knobValues = { case "L2_SPLIT_METADATA" => true }) | ||||||
|  | class SplitL2MetadataTestConfig extends Config(new WithSplitL2Metadata ++ new DefaultL2Config) | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								uncore
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								uncore
									
									
									
									
									
								
							 Submodule uncore updated: 7f83245410...97ec0771a5
									
								
							
		Reference in New Issue
	
	Block a user