System Size Auto-Reduction

Revision as of 07:11, 6 April 2013 by Tim Bird (Talk | contribs) (global constraints)

Jump to: navigation, search

This page has notes and an outline for Tim Bird's Linux Auto-Reduction research.

Research Areas


global constraints

  • overall idea: create constraints external to code, and use for optimization
  • rationale: can't maintain in-tree - too many config items
  • make the application of constraints automatic
  • use existing constraints to generate new constraints
  • constraints can flow between user-space and kernel
  • example: uid=0
  • constraint language
  • application by commenting out references (replace with 0 constant)
    • use compiler to find code references (via error messages)
      • eliminates problem with duplicate names (uid in different structure)
  • constant propagation (by, e.g. LTO) reduces code

syscall elimination

  • scan file system
  • create report of used and unused system calls
  • mark syscalls unused in kernel
    • arch/arm/kernel/calls.S (and arch/arm/kernel/entry-common.S
  • make sure unused syscalls are not __attribute__(externally_visible)
    • technique of asmlinkage_<syscall>
  • use LTO to eliminate calls
  • results: 50K-90K

ARM stack reduction

  • 4k stacks
  • stack extensions

cold code compression

Report existing research

link-time rewriting

Report existing research

Talk outline

This talk will be presented at LinuxCon Japan 2013:



  • I am Tim Bird
  • Now working at Sony Mobile
  • Researching system size for many years
  • Long background in extremely small systems
    • NetWare Lite - file and print server on DOS in 50K (in 1991)

The problem of Bloat

  • Software bloat occurs because systems are built with more software than is really needed for a given task
  • Open Source software meets the needs of thousands of different systems
    • Linux scales from tiny sensors to supercomputers (extreme SMP and high-end clusters)
    • Linux supports many, many features, only some of which are configurable
  • Software must be generalized for many use cases

Bloat (cont.)

  • In desktop or server, virtual memory makes this not so important (for user-space programs)
    • Only working set of program is loaded - pages are loaded on demand
  • For kernel, all pages are always loaded

Tiny Distribution

  • poky-tiny distribution (yocto project)
  • see
  • Good for testing and further research