the art and science of memory
play

The Art and Science of Memory System Calls Kernel - PDF document

9/30/14 CSE 506: Opera.ng Systems CSE 506: Opera.ng Systems Logical Diagram Binary Memory Threads Formats Allocators User The Art and Science of


  1. 9/30/14 ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Logical ¡Diagram ¡ Binary ¡ Memory ¡ Threads ¡ Formats ¡ Allocators ¡ User ¡ The ¡Art ¡and ¡Science ¡of ¡Memory ¡ System ¡Calls ¡ Kernel ¡ Alloca:on ¡ Today’s ¡Lecture ¡ RCU ¡ File ¡System ¡ Networking ¡ Sync ¡ Don ¡Porter ¡ Memory ¡ ¡ Device ¡ CPU ¡ Management ¡ Drivers ¡ Scheduler ¡ Hardware ¡ Interrupts ¡ Disk ¡ Net ¡ Consistency ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Lecture ¡goal ¡ Today’s ¡Lecture ¡ • Understand ¡how ¡memory ¡allocators ¡work ¡ • How ¡to ¡implement ¡ malloc () ¡or ¡ new – In ¡both ¡kernel ¡and ¡applica:ons ¡ – Note ¡that ¡ new ¡is ¡essen:ally ¡malloc ¡+ ¡constructor ¡ – malloc () ¡is ¡part ¡of ¡libc, ¡and ¡executes ¡in ¡the ¡applica:on ¡ • Understand ¡trade-­‑offs ¡and ¡current ¡best ¡prac:ces ¡ • malloc() ¡gets ¡pages ¡of ¡memory ¡from ¡the ¡OS ¡via ¡ mmap() ¡and ¡then ¡sub-­‑divides ¡them ¡for ¡the ¡ applica:on ¡ • The ¡next ¡lecture ¡will ¡talk ¡about ¡how ¡the ¡kernel ¡ manages ¡physical ¡pages ¡ ¡ – For ¡internal ¡use, ¡or ¡to ¡allocate ¡to ¡applica:ons ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Bump ¡allocator ¡ Bump ¡allocator ¡ • Simply ¡“bumps” ¡up ¡the ¡free ¡pointer ¡ • How ¡does ¡free() ¡work? ¡ ¡It ¡doesn’t ¡ • malloc ¡(6) ¡ – Well, ¡you ¡could ¡try ¡to ¡recycle ¡cells ¡if ¡you ¡wanted, ¡but ¡ complicated ¡bookkeeping ¡ • malloc ¡(12) ¡ • Controversial ¡observa:on: ¡This ¡is ¡ideal ¡for ¡simple ¡ • malloc(20) ¡ programs ¡ • malloc ¡(5) ¡ – You ¡only ¡care ¡about ¡free() ¡if ¡you ¡need ¡the ¡memory ¡for ¡ something ¡else ¡ 1 ¡

  2. 9/30/14 ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Assume ¡memory ¡is ¡limited ¡ Overarching ¡issues ¡ • Hoard: ¡best-­‑of-­‑breed ¡concurrent ¡allocator ¡ • Fragmenta:on ¡ – User ¡applica:ons ¡ • Alloca:on ¡and ¡free ¡latency ¡ – Seminal ¡paper ¡ – Synchroniza:on/Concurrency ¡ • We’ll ¡also ¡talk ¡about ¡how ¡Linux ¡allocates ¡its ¡own ¡ • Implementa:on ¡complexity ¡ memory ¡ • Cache ¡behavior ¡ – Alignment ¡(cache ¡and ¡word) ¡ – Coloring ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Fragmenta:on ¡ Hoard: ¡Superblocks ¡ • Undergrad ¡review: ¡What ¡is ¡it? ¡ ¡Why ¡does ¡it ¡happen? ¡ • At ¡a ¡high ¡level, ¡allocator ¡operates ¡on ¡superblocks ¡ • What ¡is ¡ ¡ – Chunk ¡of ¡(virtually) ¡con:guous ¡pages ¡ – All ¡objects ¡in ¡a ¡superblock ¡are ¡the ¡same ¡size ¡ – Internal ¡fragmenta:on? ¡ • A ¡given ¡superblock ¡is ¡treated ¡as ¡an ¡array ¡of ¡same-­‑ • Wasted ¡space ¡when ¡you ¡round ¡an ¡alloca:on ¡up ¡ – External ¡fragmenta:on? ¡ sized ¡objects ¡ • When ¡you ¡end ¡up ¡with ¡small ¡chunks ¡of ¡free ¡memory ¡that ¡are ¡too ¡ – They ¡generalize ¡to ¡“powers ¡of ¡b ¡> ¡1”; ¡ ¡ small ¡to ¡be ¡useful ¡ – In ¡usual ¡prac:ce, ¡b ¡== ¡2 ¡ • Which ¡kind ¡does ¡our ¡bump ¡allocator ¡have? ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Superblock ¡intui:on ¡ Superblock ¡Intui:on ¡ 256 ¡byte ¡ ¡ Free ¡list ¡in ¡ Store ¡list ¡pointers ¡ object ¡heap ¡ LIFO ¡order ¡ in ¡free ¡objects! ¡ malloc (8); 4 ¡KB ¡page ¡ next ¡ next ¡ next ¡ Free ¡ next ¡ 1) Find ¡the ¡nearest ¡power ¡of ¡2 ¡heap ¡(8) ¡ 4 ¡KB ¡page ¡ 2) Find ¡free ¡object ¡in ¡superblock ¡ next ¡ next ¡ next ¡ 3) Add ¡a ¡superblock ¡if ¡needed. ¡ ¡Goto ¡2. ¡ Each ¡page ¡an ¡ (Free ¡space) ¡ array ¡of ¡ objects ¡ 2 ¡

  3. 9/30/14 ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ malloc ¡(200) ¡ Superblock ¡example ¡ 256 ¡byte ¡ ¡ Pick ¡first ¡free ¡ • Suppose ¡my ¡program ¡allocates ¡objects ¡of ¡sizes: ¡ object ¡heap ¡ object ¡ – 4, ¡5, ¡7, ¡34, ¡and ¡40 ¡bytes. ¡ • How ¡many ¡superblocks ¡do ¡I ¡need ¡(if ¡b ¡==2)? ¡ 4 ¡KB ¡page ¡ next ¡ next ¡ next ¡ next ¡ Free ¡ – 3 ¡– ¡(4, ¡8, ¡and ¡64 ¡byte ¡chunks) ¡ • If ¡I ¡allocate ¡a ¡5 ¡byte ¡object ¡from ¡an ¡8 ¡byte ¡ 4 ¡KB ¡page ¡ superblock, ¡doesn’t ¡that ¡yield ¡internal ¡ fragmenta:on? ¡ next ¡ next ¡ next ¡ – Yes, ¡but ¡it ¡is ¡bounded ¡to ¡< ¡50% ¡ (Free ¡space) ¡ – Give ¡up ¡some ¡space ¡to ¡bound ¡worst ¡case ¡and ¡complexity ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ Memory ¡free ¡ Big ¡objects ¡ • Simple ¡most-­‑recently-­‑used ¡list ¡for ¡a ¡superblock ¡ • If ¡an ¡object ¡size ¡is ¡bigger ¡than ¡half ¡the ¡size ¡of ¡a ¡ superblock, ¡just ¡mmap() ¡it ¡ • How ¡do ¡you ¡tell ¡which ¡superblock ¡an ¡object ¡is ¡from? ¡ – Recall, ¡a ¡superblock ¡is ¡on ¡the ¡order ¡of ¡pages ¡already ¡ – Suppose ¡superblock ¡is ¡8k ¡(2pages) ¡ • What ¡about ¡fragmenta:on? ¡ • And ¡always ¡mapped ¡at ¡an ¡address ¡evenly ¡divisible ¡by ¡8k ¡ – Object ¡at ¡address ¡0x431a01c ¡ ¡ – Example: ¡4097 ¡byte ¡object ¡(1 ¡page ¡+ ¡1 ¡byte) ¡ – Just ¡mask ¡out ¡the ¡low ¡13 ¡bits! ¡ – Argument ¡(preview): ¡More ¡trouble ¡than ¡it ¡is ¡worth ¡ – Came ¡from ¡a ¡superblock ¡that ¡starts ¡at ¡0x431a000 ¡ • Extra ¡bookkeeping, ¡poten:al ¡conten:on, ¡and ¡poten:al ¡bad ¡cache ¡ behavior ¡ ¡ • Simple ¡math ¡can ¡tell ¡you ¡where ¡an ¡object ¡came ¡ from! ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ CSE ¡506: ¡Opera.ng ¡Systems ¡ LIFO ¡ High-­‑level ¡strategy ¡ • Why ¡are ¡objects ¡re-­‑allocated ¡most-­‑recently ¡used ¡ • Allocate ¡a ¡heap ¡for ¡each ¡processor, ¡and ¡one ¡shared ¡ first? ¡ heap ¡ – Aren’t ¡all ¡good ¡OS ¡heuris:cs ¡FIFO? ¡ – Note: ¡not ¡threads, ¡but ¡CPUs ¡ – More ¡likely ¡to ¡be ¡already ¡in ¡cache ¡(hot) ¡ – Can ¡only ¡use ¡as ¡many ¡heaps ¡as ¡CPUs ¡at ¡once ¡ – Recall ¡from ¡undergrad ¡architecture ¡that ¡it ¡takes ¡quite ¡a ¡ – Requires ¡some ¡way ¡to ¡figure ¡out ¡current ¡processor ¡ few ¡cycles ¡to ¡load ¡data ¡into ¡cache ¡from ¡memory ¡ • Try ¡per-­‑CPU ¡heap ¡first ¡ – If ¡it ¡is ¡all ¡the ¡same, ¡let’s ¡try ¡to ¡recycle ¡the ¡object ¡already ¡in ¡ • If ¡no ¡free ¡blocks ¡of ¡right ¡size, ¡then ¡try ¡global ¡heap ¡ our ¡cache ¡ • If ¡that ¡fails, ¡get ¡another ¡superblock ¡for ¡per-­‑CPU ¡heap ¡ 3 ¡

Recommend


More recommend