35
POOLING IS MAGIC PRACTICAL RESOURCE MANAGEMENT FOR MOBILE DEVICES

Practical resource management for mobile devices: Pooling is magic

Embed Size (px)

DESCRIPTION

A collection of advices and optimisations for efficient use of resources on mobile devices

Citation preview

Page 1: Practical resource management for mobile devices: Pooling is magic

P O O L I N G I S M A G I CP R A C T I C A L R E S O U R C E M A N A G E M E N T F O R M O B I L E D E V I C E S

Page 2: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

Page 3: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

• Battery is limited

Page 4: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

• Battery is limited

• Processing power is limited

Page 5: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

• Battery is limited

• Processing power is limited

• Storage is limited

Page 6: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

• Battery is limited

• Processing power is limited

• Storage is limited

• RAM is limited

Page 7: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T M O B I L E

• Battery is limited

• Processing power is limited

• Storage is limited

• RAM is limited

• Ubiquitous

Page 8: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

Page 9: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

• Consume all of the CPU

Page 10: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

• Consume all of the CPU

• Consume all of the GPU

Page 11: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

• Consume all of the CPU

• Consume all of the GPU

• Can consume a lot of storage space

Page 12: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

• Consume all of the CPU

• Consume all of the GPU

• Can consume a lot of storage space

• Consume all of RAM

Page 13: Practical resource management for mobile devices: Pooling is magic

W H AT D O W E K N O W A B O U T G A M E S

• Consume all of the CPU

• Consume all of the GPU

• Can consume a lot of storage space

• Consume all of RAM

• Thats what people do on mobile

Page 14: Practical resource management for mobile devices: Pooling is magic
Page 15: Practical resource management for mobile devices: Pooling is magic

R E D U C E B AT T E R Y C O N S U M P T I O N

• Reduce your network activity

• Every time cell radio is activated for 20-30 seconds

• Batch requests

• Prefetch as much data as possible

• Maximize bandwidth usage

• Reduce storage activity

• Don’t keep threads busy for no reason

Page 16: Practical resource management for mobile devices: Pooling is magic

R E D U C E A P P L I C AT I O N S I Z E

• Different assets for different device categories

• Use a smaller runtime if available

• Use texture atlases

• Enable batch drawing

• Less memory

• Use compressed textures where possible

• Use WebP for uncompressed images

Page 17: Practical resource management for mobile devices: Pooling is magic

G A M E S A R E D I F F E R E N T

Page 18: Practical resource management for mobile devices: Pooling is magic

G A M E S A R E D I F F E R E N T

• A lot is known in advance:

• Usage patterns are known

• Data dependencies are known

• Asset restrictions are known

Page 19: Practical resource management for mobile devices: Pooling is magic

U S E Y O U R K N O W L E D G E

Page 20: Practical resource management for mobile devices: Pooling is magic

U S E Y O U R K N O W L E D G E

• Set restrictions for designers and artists

• Custom build process:

• Use available tools

• Write your own

Page 21: Practical resource management for mobile devices: Pooling is magic

M E M O R Y A L L O C AT I O N PAT T E R S

• Application scope (allocated at app start, freed on shutdown)

• Level scope (allocated at level start, freed on level end)

• Frame scope (allocated for one frame, sometimes for two)

• Temporary allocations

Page 22: Practical resource management for mobile devices: Pooling is magic

M E M O R Y A L L O C AT I O N PAT T E R N S

• Grab all required memory once on app start - this is all you will have

• Divide it between several heaps for different subsystems (avoids fragmentation, decoupling)

• Use stack allocations where possible (alloca, structs, static arrays)

Page 23: Practical resource management for mobile devices: Pooling is magic

G O T TA G O FA S T

• Linear allocator:

• Just increase the pointer and adjust for alignment

• As fast as it can get

• Free all memory at once (reset pointer)

Page 24: Practical resource management for mobile devices: Pooling is magic

L I N E A R A L L O C AT O R

• Can only free in reverse order (better free all at once at scope exit)

• How do we deal with temporary allocations?

• Separate heap for temporaries?

• Nope! Double-ended linear allocator

• What about cleanup?

• Scope stack (http://dice.se/publications/scope-stack-allocation/)

Page 25: Practical resource management for mobile devices: Pooling is magic

B U T W A I T, W H AT A B O U T

• Objects with undefined lifetime:

• Use object pools

• Objects with variable size:

• Custom allocator (several free-lists for different sizes)

Page 26: Practical resource management for mobile devices: Pooling is magic

O B J E C T P O O L S

• Preallocate certain number of objects of same type

• Use objects from pool whenever one needs an object of that type

• Return objects to pool when done (resource released, reference count is zero)

• Can process all the pool in one go

• Better cache efficiency

• Set restrictions on object count

Page 27: Practical resource management for mobile devices: Pooling is magic

O B J E C T P O O L S

• Particle systems

• Components

• Game entities

• Sounds

• etc.

Page 28: Practical resource management for mobile devices: Pooling is magic

R E S O U R C E L I F E T I M E

• Use registers for resources of same type (fonts, textures, etc.)

• Use reference counters only as last resort:

• Thrash CPU cache

• Unnecessary work

• Unbounded pauses on deallocation cascades

Page 29: Practical resource management for mobile devices: Pooling is magic

R E S O U R C E L I F E T I M E

• Don’t leave some resource hanging if it will be reused in some other level

• Usually its ok to unload and load stuff again to avoid heap fragmentation

Page 30: Practical resource management for mobile devices: Pooling is magic

R E D U C E M E M O R Y U S A G E

• ‘Prototype’ pattern:

• Extract some part to be shared by all objects

• Usually used as a template for creating stuff

• Best allocation is no allocation at all

Page 31: Practical resource management for mobile devices: Pooling is magic

‘ P R O T O T Y P E ’ PAT T E R N

• Animations

• Game entities (Similar to prefabs in Unity)

• Anything that could share an immutable part between instances

Page 32: Practical resource management for mobile devices: Pooling is magic

R E D U C E M E M O R Y U S A G E

• Unity:

• Use value types (structs, primitive types)

• Avoid boxing/unboxing

• Don’t use default GUI

• Reuse buffers and objects where possible

Page 33: Practical resource management for mobile devices: Pooling is magic

• Always base your decisions on data

• USE PROFILER

• Don’t use this rules as a dogma, think for yourself

Page 34: Practical resource management for mobile devices: Pooling is magic

S TA R T P R E A L L O C AT I N G A N D

S T O P W O R R Y I N G

Page 35: Practical resource management for mobile devices: Pooling is magic

Q U E S T I O N S ?

M A X K LY G A

E M A I L : M A X . K LY G A @ G M A I L . C O M

T W I T T E R : @ N E K U 4 2