brintos

brintos / linux-shallow public Read only

0
0
Text · 7.8 KiB · 42f282c Raw
320 lines · plain
1==============================================================================2NUMA binding description.3==============================================================================4 5==============================================================================61 - Introduction7==============================================================================8 9Systems employing a Non Uniform Memory Access (NUMA) architecture contain10collections of hardware resources including processors, memory, and I/O buses,11that comprise what is commonly known as a NUMA node.12Processor accesses to memory within the local NUMA node is generally faster13than processor accesses to memory outside of the local NUMA node.14DT defines interfaces that allow the platform to convey NUMA node15topology information to OS.16 17==============================================================================182 - numa-node-id19==============================================================================20 21For the purpose of identification, each NUMA node is associated with a unique22token known as a node id. For the purpose of this binding23a node id is a 32-bit integer.24 25A device node is associated with a NUMA node by the presence of a26numa-node-id property which contains the node id of the device.27 28Example:29	/* numa node 0 */30	numa-node-id = <0>;31 32	/* numa node 1 */33	numa-node-id = <1>;34 35==============================================================================363 - distance-map37==============================================================================38 39The optional device tree node distance-map describes the relative40distance (memory latency) between all numa nodes.41 42- compatible : Should at least contain "numa-distance-map-v1".43 44- distance-matrix45  This property defines a matrix to describe the relative distances46  between all numa nodes.47  It is represented as a list of node pairs and their relative distance.48 49  Note:50	1. Each entry represents distance from first node to second node.51	The distances are equal in either direction.52	2. The distance from a node to self (local distance) is represented53	with value 10 and all internode distance should be represented with54	a value greater than 10.55	3. distance-matrix should have entries in lexicographical ascending56	order of nodes.57	4. There must be only one device node distance-map which must58	reside in the root node.59	5. If the distance-map node is not present, a default60	distance-matrix is used.61 62Example:63	4 nodes connected in mesh/ring topology as below,64 65		0_______20______166		|               |67		|               |68		20             2069		|               |70		|               |71		|_______________|72		3       20      273 74	if relative distance for each hop is 20,75	then internode distance would be,76	      0 -> 1 = 2077	      1 -> 2 = 2078	      2 -> 3 = 2079	      3 -> 0 = 2080	      0 -> 2 = 4081	      1 -> 3 = 4082 83     and dt presentation for this distance matrix is,84 85		distance-map {86			 compatible = "numa-distance-map-v1";87			 distance-matrix = <0 0  10>,88					   <0 1  20>,89					   <0 2  40>,90					   <0 3  20>,91					   <1 0  20>,92					   <1 1  10>,93					   <1 2  20>,94					   <1 3  40>,95					   <2 0  40>,96					   <2 1  20>,97					   <2 2  10>,98					   <2 3  20>,99					   <3 0  20>,100					   <3 1  40>,101					   <3 2  20>,102					   <3 3  10>;103		};104 105==============================================================================1064 - Empty memory nodes107==============================================================================108 109Empty memory nodes, which no memory resides in, are allowed. There are no110device nodes for these empty memory nodes. However, the NUMA node IDs and111distance maps are still valid and memory may be added into them through112hotplug afterwards.113 114Example:115 116	memory@0 {117		device_type = "memory";118		reg = <0x0 0x0 0x0 0x80000000>;119		numa-node-id = <0>;120	};121 122	memory@80000000 {123		device_type = "memory";124		reg = <0x0 0x80000000 0x0 0x80000000>;125		numa-node-id = <1>;126	};127 128	/* Empty memory node 2 and 3 */129	distance-map {130		compatible = "numa-distance-map-v1";131		distance-matrix = <0 0  10>,132				  <0 1  20>,133				  <0 2  40>,134				  <0 3  20>,135				  <1 0  20>,136				  <1 1  10>,137				  <1 2  20>,138				  <1 3  40>,139				  <2 0  40>,140				  <2 1  20>,141				  <2 2  10>,142				  <2 3  20>,143				  <3 0  20>,144				  <3 1  40>,145				  <3 2  20>,146				  <3 3  10>;147	};148 149==============================================================================1505 - Example dts151==============================================================================152 153Dual socket system consists of 2 boards connected through ccn bus and154each board having one socket/soc of 8 cpus, memory and pci bus.155 156	memory@c00000 {157		device_type = "memory";158		reg = <0x0 0xc00000 0x0 0x80000000>;159		/* node 0 */160		numa-node-id = <0>;161	};162 163	memory@10000000000 {164		device_type = "memory";165		reg = <0x100 0x0 0x0 0x80000000>;166		/* node 1 */167		numa-node-id = <1>;168	};169 170	cpus {171		#address-cells = <2>;172		#size-cells = <0>;173 174		cpu@0 {175			device_type = "cpu";176			compatible =  "arm,armv8";177			reg = <0x0 0x0>;178			enable-method = "psci";179			/* node 0 */180			numa-node-id = <0>;181		};182		cpu@1 {183			device_type = "cpu";184			compatible =  "arm,armv8";185			reg = <0x0 0x1>;186			enable-method = "psci";187			numa-node-id = <0>;188		};189		cpu@2 {190			device_type = "cpu";191			compatible =  "arm,armv8";192			reg = <0x0 0x2>;193			enable-method = "psci";194			numa-node-id = <0>;195		};196		cpu@3 {197			device_type = "cpu";198			compatible =  "arm,armv8";199			reg = <0x0 0x3>;200			enable-method = "psci";201			numa-node-id = <0>;202		};203		cpu@4 {204			device_type = "cpu";205			compatible =  "arm,armv8";206			reg = <0x0 0x4>;207			enable-method = "psci";208			numa-node-id = <0>;209		};210		cpu@5 {211			device_type = "cpu";212			compatible =  "arm,armv8";213			reg = <0x0 0x5>;214			enable-method = "psci";215			numa-node-id = <0>;216		};217		cpu@6 {218			device_type = "cpu";219			compatible =  "arm,armv8";220			reg = <0x0 0x6>;221			enable-method = "psci";222			numa-node-id = <0>;223		};224		cpu@7 {225			device_type = "cpu";226			compatible =  "arm,armv8";227			reg = <0x0 0x7>;228			enable-method = "psci";229			numa-node-id = <0>;230		};231		cpu@8 {232			device_type = "cpu";233			compatible =  "arm,armv8";234			reg = <0x0 0x8>;235			enable-method = "psci";236			/* node 1 */237			numa-node-id = <1>;238		};239		cpu@9 {240			device_type = "cpu";241			compatible =  "arm,armv8";242			reg = <0x0 0x9>;243			enable-method = "psci";244			numa-node-id = <1>;245		};246		cpu@a {247			device_type = "cpu";248			compatible =  "arm,armv8";249			reg = <0x0 0xa>;250			enable-method = "psci";251			numa-node-id = <1>;252		};253		cpu@b {254			device_type = "cpu";255			compatible =  "arm,armv8";256			reg = <0x0 0xb>;257			enable-method = "psci";258			numa-node-id = <1>;259		};260		cpu@c {261			device_type = "cpu";262			compatible =  "arm,armv8";263			reg = <0x0 0xc>;264			enable-method = "psci";265			numa-node-id = <1>;266		};267		cpu@d {268			device_type = "cpu";269			compatible =  "arm,armv8";270			reg = <0x0 0xd>;271			enable-method = "psci";272			numa-node-id = <1>;273		};274		cpu@e {275			device_type = "cpu";276			compatible =  "arm,armv8";277			reg = <0x0 0xe>;278			enable-method = "psci";279			numa-node-id = <1>;280		};281		cpu@f {282			device_type = "cpu";283			compatible =  "arm,armv8";284			reg = <0x0 0xf>;285			enable-method = "psci";286			numa-node-id = <1>;287		};288	};289 290	pcie0: pcie0@848000000000 {291		compatible = "arm,armv8";292		device_type = "pci";293		bus-range = <0 255>;294		#size-cells = <2>;295		#address-cells = <3>;296		reg = <0x8480 0x00000000 0 0x10000000>;  /* Configuration space */297		ranges = <0x03000000 0x8010 0x00000000 0x8010 0x00000000 0x70 0x00000000>;298		/* node 0 */299		numa-node-id = <0>;300        };301 302	pcie1: pcie1@948000000000 {303		compatible = "arm,armv8";304		device_type = "pci";305		bus-range = <0 255>;306		#size-cells = <2>;307		#address-cells = <3>;308		reg = <0x9480 0x00000000 0 0x10000000>;  /* Configuration space */309		ranges = <0x03000000 0x9010 0x00000000 0x9010 0x00000000 0x70 0x00000000>;310		/* node 1 */311		numa-node-id = <1>;312        };313 314	distance-map {315		compatible = "numa-distance-map-v1";316		distance-matrix = <0 0 10>,317				  <0 1 20>,318				  <1 1 10>;319	};320