<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.opensfs.org/index.php?action=history&amp;feed=atom&amp;title=MDS_SMP_Node_Affinity_ScopeStatement_wiki_version</id>
	<title>MDS SMP Node Affinity ScopeStatement wiki version - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.opensfs.org/index.php?action=history&amp;feed=atom&amp;title=MDS_SMP_Node_Affinity_ScopeStatement_wiki_version"/>
	<link rel="alternate" type="text/html" href="http://wiki.opensfs.org/index.php?title=MDS_SMP_Node_Affinity_ScopeStatement_wiki_version&amp;action=history"/>
	<updated>2026-10-13T01:54:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://wiki.opensfs.org/index.php?title=MDS_SMP_Node_Affinity_ScopeStatement_wiki_version&amp;diff=1764&amp;oldid=prev</id>
		<title>RichardHenwood: Created page with &quot;                  == Introduction ==   The following scope statement applies to the SMP Node Affinity Scope Statement project within the SFS-DEV-001 contract/SOW dates 08/01/2...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.opensfs.org/index.php?title=MDS_SMP_Node_Affinity_ScopeStatement_wiki_version&amp;diff=1764&amp;oldid=prev"/>
		<updated>2015-04-22T17:22:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;                  == Introduction ==   The following scope statement applies to the SMP Node Affinity Scope Statement project within the SFS-DEV-001 contract/SOW dates 08/01/2...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;                 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
 &lt;br /&gt;
The following scope statement applies to the SMP Node Affinity Scope Statement project within the SFS-DEV-001 contract/SOW dates 08/01/2011.&lt;br /&gt;
 &lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
 &lt;br /&gt;
Followers of CPU design are observing steady increases in core count. As core count increases thread resource contention (particularly locking) threatens to throttle Lustre server performance.&lt;br /&gt;
 &lt;br /&gt;
A multi-core CPUs are now common. Core count is expected to continue climbing and as it does a Lustre server will need to increase thread count to exploit the CPU capacity. On Lustre today additional threads will contend a single wait-queue, share one request queue, and share only a couple of global locks. Hence, without additional work, Lustre servers are expected to perform badly on multi-core CPUs for reasons including:&lt;br /&gt;
 &lt;br /&gt;
* Overhead of lock contention.&lt;br /&gt;
* Overhead of process switching between cores.&lt;br /&gt;
* Scheduler attempting to balance threads across cores.&lt;br /&gt;
 &lt;br /&gt;
These factors can be addressed by splitting the computing cores into configurable Compute Partitions. Lustre RPC service threads will then be bound to a specific Compute Partition. This design:&lt;br /&gt;
 &lt;br /&gt;
* Reduces the overhead of threads switching cores by keeping the thread running on the same core as the cache memory.&lt;br /&gt;
* Avoids needless contention on the inter-CPU memory subsystem.&lt;br /&gt;
* Keeps RPC request processing local to the resources that they affect.&lt;br /&gt;
* Allows the protocol stack to scale effectively as the number of cores increases.&lt;br /&gt;
 &lt;br /&gt;
== Project Goals ==&lt;br /&gt;
 &lt;br /&gt;
SMP node affinity is concerned with improving vertical scalability of a Lustre server by addressing software insufficiency on multi-core machines. This will enable Lustre to fully exploit increasingly powerful server hardware as it becomes available.&lt;br /&gt;
&lt;br /&gt;
SMP node affinity will implement the following features:&lt;br /&gt;
&lt;br /&gt;
* General libcfs APIs to provide a framework to support Compute Partitions&lt;br /&gt;
* Fine-grained SMP locking for Lustre&lt;br /&gt;
* SMP node affinity threading mode for Lustre&lt;br /&gt;
 &lt;br /&gt;
Benchmarks for metadata performance will be made on a cluster with a reasonable number of clients and a large (12+) number of cores.&lt;br /&gt;
 &lt;br /&gt;
The new features will demonstrate that performance of a single metadata server with a large (12+) cores is improved for file operations: create/remove/stat.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Code will land on WC-Lustre master branch.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== In-Scope ==&lt;br /&gt;
 &lt;br /&gt;
* High level design document for SMP node affinity of Lustre.&lt;br /&gt;
* Improve small message rate of LNET on multiple (12+) core server.&lt;br /&gt;
* Improve small RPC rate of ptlrpc on multiple (12+) core server.&lt;br /&gt;
* Improve general metadata performance on a multiple (12+) core server for narrow strip-count file.&lt;br /&gt;
* OST stack performance will not exhibit regression.&lt;br /&gt;
* SMP node affinity code will take place against WC-Lustre 2.x baseline. Code will cover:&lt;br /&gt;
** General SMP improvements for Lustre and LNET.&lt;br /&gt;
** libcfs APIs to support CPU partition and NUMA allocators.&lt;br /&gt;
** SMP node affinity threading mode for Lustre and LNET.&lt;br /&gt;
*** LND threads&lt;br /&gt;
*** ptlrpc service threads&lt;br /&gt;
*** ptlrpc reply handling threads&lt;br /&gt;
* Update manual to include SMP node affinity tuning parameters.&lt;br /&gt;
 &lt;br /&gt;
== Out of Scope ==&lt;br /&gt;
 &lt;br /&gt;
* Wide strip count files involve additional factors that will not be helpful for demonstrating performance improvements.&lt;br /&gt;
 &lt;br /&gt;
== Project Constraints ==&lt;br /&gt;
 &lt;br /&gt;
* Liang is the only engineer with the expertise to lead this work.&lt;br /&gt;
* Test cluster with suitable multiple (12+) core nodes available to WC engineers regardless of nationality.&lt;br /&gt;
 &lt;br /&gt;
== Key Deliverables ==&lt;br /&gt;
 &lt;br /&gt;
* Signed-off Milestone document for the project phases:&lt;br /&gt;
** Solution Architecture&lt;br /&gt;
** High-level Design&lt;br /&gt;
* Test plan&lt;br /&gt;
* Source code against WC-Lustre 2.x that implements the feature requirements and runs on the test cluster.&lt;br /&gt;
* Code landed on Master WC-Lustre 2.x as Issue [[LU-56]].&lt;br /&gt;
 &lt;br /&gt;
=== Glossary ===&lt;br /&gt;
 &lt;br /&gt;
* CPU partition&amp;lt;br&amp;gt; CPU partition is subset of processing resource of system, a CPU partition could be any number of CPU cores in system: it can be a single core, or any specified number of cores, or stand for all cores in a NUMA node, or represent all CPUs of a system.  The number of CPU partitions can be set by libcfs APIs.&amp;lt;br&amp;gt; A fat server will be divided into several compute partitions, each compute partition contains: cores in CPU-partition, memory pool, message queue, threads pool, it&amp;#039;s a little like virtual machine, although it&amp;#039;s much simpler since the the Lustre RPC processing threads will still have access to all Lustre global state if needed.&lt;/div&gt;</summary>
		<author><name>RichardHenwood</name></author>
	</entry>
</feed>