SlideShare a Scribd company logo
New Dog, Old Tricks:
Running Halo 3 Without a Hard
           Drive
         Mat Noguchi
        BUNGIE Studios
Loading... Done:
How to Think About Content
        Mat Noguchi
       BUNGIE Studios
Next gen is more
• More CPU: 6x or more
• More RAM: 8x
• More GPU: bajillion
Next-gen is more I/O bound
• I/O transfer speed: 2x
• I/O latency: ~1x
• DVD size: ~1x
What is Next-gen streaming?
• For players
  – Minimal load times
  – Wide and deep content
• For the platform
  – Run (well) on all configurations
• For developers
  – Designers
  – Programmers
  – Producers
Overview
•   High level I/O design
•   What to load
•   Loading
•   RTM!
Case study: The Storm
• Total content size: 1,226 MB
• Available content memory: 334.8 MB
PART 1: HIGH LEVEL I/O
DESIGN
Goals
• Minimum quality guarantees
• Maximize I/O performance
• Globally optimizable
Policies
• One system to rule content I/O
• Usage based optimizations
DVD vs. HDD
• DVD
 – 6-18 MB/s
 – 100-240 ms seek times
• HDD
 – 17-30 MB/s
 – 10-30 ms seek times
DVD vs. HDD
               DVD            HDD

Sequential     12 MB/s        17 MB/s
I/O
Random I/O     ~850 kB/s      ~6290 kB/s
               250 ms seeks   37 ms seeks

Reliability    Variable       Constant
DVD vs. HDD
               DVD        HDD

Sequential     Good       Good
I/O
Random I/O     BAD!       Okay

Reliability    Variable   Constant
DVD vs. HDD
               DVD        HDD

Sequential     Good       Good
I/O
Random I/O     BAD!       Okay

Reliability    Variable   Constant
Goals: Maximizing I/O
    performance

MINIMIZE
 SEEKS!
Classifying content by access
• Global data: 49.2 MB
  – Always loaded
  – Metadata
  – References to resources
• Resources: 1,177 MB
  – Everything else 
  – Can be unloaded
Classifying resources by access
• Required
  – Required for correct behavior
    • Textures (N-1 mipmaps)
    • Geometry
    • Animation
• Optional
  – More detailed/richer experience
    • Highest texture mipmap
Goals: Minimum quality
           guarantees
• Required resources
  – HARD CONSTRAINT!
  – Assume this data is available
• Optional resources
  – Flavor!
  – Check this data is available
I/O behavior by resource
• Required resources
  – Synchronous/Blocking
• Optional resources
  – Asynchronous/Background
Sound...
• Streaming sound implies Random I/O
• Is sound Optional?
  – HDD: Yes
  – DVD: Not exactly
Sound...
the big giant screw (again!)




   566
Sound...
     the big giant screw (again!)
• Why so big?
  – Everything makes a sound
  – Repetition is annoying
What sound can we stream?
• Not a lot for DVD
  – Streams == Seeks
  – Seeks == BAD!
• Stream sounds resilient to latency
  – Music
  – Mission dialogue
  – Multiplayer announcer
• Everything for HDD
How can we cull sound?
• Accept repetition
• … except for footsteps
• … and dialogue (crap!)
Why is dialogue so bad?
•   Repetition is annoying
•   Repetition is annoying
•   Repetition is annoying
•   … unless you are making a point
•   Such as: repetition is annoying
AI dialogue tree branch:
             Praise
                                 prs_plr_kll_blt
                  prs_plr_gdgr
                       nd
     prs                         prs_plr_kll_mjr
                  prs_plr_kill
                                 prs_plr_kll_vcl
 prs_plr_arb
                                     _bmp
                                 prs_plr_kll_w
 prs_plr_mc
                                    melee
prs_plr_kll_lot
      s
prs_plr_snipin
      g
Full AI dialogue tree
• (The full dialogue tree makes PowerPoint
  choke)
  – 97 top vocalizations
  – 143 first level vocalizations
  – 23 second level vocalizations
Full AI dialogue tree size
• 295 MB(!), 19788 lines
• Count, Size by specializations
  – 130 MB, 9331 lines for top vocalizations
  – 143 MB, 1214 lines for first level vocalizations
  – 22 MB, 1214 lines for second level
    vocalizations
Shrinking AI dialogue
• Remove virtually all dialogue
• Add back
  – Involuntary dialog
  – Sound designer specified dialog
     • “Take it!”
     • “Found enemy!”
     • “Where did they go?”
This is for DVD-only!
• HDD will always sound great!
So... what?
Checkpoint...
   The Storm: DVD Working Set
• Available memory: 334.8 MB
• DVD working set : 514.2 MB
  – Global data: 49.2 MB
  – Required resources: 465 MB
    •   Textures: 216.6 MB
    •   Geometry: 138 MB
    •   Sound: 70.5 MB
    •   Animation: 39.9 MB
PART 2: WHAT TO LOAD
Mapping resource usage to
           position
NOT DRAWN TO SCALE!
Mapping resource usage to
            position
• Break up into sections, a.k.a BSPs
Mapping resource usage to
         position
Multiple bsps = Zone set
• Example: “Intro”
Multiple bsps = Zone set
• Example: “First Encounter”
Zone set activation volumes
Active zone set: “First
Encounter”
“Intro”


Loading…
done
Checkpoint...
   The Storm: DVD Working Set
• Available memory: 334.8 MB
• DVD working set: 375.8 MB
  – Global data: 49.2 MB
  – Max zone-set resources: 148.7 MB
  – Sandbox resources: 177.9 MB
Scarab
Ghost
Brute
Sandbox resources
• NOT DRAWN TO SCALE!
Restrict sandbox resources per
              zone set
• Zone set: “Intro”

• Disallow:
Restrict sandbox resources per
              zone set
• Zone set: “Intro”
Checkpoint...
       The Storm: Working Set
• Available memory: 334.8 MB
• DVD working set: 308.9 MB
  – Global data: 49.2 MB
  – Max zone-set resources: 259.7 MB
• Available memory > DVD working set
• Hooray!
Checkpoint...
       The Storm: Working Set
• HDD working set: 258.1 MB
  – Global data: 49.2 MB
  – Max zone-set resources: 208.9 MB
Finally!

PART 3: LOADING...
Canonical streaming model

                       Game Thread



            Resourc
Streaming
            e Access
   (I/O)
              State


                         Render
                         Thread
Canonical streaming conflicts

                       Game Thread



            Resourc
Streaming
            e Access
   (I/O)
              State


                         Render
                         Thread
Halo 3 streaming model
Streaming
   (I/O)
                         Game Thread



               Cached
Resourc
              Resourc
e Access
              e Access
  State
                State

                           Render
                           Thread
Halo 3 streaming model
Streaming
   (I/O)
                          Game Thread



                Cached
Resourc
               Resourc
e Access
               e Access
  State
                 State

                            Render
                            Thread
Resource access state
resource             address
<resource>           <address>
<resource>           <address>
<resource>           <address>
…                    …
Generic loading process
• Determine working set
• Load
• Publish
Generic using process
• Grab published access object
• Run frame/tick/loop
• Release published access object
Required loading process
• Determine working set
• Load
• Publish
Required loading process
• Determine working set from active zone
  set
• Blocking Load required resources
• Publish
Transitioning between zone sets
Zone set transitions
Intro <-> First Encounter
Intro <-> First Encounter
Intro <-> First Encounter
Intro <-> First Encounter
Intro -> First Encounter


Loading… done
Checkpoint...
   The Storm: Available memory
• Final build, HDD
  – Available memory: 390.1 MB
  – HDD Max required memory: 258.1 MB
• HDD Available memory: 132 MB!
Generic I/O scheduler



   I/O I/O
     I/O                   I/O
Request
  Request    Scheduler
 Request                 Request
        s
Pop Quiz!
• Optimal # of I/O in flight
  –1
  –2
  –6
  – Infinity
  – None of the above
  – I don’t know
Pop Quiz!
• Optimal # of I/O in flight: Zero
Pop Quiz!
• Optimal # of I/O in flight: 1
Generic I/O scheduler
• Un-bad generic solution
• Not-good specific solution
Optional I/O scheduler
• One I/O at a time
• Fast changeover
• Priority
Optional I/O Scheduler
• Desired resources
  – {A, B, C}
• Loaded resources
  – {C, D, E}
• To-load resources
  – {A, B}
  – Desired - Loaded
Optional I/O scheduler [fix]



Desired                   I/O
 {…}       Scheduler
                        Request
            Loaded
             {…}
Optional I/O priority [fix]

Desired
 Now
 {…}
Desired                     I/O
 Soon       Scheduler
                          Request
  {…}        Loaded
Desired       {…}
 Later
  {…}
Optional I/O optimizations
• Bounded set == bit vector
• Bit vector ordered by optimal load order
• Minimum seeks!
PART 4: RTM!
Total game size
• Total: 15.06 GB
  – Main menu: 91.25 MB
  – Multiplayer: 4.27 GB
  – Campaign: 10.70 GB
Shared resource files
• Commonly used resources in global files
  – Multiplayer & Campaign
  – Campaign only
Total game size, shared maps
• Total: 7.07 GB
  – Main menu: 82.0 MB
  – Shared: 927 MB
  – Multiplayer: 1.67 GB
  – Campaign: 5.37 GB
Super Ninja Art!

FULL GAME OPTIMIZATION:
FRANKENBUILD
Optimizing map layout
• Determine resource “usage”
  – “Usage” == all zone sets is it used in
• Package resources with identical “usage”
Optimizing single map layout

                    Zone
          Zone      usage
          usage      key
           key
                  Zone
                  usage
                   key




        Optimized Map Layout
Optimizing shared map layout
• Determine shared resource “global
  usage”
  – “Global usage” == all maps and zone sets is
    it used
• Package shared resources with identical
  “global usage”
Optimizing shared map

                     Map/Zone
                      usage
       Map/Zone        key
        usage
         key

                  Map/Zone
                   usage
                    key




   Optimized Shared Map Layout
Relink map files
• Obvious diagram (and SmartArt spew)

    Original
     map
                  Optimized
                    map
   Optimized
    layout
Total game size, Frankenbuild
• Total: 5.36 GB
  – Main menu: 52.6 MB
  – Shared: 704 MB
  – Multiplayer: 1.06 GB
  – Campaign: 3.55 GB
Don’t throw stuff away!
         that you need... later
• Don’t unload shared resources
  – Store disk location with each resource before
    loading next map
  – Match resources based on disk location
    before loading more data
• Preload map resources from main-menu
  – Load resources for next map, then associate
    disk location for each resource
Halo 3: Optimized for Hard drive
• Framework for content usage
• Minimize or eliminate load times
• Guaranteed gameplay experience
Target Streaming for Massive
           Damage
Loading___done_gdc_2008

More Related Content

Similar to Loading___done_gdc_2008

Supersize Your Production Pipe
Supersize Your Production PipeSupersize Your Production Pipe
Supersize Your Production Pipe
slantsixgames
 
Confrontation Audio GDC 2009
Confrontation Audio GDC 2009Confrontation Audio GDC 2009
Confrontation Audio GDC 2009
slantsixgames
 
God Of War : post mortem
God Of War : post mortemGod Of War : post mortem
God Of War : post mortem
Mustapha Tachouct
 
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unity Technologies
 
Replication, Durability, and Disaster Recovery
Replication, Durability, and Disaster RecoveryReplication, Durability, and Disaster Recovery
Replication, Durability, and Disaster Recovery
Steven Francia
 
Computer Memory Hierarchy Computer Architecture
Computer Memory Hierarchy Computer ArchitectureComputer Memory Hierarchy Computer Architecture
Computer Memory Hierarchy Computer Architecture
Haris456
 
Maximize Your Production Effort (English)
Maximize Your Production Effort (English)Maximize Your Production Effort (English)
Maximize Your Production Effort (English)
slantsixgames
 
Ceph Object Storage Performance Secrets and Ceph Data Lake Solution
Ceph Object Storage Performance Secrets and Ceph Data Lake SolutionCeph Object Storage Performance Secrets and Ceph Data Lake Solution
Ceph Object Storage Performance Secrets and Ceph Data Lake Solution
Karan Singh
 
Week Nine - Further Hardware
Week Nine - Further HardwareWeek Nine - Further Hardware
Week Nine - Further Hardware
chriswalton
 
Bluray hd
Bluray hdBluray hd
Bluray hd
surana1976
 
AltaVista Search Engine Architecture
AltaVista Search Engine ArchitectureAltaVista Search Engine Architecture
AltaVista Search Engine Architecture
Changshu Liu
 
Managing CD Devices
Managing CD DevicesManaging CD Devices
Managing CD Devices
Amir Villas
 
Scaling Servers and Storage for Film Assets
Scaling Servers and Storage for Film Assets  Scaling Servers and Storage for Film Assets
Scaling Servers and Storage for Film Assets
Perforce
 
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Chris Adamson
 
Technological Innovations for Home Entertainment & Video Storage
 Technological Innovations for Home Entertainment & Video Storage Technological Innovations for Home Entertainment & Video Storage
Technological Innovations for Home Entertainment & Video Storage
CK Chen
 
Disk IO Benchmarking in shared multi-tenant environments
Disk IO Benchmarking in shared multi-tenant environmentsDisk IO Benchmarking in shared multi-tenant environments
Disk IO Benchmarking in shared multi-tenant environments
Rodrigo Campos
 
Better Know an Audio Programmer
Better Know an Audio ProgrammerBetter Know an Audio Programmer
Better Know an Audio Programmer
Ethan Fenn
 
Distributed Data processing in a Cloud
Distributed Data processing in a CloudDistributed Data processing in a Cloud
Distributed Data processing in a Cloudelliando dias
 
CSCI 200 Java Chapter 01
CSCI 200 Java Chapter 01CSCI 200 Java Chapter 01
CSCI 200 Java Chapter 01
DanWooster1
 

Similar to Loading___done_gdc_2008 (20)

Supersize Your Production Pipe
Supersize Your Production PipeSupersize Your Production Pipe
Supersize Your Production Pipe
 
Confrontation Audio GDC 2009
Confrontation Audio GDC 2009Confrontation Audio GDC 2009
Confrontation Audio GDC 2009
 
God Of War : post mortem
God Of War : post mortemGod Of War : post mortem
God Of War : post mortem
 
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
 
Replication, Durability, and Disaster Recovery
Replication, Durability, and Disaster RecoveryReplication, Durability, and Disaster Recovery
Replication, Durability, and Disaster Recovery
 
Computer Memory Hierarchy Computer Architecture
Computer Memory Hierarchy Computer ArchitectureComputer Memory Hierarchy Computer Architecture
Computer Memory Hierarchy Computer Architecture
 
Maximize Your Production Effort (English)
Maximize Your Production Effort (English)Maximize Your Production Effort (English)
Maximize Your Production Effort (English)
 
Ceph Object Storage Performance Secrets and Ceph Data Lake Solution
Ceph Object Storage Performance Secrets and Ceph Data Lake SolutionCeph Object Storage Performance Secrets and Ceph Data Lake Solution
Ceph Object Storage Performance Secrets and Ceph Data Lake Solution
 
Week Nine - Further Hardware
Week Nine - Further HardwareWeek Nine - Further Hardware
Week Nine - Further Hardware
 
Bluray hd
Bluray hdBluray hd
Bluray hd
 
AltaVista Search Engine Architecture
AltaVista Search Engine ArchitectureAltaVista Search Engine Architecture
AltaVista Search Engine Architecture
 
Audio process mapping
Audio process mappingAudio process mapping
Audio process mapping
 
Managing CD Devices
Managing CD DevicesManaging CD Devices
Managing CD Devices
 
Scaling Servers and Storage for Film Assets
Scaling Servers and Storage for Film Assets  Scaling Servers and Storage for Film Assets
Scaling Servers and Storage for Film Assets
 
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
 
Technological Innovations for Home Entertainment & Video Storage
 Technological Innovations for Home Entertainment & Video Storage Technological Innovations for Home Entertainment & Video Storage
Technological Innovations for Home Entertainment & Video Storage
 
Disk IO Benchmarking in shared multi-tenant environments
Disk IO Benchmarking in shared multi-tenant environmentsDisk IO Benchmarking in shared multi-tenant environments
Disk IO Benchmarking in shared multi-tenant environments
 
Better Know an Audio Programmer
Better Know an Audio ProgrammerBetter Know an Audio Programmer
Better Know an Audio Programmer
 
Distributed Data processing in a Cloud
Distributed Data processing in a CloudDistributed Data processing in a Cloud
Distributed Data processing in a Cloud
 
CSCI 200 Java Chapter 01
CSCI 200 Java Chapter 01CSCI 200 Java Chapter 01
CSCI 200 Java Chapter 01
 

Recently uploaded

Meet Crazyjamjam - A TikTok Sensation | Blog Eternal
Meet Crazyjamjam - A TikTok Sensation | Blog EternalMeet Crazyjamjam - A TikTok Sensation | Blog Eternal
Meet Crazyjamjam - A TikTok Sensation | Blog Eternal
Blog Eternal
 
Christina's Baby Shower Game June 2024.pptx
Christina's Baby Shower Game June 2024.pptxChristina's Baby Shower Game June 2024.pptx
Christina's Baby Shower Game June 2024.pptx
madeline604788
 
The Evolution of Animation in Film - Mark Murphy Director
The Evolution of Animation in Film - Mark Murphy DirectorThe Evolution of Animation in Film - Mark Murphy Director
The Evolution of Animation in Film - Mark Murphy Director
Mark Murphy Director
 
Scandal! Teasers June 2024 on etv Forum.co.za
Scandal! Teasers June 2024 on etv Forum.co.zaScandal! Teasers June 2024 on etv Forum.co.za
Scandal! Teasers June 2024 on etv Forum.co.za
Isaac More
 
I Know Dino Trivia: Part 3. Test your dino knowledge
I Know Dino Trivia: Part 3. Test your dino knowledgeI Know Dino Trivia: Part 3. Test your dino knowledge
I Know Dino Trivia: Part 3. Test your dino knowledge
Sabrina Ricci
 
Tom Selleck Net Worth: A Comprehensive Analysis
Tom Selleck Net Worth: A Comprehensive AnalysisTom Selleck Net Worth: A Comprehensive Analysis
Tom Selleck Net Worth: A Comprehensive Analysis
greendigital
 
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdfMaximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
Xtreame HDTV
 
This Is The First All Category Quiz That I Made
This Is The First All Category Quiz That I MadeThis Is The First All Category Quiz That I Made
This Is The First All Category Quiz That I Made
Aarush Ghate
 
Panchayat Season 3 - Official Trailer.pdf
Panchayat Season 3 - Official Trailer.pdfPanchayat Season 3 - Official Trailer.pdf
Panchayat Season 3 - Official Trailer.pdf
Suleman Rana
 
240529_Teleprotection Global Market Report 2024.pdf
240529_Teleprotection Global Market Report 2024.pdf240529_Teleprotection Global Market Report 2024.pdf
240529_Teleprotection Global Market Report 2024.pdf
Madhura TBRC
 
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdfCreate a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
Genny Knight
 
A TO Z INDIA Monthly Magazine - JUNE 2024
A TO Z INDIA Monthly Magazine - JUNE 2024A TO Z INDIA Monthly Magazine - JUNE 2024
A TO Z INDIA Monthly Magazine - JUNE 2024
Indira Srivatsa
 
Young Tom Selleck: A Journey Through His Early Years and Rise to Stardom
Young Tom Selleck: A Journey Through His Early Years and Rise to StardomYoung Tom Selleck: A Journey Through His Early Years and Rise to Stardom
Young Tom Selleck: A Journey Through His Early Years and Rise to Stardom
greendigital
 
Skeem Saam in June 2024 available on Forum
Skeem Saam in June 2024 available on ForumSkeem Saam in June 2024 available on Forum
Skeem Saam in June 2024 available on Forum
Isaac More
 
Hollywood Actress - The 250 hottest gallery
Hollywood Actress - The 250 hottest galleryHollywood Actress - The 250 hottest gallery
Hollywood Actress - The 250 hottest gallery
Zsolt Nemeth
 
Reimagining Classics - What Makes a Remake a Success
Reimagining Classics - What Makes a Remake a SuccessReimagining Classics - What Makes a Remake a Success
Reimagining Classics - What Makes a Remake a Success
Mark Murphy Director
 
Meet Dinah Mattingly – Larry Bird’s Partner in Life and Love
Meet Dinah Mattingly – Larry Bird’s Partner in Life and LoveMeet Dinah Mattingly – Larry Bird’s Partner in Life and Love
Meet Dinah Mattingly – Larry Bird’s Partner in Life and Love
get joys
 
Treasure Hunt Puzzles, Treasure Hunt Puzzles online
Treasure Hunt Puzzles, Treasure Hunt Puzzles onlineTreasure Hunt Puzzles, Treasure Hunt Puzzles online
Treasure Hunt Puzzles, Treasure Hunt Puzzles online
Hidden Treasure Hunts
 
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
Rodney Thomas Jr
 

Recently uploaded (19)

Meet Crazyjamjam - A TikTok Sensation | Blog Eternal
Meet Crazyjamjam - A TikTok Sensation | Blog EternalMeet Crazyjamjam - A TikTok Sensation | Blog Eternal
Meet Crazyjamjam - A TikTok Sensation | Blog Eternal
 
Christina's Baby Shower Game June 2024.pptx
Christina's Baby Shower Game June 2024.pptxChristina's Baby Shower Game June 2024.pptx
Christina's Baby Shower Game June 2024.pptx
 
The Evolution of Animation in Film - Mark Murphy Director
The Evolution of Animation in Film - Mark Murphy DirectorThe Evolution of Animation in Film - Mark Murphy Director
The Evolution of Animation in Film - Mark Murphy Director
 
Scandal! Teasers June 2024 on etv Forum.co.za
Scandal! Teasers June 2024 on etv Forum.co.zaScandal! Teasers June 2024 on etv Forum.co.za
Scandal! Teasers June 2024 on etv Forum.co.za
 
I Know Dino Trivia: Part 3. Test your dino knowledge
I Know Dino Trivia: Part 3. Test your dino knowledgeI Know Dino Trivia: Part 3. Test your dino knowledge
I Know Dino Trivia: Part 3. Test your dino knowledge
 
Tom Selleck Net Worth: A Comprehensive Analysis
Tom Selleck Net Worth: A Comprehensive AnalysisTom Selleck Net Worth: A Comprehensive Analysis
Tom Selleck Net Worth: A Comprehensive Analysis
 
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdfMaximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdf
 
This Is The First All Category Quiz That I Made
This Is The First All Category Quiz That I MadeThis Is The First All Category Quiz That I Made
This Is The First All Category Quiz That I Made
 
Panchayat Season 3 - Official Trailer.pdf
Panchayat Season 3 - Official Trailer.pdfPanchayat Season 3 - Official Trailer.pdf
Panchayat Season 3 - Official Trailer.pdf
 
240529_Teleprotection Global Market Report 2024.pdf
240529_Teleprotection Global Market Report 2024.pdf240529_Teleprotection Global Market Report 2024.pdf
240529_Teleprotection Global Market Report 2024.pdf
 
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdfCreate a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
Create a Seamless Viewing Experience with Your Own Custom OTT Player.pdf
 
A TO Z INDIA Monthly Magazine - JUNE 2024
A TO Z INDIA Monthly Magazine - JUNE 2024A TO Z INDIA Monthly Magazine - JUNE 2024
A TO Z INDIA Monthly Magazine - JUNE 2024
 
Young Tom Selleck: A Journey Through His Early Years and Rise to Stardom
Young Tom Selleck: A Journey Through His Early Years and Rise to StardomYoung Tom Selleck: A Journey Through His Early Years and Rise to Stardom
Young Tom Selleck: A Journey Through His Early Years and Rise to Stardom
 
Skeem Saam in June 2024 available on Forum
Skeem Saam in June 2024 available on ForumSkeem Saam in June 2024 available on Forum
Skeem Saam in June 2024 available on Forum
 
Hollywood Actress - The 250 hottest gallery
Hollywood Actress - The 250 hottest galleryHollywood Actress - The 250 hottest gallery
Hollywood Actress - The 250 hottest gallery
 
Reimagining Classics - What Makes a Remake a Success
Reimagining Classics - What Makes a Remake a SuccessReimagining Classics - What Makes a Remake a Success
Reimagining Classics - What Makes a Remake a Success
 
Meet Dinah Mattingly – Larry Bird’s Partner in Life and Love
Meet Dinah Mattingly – Larry Bird’s Partner in Life and LoveMeet Dinah Mattingly – Larry Bird’s Partner in Life and Love
Meet Dinah Mattingly – Larry Bird’s Partner in Life and Love
 
Treasure Hunt Puzzles, Treasure Hunt Puzzles online
Treasure Hunt Puzzles, Treasure Hunt Puzzles onlineTreasure Hunt Puzzles, Treasure Hunt Puzzles online
Treasure Hunt Puzzles, Treasure Hunt Puzzles online
 
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...
 

Loading___done_gdc_2008

  • 1. New Dog, Old Tricks: Running Halo 3 Without a Hard Drive Mat Noguchi BUNGIE Studios
  • 2. Loading... Done: How to Think About Content Mat Noguchi BUNGIE Studios
  • 3. Next gen is more • More CPU: 6x or more • More RAM: 8x • More GPU: bajillion
  • 4. Next-gen is more I/O bound • I/O transfer speed: 2x • I/O latency: ~1x • DVD size: ~1x
  • 5. What is Next-gen streaming? • For players – Minimal load times – Wide and deep content • For the platform – Run (well) on all configurations • For developers – Designers – Programmers – Producers
  • 6. Overview • High level I/O design • What to load • Loading • RTM!
  • 7. Case study: The Storm • Total content size: 1,226 MB • Available content memory: 334.8 MB
  • 8. PART 1: HIGH LEVEL I/O DESIGN
  • 9. Goals • Minimum quality guarantees • Maximize I/O performance • Globally optimizable
  • 10. Policies • One system to rule content I/O • Usage based optimizations
  • 11. DVD vs. HDD • DVD – 6-18 MB/s – 100-240 ms seek times • HDD – 17-30 MB/s – 10-30 ms seek times
  • 12. DVD vs. HDD DVD HDD Sequential 12 MB/s 17 MB/s I/O Random I/O ~850 kB/s ~6290 kB/s 250 ms seeks 37 ms seeks Reliability Variable Constant
  • 13. DVD vs. HDD DVD HDD Sequential Good Good I/O Random I/O BAD! Okay Reliability Variable Constant
  • 14. DVD vs. HDD DVD HDD Sequential Good Good I/O Random I/O BAD! Okay Reliability Variable Constant
  • 15. Goals: Maximizing I/O performance MINIMIZE SEEKS!
  • 16. Classifying content by access • Global data: 49.2 MB – Always loaded – Metadata – References to resources • Resources: 1,177 MB – Everything else  – Can be unloaded
  • 17. Classifying resources by access • Required – Required for correct behavior • Textures (N-1 mipmaps) • Geometry • Animation • Optional – More detailed/richer experience • Highest texture mipmap
  • 18. Goals: Minimum quality guarantees • Required resources – HARD CONSTRAINT! – Assume this data is available • Optional resources – Flavor! – Check this data is available
  • 19. I/O behavior by resource • Required resources – Synchronous/Blocking • Optional resources – Asynchronous/Background
  • 20. Sound... • Streaming sound implies Random I/O • Is sound Optional? – HDD: Yes – DVD: Not exactly
  • 21. Sound... the big giant screw (again!) 566
  • 22. Sound... the big giant screw (again!) • Why so big? – Everything makes a sound – Repetition is annoying
  • 23. What sound can we stream? • Not a lot for DVD – Streams == Seeks – Seeks == BAD! • Stream sounds resilient to latency – Music – Mission dialogue – Multiplayer announcer • Everything for HDD
  • 24. How can we cull sound? • Accept repetition • … except for footsteps • … and dialogue (crap!)
  • 25. Why is dialogue so bad? • Repetition is annoying • Repetition is annoying • Repetition is annoying • … unless you are making a point • Such as: repetition is annoying
  • 26. AI dialogue tree branch: Praise prs_plr_kll_blt prs_plr_gdgr nd prs prs_plr_kll_mjr prs_plr_kill prs_plr_kll_vcl prs_plr_arb _bmp prs_plr_kll_w prs_plr_mc melee prs_plr_kll_lot s prs_plr_snipin g
  • 27. Full AI dialogue tree • (The full dialogue tree makes PowerPoint choke) – 97 top vocalizations – 143 first level vocalizations – 23 second level vocalizations
  • 28. Full AI dialogue tree size • 295 MB(!), 19788 lines • Count, Size by specializations – 130 MB, 9331 lines for top vocalizations – 143 MB, 1214 lines for first level vocalizations – 22 MB, 1214 lines for second level vocalizations
  • 29. Shrinking AI dialogue • Remove virtually all dialogue • Add back – Involuntary dialog – Sound designer specified dialog • “Take it!” • “Found enemy!” • “Where did they go?”
  • 30. This is for DVD-only! • HDD will always sound great!
  • 32. Checkpoint... The Storm: DVD Working Set • Available memory: 334.8 MB • DVD working set : 514.2 MB – Global data: 49.2 MB – Required resources: 465 MB • Textures: 216.6 MB • Geometry: 138 MB • Sound: 70.5 MB • Animation: 39.9 MB
  • 33. PART 2: WHAT TO LOAD
  • 34. Mapping resource usage to position NOT DRAWN TO SCALE!
  • 35. Mapping resource usage to position • Break up into sections, a.k.a BSPs
  • 36. Mapping resource usage to position
  • 37. Multiple bsps = Zone set • Example: “Intro”
  • 38. Multiple bsps = Zone set • Example: “First Encounter”
  • 39. Zone set activation volumes Active zone set: “First Encounter” “Intro” Loading… done
  • 40. Checkpoint... The Storm: DVD Working Set • Available memory: 334.8 MB • DVD working set: 375.8 MB – Global data: 49.2 MB – Max zone-set resources: 148.7 MB – Sandbox resources: 177.9 MB
  • 42. Ghost
  • 43. Brute
  • 44. Sandbox resources • NOT DRAWN TO SCALE!
  • 45. Restrict sandbox resources per zone set • Zone set: “Intro” • Disallow:
  • 46. Restrict sandbox resources per zone set • Zone set: “Intro”
  • 47. Checkpoint... The Storm: Working Set • Available memory: 334.8 MB • DVD working set: 308.9 MB – Global data: 49.2 MB – Max zone-set resources: 259.7 MB • Available memory > DVD working set • Hooray!
  • 48. Checkpoint... The Storm: Working Set • HDD working set: 258.1 MB – Global data: 49.2 MB – Max zone-set resources: 208.9 MB
  • 50. Canonical streaming model Game Thread Resourc Streaming e Access (I/O) State Render Thread
  • 51. Canonical streaming conflicts Game Thread Resourc Streaming e Access (I/O) State Render Thread
  • 52. Halo 3 streaming model Streaming (I/O) Game Thread Cached Resourc Resourc e Access e Access State State Render Thread
  • 53. Halo 3 streaming model Streaming (I/O) Game Thread Cached Resourc Resourc e Access e Access State State Render Thread
  • 54. Resource access state resource address <resource> <address> <resource> <address> <resource> <address> … …
  • 55. Generic loading process • Determine working set • Load • Publish
  • 56. Generic using process • Grab published access object • Run frame/tick/loop • Release published access object
  • 57. Required loading process • Determine working set • Load • Publish
  • 58. Required loading process • Determine working set from active zone set • Blocking Load required resources • Publish
  • 61. Intro <-> First Encounter
  • 62. Intro <-> First Encounter
  • 63. Intro <-> First Encounter
  • 64. Intro <-> First Encounter
  • 65. Intro -> First Encounter Loading… done
  • 66. Checkpoint... The Storm: Available memory • Final build, HDD – Available memory: 390.1 MB – HDD Max required memory: 258.1 MB • HDD Available memory: 132 MB!
  • 67. Generic I/O scheduler I/O I/O I/O I/O Request Request Scheduler Request Request s
  • 68. Pop Quiz! • Optimal # of I/O in flight –1 –2 –6 – Infinity – None of the above – I don’t know
  • 69. Pop Quiz! • Optimal # of I/O in flight: Zero
  • 70. Pop Quiz! • Optimal # of I/O in flight: 1
  • 71. Generic I/O scheduler • Un-bad generic solution • Not-good specific solution
  • 72. Optional I/O scheduler • One I/O at a time • Fast changeover • Priority
  • 73. Optional I/O Scheduler • Desired resources – {A, B, C} • Loaded resources – {C, D, E} • To-load resources – {A, B} – Desired - Loaded
  • 74. Optional I/O scheduler [fix] Desired I/O {…} Scheduler Request Loaded {…}
  • 75. Optional I/O priority [fix] Desired Now {…} Desired I/O Soon Scheduler Request {…} Loaded Desired {…} Later {…}
  • 76. Optional I/O optimizations • Bounded set == bit vector • Bit vector ordered by optimal load order • Minimum seeks!
  • 78. Total game size • Total: 15.06 GB – Main menu: 91.25 MB – Multiplayer: 4.27 GB – Campaign: 10.70 GB
  • 79. Shared resource files • Commonly used resources in global files – Multiplayer & Campaign – Campaign only
  • 80. Total game size, shared maps • Total: 7.07 GB – Main menu: 82.0 MB – Shared: 927 MB – Multiplayer: 1.67 GB – Campaign: 5.37 GB
  • 81. Super Ninja Art! FULL GAME OPTIMIZATION: FRANKENBUILD
  • 82. Optimizing map layout • Determine resource “usage” – “Usage” == all zone sets is it used in • Package resources with identical “usage”
  • 83. Optimizing single map layout Zone Zone usage usage key key Zone usage key Optimized Map Layout
  • 84. Optimizing shared map layout • Determine shared resource “global usage” – “Global usage” == all maps and zone sets is it used • Package shared resources with identical “global usage”
  • 85. Optimizing shared map Map/Zone usage Map/Zone key usage key Map/Zone usage key Optimized Shared Map Layout
  • 86. Relink map files • Obvious diagram (and SmartArt spew) Original map Optimized map Optimized layout
  • 87. Total game size, Frankenbuild • Total: 5.36 GB – Main menu: 52.6 MB – Shared: 704 MB – Multiplayer: 1.06 GB – Campaign: 3.55 GB
  • 88. Don’t throw stuff away! that you need... later • Don’t unload shared resources – Store disk location with each resource before loading next map – Match resources based on disk location before loading more data • Preload map resources from main-menu – Load resources for next map, then associate disk location for each resource
  • 89. Halo 3: Optimized for Hard drive • Framework for content usage • Minimize or eliminate load times • Guaranteed gameplay experience
  • 90. Target Streaming for Massive Damage

Editor's Notes

  1. Please turn off your cell phones, blah blahblah.
  2. Next-gen means more. In the transition from Xbox 1 to Xbox 360 we have seen the following hardware gains: From a single processor to a 6 core processor64 MB to 512 MBAnd a bajillion fold increase in GPU power and flexibilityAnd of course, like a goldfish in a bigger fishbowl, next-gen games have gotten a lot bigger to take advantage of these hardware gains.Unfortunately, the mechanism we use to distribute and load games hasn’t seen the same increase in power or capability.
  3. Average transfer rate has gone up from 6 MB/s to 12 MB/sseek times have stayed relatively the sameand the DVD size hasn’t changed much either. This means that, all things being equal, next-gen games will be I/O bound.But this also means that there is a next-gen opportunity in streaming, that is, improving how your game handles I/O.
  4. What should streaming do for next-gen games? It means different things for different people.For the players, it means minimizing load times and providing access to a wide and deep variety of content.For the platform, it means running on all the SKUs, preferably well. In our case, that means running both with and without a hard drive on the Xbox 360.But what should it do for the people making the game? For developers, it should make it easier to think about content at a very high level. Designers should be able to create levels without worrying about individual asset placement on disk. Programmers shouldn’t have to worry about custom I/O code to load content. And producers should be able to create content budgets that are real and enforceable.
  5. Before we dive into the Halo 3 streaming system, here’s a quick overview of what we’ll be covering.First, we’ll take a look at I/O from a very high level perspective. Then, we’ll figure out what to load, how load it, and finally put it all together and ship.
  6. And, in order to give some context to this, we’ll be taking a look at the fifth level in Halo 3, The Storm.The total size of The storm is about 1.2 GB, and after factoring in the Xbox system reserve and game overhead, we have about 335 MB of memory available for content. This is a lower bound on memory, based on our testing builds. The full release build has about 50 MB more, but we use this as our minimum guaranteed memory size so that we can test all our levels.
  7. First things first, we need to understand how we get data from a DVD into memory at a very high level. Well, we don’t *need* to, but it will really help us later on.
  8. Globally optimizable: as we will see later, local optimizations, i.e., sorting I/O requests individually, will not scale to Halo 3.Also, don’t want to have to run game to optimize streaming
  9. So before we dive in to the nitty gritty, we’re going to establish some streaming policies up front.First, we’re going to have only one system in charge of content I/O. This means that everything else, like the renderer, AI, sound, physics, etc., will not perform I/O directly. This will allow for some pretty nifty optimizations, which we’ll get to later.And secondly, we’re going to optimize I/O based on how the game uses content,
  10. Let’s take a look at
  11. Sequential I/O: expected bandwidthRandom I/O: expected bandwidth with expected seek times, latency based on worst possible seek times + time to read 128k, the I/O request quantum on windows DVD: 12 MB/s with 140 ms seek times, 240 ms worst case seek HDD: 17 MB/s with 13 ms seek times, 30 ms worst case seekReliability: how constant are the numbers? DVD: degrades with state of media HDD: relatively constant, assuming mostly static files
  12. Here’s another way to look at the data; both DVD and hard drives are good at sequential I/O, but DVDs are really bad at random I/O, and hard drives are only okay. This means that if we optimize how we load data off the DVD, we will also optimize how we load off the hard drive.[Insert more generic table here, i.e. DVDs and HDDs good at sequential I/O, DVDs really bad at random I/O]
  13. In other words, the performance of random I/O is why streaming is hard.[Hilight random I/O section: THIS IS WHY I’M UP HERE!]
  14. And so maximizing I/O performance is all about minimizing seeks.
  15. So how does Halo 3 use content?At a very high level, we can split content into two types. The first is Mapping content access patterns to storage access patterns[Need to look at data from a high level to classify usage][data that affects game logic: high level logic data, mechanics, references to data that can be unloaded]
  16. We can also split resources into two major groupsrequired resources, that is, content required for correct behavior; some examples are the mipmaps of a texture, physics and render geometry, animation. The rest is are optional: this is content that provides a richer and more detailed experience, but the game will still play reasonably well if we never load it. This includes the base level mipmap for textures.[Required == game doesn’t work without this data][Optional == may never be loaded]
  17. A more generic way to think of resources is this:Required resources are a constraint that the streaming system must satisfy because the game will assume that this data is available when it is needed. On the other hand, optional resources are basically flavor, and the game will check that they are available before using them.
  18. In terms of I/O behavior, if we need a required resource, we will block for it, whereas if we need an optional resource, we will load it in the background.
  19. So hopefully you noticed that sound was both optional and required. But isn’t sound just optional? I mean, can’t you just stream all of it? It depends.Streaming all of sound means that we will probably be streaming multiple sounds at once. Streaming multiple sounds requires random I/O. Which means that for the hard drive case, we can treat all sound as optional, but for the DVD-only case, it’s a bit more complicated.In an ideal world, we would treat sound as required off the DVD and just load it all into memory.Of course, in an ideal world, communism would work.
  20. In reality, that just won’t work. Sound is by far the biggest resource type we have.The Storm has 566 MB of sound, or 46% of the entire size of the level.
  21. Why on earth do we have so much sound?It’s not because we have an overactive sound team.In Halo, the ultimate goal for audio is that everything that can make a sound should make a sound. And we have a wide range of things that can make sound: weapons, vehicles, music, ambience, things that roll, things that slide, things that collide, things that talk, things that walk. In order to provide an immersive sound experience, all these things and more need sound.And we also need a number of permutations for each kind of sound, because the brain can recognize repetition pretty easily, and it can get really annoying for a lot of sounds.
  22. So can we stream anything? Well, a little bit, but not too much. Each sound we stream will cause a seek, and seeking on the DVD is bad.But if we restrict the sounds we stream to those that are resilient to latency, that is, they don’t need to be synchronized to some dynamic game behavior, and we limit the number of sounds we stream, we can stream a few sounds, like music, mission dialogue (like Cortana yelling to you about a wildcat destabilization) and the multiplayer announcer. Everything else will need to be loaded into memory somehow.On the flip side, seeking on the hard drive is much less bad, so we can stream all sound off the hard drive, with some amount of caching in memory so that frequently played sounds won’t need I/O.[Impulse sounds vs. persistent sounds][latency requirements][More streaming == more seeking!]For DVD, Seeks == latency, decreases available disk bandwidthFor HDD, seek time is low enough to be unnoticableWe minimize the number of streams we have
  23. So for the DVD, we need to trim down what sounds we will consider required. To do so, we will remove additional permutations for all sound, leaving a single sound for most things.Except for footsteps; we’ll leave 3 permutations for that.And AI dialogue. We need to treat this separately.
  24. Why do we need to treat dialogue separately?First of all, repetition is annoyingAlso repetition is annoyingAnd furthermore repetition is annoyingUnless you are trying to emphasize a particular pointLike repetition is annoying
  25. Well that’s great. So what can we do?If you look at the AI dialogue set as a whole, it’s basically a very wide and shallow tree. This is the praise branch of the dialogue tree, which is pretty representative of the whole tree. Each piece of dialogue plays based on some sort of trigger; some examples are:Generic praise.Praising the player as the arbiter.Praising the player for a kill.Praising the player for killing a major bad guy.The specific triggers aren’t that important; what is important is the shape of this branch.
  26. The overall dialogue tree has a similar shape, but it’s too big to show in this slide.The basic shape is:97 top vocalizations143 first level vocalizations23 second level vocalizationsSo maybe we can cull the bottom two levels and just leave the generic dialogue. That should work, right?
  27. Nope. AI dialogue is just too big.It’s over half the sound footprint, and the top two levels are bulk of it.
  28. So instead, we’ll sacrifice a bulk of AI dialogue when running off the DVD, but add back involuntary dialogue which is immediate reactions to events like getting shot, or dying, and some triggers specified by the sound designers:Take it!Found a bad guy!Lost the bad guy.
  29. And just a reminder, we only cull sounds running off the DVD. With a hard drive, you’ll hear everything.
  30. We’ve managed to classify content into one of three categories, global, required, and optional, but why does this matter?If required resources must be loaded for the game to work correctly, then we must ensure that the working set of global data and required resources fits within available memory.
  31. And so just by classifying how we use data, we can see exactly what we need to worry about to run Halo 3 off a hard drive.
  32. Now we need to figure out how to shrink the working set even further. In other words, we need to figure out just what we really needed loaded.
  33. [position determines which parts of the level to render]
  34. [position determines which parts of the level to render]
  35. [if a level is broken up into reasonable sections, straightforward to determine what sections you are in]
  36. [Red shows which section we would render]
  37. [designer can select multiple sections to create zone-sets, i.e., self-contained areas of a level][they mostly overlap][Nice way to encapsulate level progression[only one zone set can be active at any time][Also, no loading screens while inside a zone set]
  38. [Designer also specifies triggers to transition from one zone set to the next]E.g.: activate “First encounter”
  39. Restricting data based on where you are shrinks the working set down to ~376 MB, which split into 49 MB for global data, 149 MB for the biggest zone set in terms of required resources, and sandbox resources. What are sandbox resources?Sandbox resources are resources that are used by the dynamic objects in the game.
  40. Like the scarab
  41. Ghost
  42. And brute.
  43. Sandboxy stuff can move all across the map, making any sandbox object potentially loaded.[animation]And since we’re worried about worst-case working set size, we need to somehow restrict sandbox resources.
  44. [Specify stuff that can’t be loaded in a zone set], [e.g., disallow scarab][Helps bound and shrink worst case memory usage for every zone set]
  45. If you ever enter zone set Intro, we’ll unload the scarab.
  46. Restricting sandbox resources gets us down to 309 MB without a hard drive, which just barely fits in available memory. In other words, we can run without a hard drive!Hooray!
  47. And just for reference, the working set for the hard drive case is 258 MB.
  48. Now we need to figure out how to actually load all this stuff.
  49. The red arrows show what actions need to be synchronized. All updates from the streaming system must be synchronized with the all thread accesses, and vice versa. There are a wide range of synchronization strategies, from coarse-grained synchronization, which reduces overhead for more blocking, to fine-grained synchronization, which reduces blocking with the cost of additional overhead.[Red is access that needs to be somewhat synchronized][All updates must be synchronized with all access lifetimes][Fine grained access is more overhead for more flexibility][Coarse grained access is less overhead and less flexibility; updates need to block until all threads are done with access state]
  50. We chose coarse grained, with a twist. Instead of synchronizing every action, we publish a copy of the resource access state. This allows us to only synchronize between copying and accessing.If you look closely at this graph and kind of squint and turn your head sideways, it looks an awful lot like CPU/GPU/frame buffer synchronization. And we can use similar techniques to decouple it further.(looks like CPU/GPU/frame buffer synchronization)
  51. [Can double-buffer or triple buffer for more asynchronous operation][allow streaming and access to run fully asynchronously, at the cost of some memory, namely, resources that the streaming system wants to unload that are currently in use by the various threads]
  52. [resource, address pairs][Contained in a resource access object]
  53. How do we get rid of load times?These are all the possible zone sets, along with how you transition between them[Need to know where you are going to figure out what to load next BEFORE you need it]
  54. [Hard and brittle to express directly]
  55. [Specify transition triggers][Yellow blocks are transition triggers][Red blocks are activation triggers]
  56. [Specify transition triggers][Yellow blocks are transition triggers][Red blocks are activation triggers]
  57. [If we use the union of zone sets, we can blow our space budgets if one or more of the zone sets is already at the limit]
  58. [Instead, keep the intersection of zone sets in memory and load the rest of the destination zone set in background]
  59. Hey, look at all this memory!Let’s use it for optional resources! And load it in the background!
  60. [requests come in -> scheduler ->requests come out][typical scheduler is a queue or priority queue]
  61. Not a bad solution for generic I/O scheduler, we use itEasily overwhelmed by resource I/O requests. Scheduler logic can be more complex than it needs to be for streaming.
  62. [Set of desired optional resources]
  63. [Set of loaded optional resources]
  64. [Set of desired optional resources][Set of to-load optional resources== desired – loaded][Process to-load set one element at a time]
  65. Instead of submitting individual requests to the I/O system, we submit all the requests to the Optional I/O scheduler and let it submit an individual request to the I/O system.Fast changeover since we can modify the desired set at will; the only changeover overhead is for I/O requests in flight
  66. [Generate one desired set per priority], process in priority order, stop processing when I/O is issued or cannot succeedMake desired font white (yay!)
  67. Use same strategy to optimize shared maps
  68. [Scale down inputs]