Foundationপ্রথম নীতি থেকে
LEVEL 11 · Advanced Architecture & Performance

NUMA

নন-ইউনিফর্ম মেমরি অ্যাক্সেস

Multi-socket সিস্টেমে প্রতিটা CPU socket-এর নিজস্ব local memory bank থাকে — নিজের bank পড়া দ্রুত, অন্য socket-এর bank পড়তে interconnect পার হতে হয়, ~১.৫-২× ধীর।

also: NUMA, Non-Uniform Memory Access, NUMA node, memory affinity

UMA-তে (পুরনো একক-socket মডেল) সব core-এর memory latency সমান। NUMA-তে প্রতিটা node (সাধারণত একটা physical socket)-এর নিজস্ব integrated memory controller ও সরাসরি সংযুক্ত DRAM — local access দ্রুত, remote access-এ QPI/UPI (Intel) বা Infinity Fabric (AMD) interconnect পার হতে হয়।

numactl --hardware   # node distances: local=10, remote=21 (~2.1×)

First-touch নীতি (Linux ডিফল্ট): malloc() শুধু virtual address reserve করে — physical page বরাদ্দ হয় প্রথম write-এর মুহূর্তে, যে CPU সেই write করে তার node-এ। যে thread malloc() ডেকেছে তার node-এর কোনো ভূমিকা নেই।

নিয়ন্ত্রণ: numactl --cpunodebind=N --membind=N, libnuma-র numa_alloc_onnode()/numa_run_on_node()।

বাস্তব প্রভাব: naive thread pool (main thread সব allocate করে, worker-রা বিভিন্ন node-এ ছড়িয়ে) dual-socket সার্ভারে ৩০-৫০% throughput হারাতে পারে — কোনো algorithm বদল ছাড়াই, শুধু placement-এর কারণে। বড় cloud VM instance-এও প্রকৃত NUMA topology guest-কে প্রকাশ করা হয়।