SlideShare a Scribd company logo
1 of 43
Download to read offline
 
Reducing the ARM Linux kernel size
without losing your mind
Nicolas Pitre
<​nico@linaro.org​>
2015-09-23
Nicolas Pitre
Reducing the ARM Linux kernel size
■ Why?
■ How?
■ Problems
■ Solutions
 
Linux kernel size reduction
Traditional Embedded Distros:
■ OpenWRT
■ Yocto
■ etc.
Benefits:
■ Longer product life
● Software maintenance
● New features with same hardware
 
Linux Kernel Size Reduction
 
"Internet of Things" (IoT)
Very pervasive:
■ Cable/ADSL Modems
■ Smart Phones
■ Smart Watches
■ Internet Connected Refrigerators
■ WI-FI-Enabled Washing Machines
■ Smart TV Sets
■ Wi-Fi enabled Light Bulbs
■ Connected Cars
■ Alarm Systems monitored via Internet
■ etc.
 
Linux Kernel Size Reduction
 
"Internet of Things" (IoT)
The problem: ​Security
■ All solutions ​will​eventually be broken
● Think NSA…
● Then professional thieves…
● Then script kiddies…
Security Response is a ​must​… even for gadgets!
The Internet of Things Is Wildly Insecure‫ـ‬And Often Unpatchable
https://www.schneier.com/essays/archives/2014/01/the_internet_of_t
hin.html
— Bruce Schneier
 
Linux Kernel Size Reduction
 
"Internet of Things" (IoT)
More problems:
■ Legacy Software Maintenance is
● Hard
● Expensive
● Uninteresting
Solution:
■ Avoid custom software
■ Leverage the Open Source community
■ Gather critical mass around common infrastructure
 
Linux Kernel Size Reduction
 
Common Software Infrastructure
Linux​is a logical choice
■ Large community of developers
■ Best looked-after network stack
■ Extensive storage options
■ Already widely used in embedded setups
 
Linux Kernel Size Reduction
 
Common Software Infrastructure
The Linux kernel is a logical choice… BUT
■ it is featureful → Bloat
■ its default tuning is for high-end systems
■ the emphasis is on scaling up more than scaling down
■ its flexible configuration system leads to
● Kconfig hell
● suboptimal build
■ is the largest component in most Linux-based embedded
systems
Kernel Size Reduction is part of the solution
 
Linux Kernel Size Reduction
What can be done?
From ​http://elinux.org/Kernel_Size_Reduction_Work
■ Kernel XIP
■ User Space IP stack
■ Kconfig options for various feature removal
■ LTO build
 
Linux Kernel Size Reduction
LTO is cool!
■ C files are parsed only
■ Object files store gcc intermediate code
representation
■ All intermediate representations concatenated
together at link time
■ Optimization happens on the whole program at once
This is very effective at optimizing out unused code.
 
Linux Kernel Size Reduction
LTO is cool… BUT
■ is still experimental
■ is slow
■ requires kernel changes
■ is slow
■ makes code debugging harder
■ requires a lot of memory for successful compilation
 
Linux Kernel Size Reduction
LTO is cool… BUT
Table 1. Full Kernel Build Timing
Build Type Wall Time
Standard Build 4m53s
LTO Build 10m23s
Table 2. Kernel Rebuild Timing After a Single Change
Build Type Wall Time
Standard Build 0m12s
LTO Build 6m27s
Note  Build Details:
Linux v4.2
ARM multi_v7_defconfig
gcc v5.1.0
Intel Core2 Q6600 CPU at 2.40GHz
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How it works?
Let’s consider the following code:
int​ ​foo​(​void​)​  ​{​ ​return​ ​0​;​ ​} 
 
int​ ​bar​(​void​)​  ​{​ ​return​ ​foo​();​ ​} 
 
 
Result:
        .text 
        .type​   foo​,​ ​%​function 
foo: 
        ​mov​     r​0​,​ #​0 
        ​bx​      lr 
        .type​   bar​,​ ​%​function 
bar: 
        b       foo 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How it works?
First, gcc -ffunction-sections gives separate sections to each function:
int​ ​foo​(​void​)​  ​{​ ​return​ ​0​;​ ​}​            ​/* uses 
section .text.foo */ 
 
int​ ​bar​(​void​)​  ​{​ ​return​ ​foo​();​ ​}​        ​/* uses 
section .text.bar */ 
 
 
Result:
        .section​ ​.​text​.​foo​,​"ax"​,%​progbits 
        .type​   foo​,​ ​%​function 
foo: 
        ​mov​     r​0​,​ #​0 
        ​bx​      lr 
        .section​ ​.​text​.​bar​,​"ax"​,%​progbits 
        .type​   bar​,​ ​%​function 
bar: 
        b       foo 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How it works?
Let’s add -fdata-sections to cover global data:
int​ baz ​=​ ​1​;​                            ​/* uses 
section .data.baz */ 
 
int​ ​foo​(​void​)​  ​{​ ​return​ baz​;​ ​}​          ​/* uses 
section .text.foo */ 
 
int​ ​bar​(​void​)​  ​{​ ​return​ ​foo​();​ ​}​        ​/* uses 
section .text.bar */ 
 
Result:
        .section​ ​.​text​.​foo​,​"ax"​,%​progbits 
        .type​   foo​,​ ​%​function 
foo: 
        movw    r​3​,​ #​:​lower​16​:.​LANCHOR​0 
        movt    r​3​,​ #​:​upper​16​:.​LANCHOR​0 
        ldr     r​0​,​ ​[​r​3​] 
        ​bx​      lr 
 
        .section​ ​.​text​.​bar​,​"ax"​,%​progbits 
        .type​   bar​,​ ​%​function 
bar: 
        b       foo 
 
        .section​ ​.​data​.​baz​,​"aw"​,%​progbits 
.LANCHOR0​ ​=​ ​.​ ​+​ ​0 
        .type​   baz​,​ ​%​object 
baz: 
        .word​   ​1 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How it works?
Let’s make it into a test program:
#include​ ​<stdio.h> 
 
int​ baz ​=​ ​1​; 
 
int​ ​foo​(​void​)​  ​{​ ​return​ baz​;​ ​} 
 
int​ ​bar​(​void​)​  ​{​ ​return​ ​foo​();​ ​} 
 
void​ ​main​(​void​)​  ​{​ ​printf​(​"value = %d​n​"​,​ ​foo​()); 
} 
 
Result:
$ gcc ­ffunction­sections ­fdata­sections ­o test 
test.c 
$ ./test 
value = 1 
$ nm test | grep "foo|bar|baz" 
00008520 T bar 
00010720 D baz 
000084fc T foo 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How it works?
Finally, pass -gc-sections to the linker:
$ gcc ­ffunction­sections ­fdata­sections  
>     ­Wl,­gc­sections ­Wl,­print­gc­sections  
>     ­o test test.c 
ld: Removing unused section '.text.bar' in file 
'test.o' 
$ nm test | grep "foo|bar|baz" 
000106fc D baz 
000084fc T foo 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
What about the Linux kernel?
Let’s start with the smallest kernel:
$ make allnoconfig 
$ make vmlinux 
$ size vmlinux 
   text    data     bss     dec     hex filename 
 774608   71024   14876  860508   d215c vmlinux 
 
What else can we configure out?
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Let’s also disable all system calls:
diff ­­git a/include/linux/syscalls.h 
b/include/linux/syscalls.h 
index b45c45b8c8..8868b7b7b7 100644 
­­­ a/include/linux/syscalls.h 
+++ b/include/linux/syscalls.h 
@@ ­198,7 +198,10 @@ extern struct 
trace_event_functions exit_syscall_print_funcs; 
        asmlinkage long 
SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));       
        asmlinkage long 
SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))        
        { 
 
­               long ret = 
SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__));   
+               long ret; 
 
+               if 
(IS_ENABLED(CONFIG_NO_SYSCALLS)) 
 
+                       return ­ENOSYS; 
 
+               ret = 
SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); 
 
                __MAP(x,__SC_TEST,__VA_ARGS__); 
 
                __PROTECT(x, 
ret,__MAP(x,__SC_ARGS,__VA_ARGS__));        
                return ret; 
 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Let’s also disable all system calls:
Table 3. Size of the vmlinux binary
Build Type Size (bytes) Reference %
allnoconfig 860508 100%
allnoconfig +
CONFIG_NO_SYSCALLS
815804 94.8%
Still ​way​too big for a kernel that can’t do anything.
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Let’s apply -gc-sections to the kernel:
diff ­­git a/Makefile b/Makefile 
index 342678e36c..80b86d72d4 100644 
­­­ a/Makefile 
+++ b/Makefile 
@@ ­630,6 +630,10 @@ else 
 KBUILD_CFLAGS  += ­O2 
 endif 
 
+ifdef CONFIG_GC_SECTIONS 
+KBUILD_CFLAGS  += ­ffunction­sections 
­fdata­sections 
+endif 
+ 
 # Tell gcc to never replace conditional load 
with a non­conditional one 
 KBUILD_CFLAGS  += $(call 
cc­option,­­param=allow­store­data­races=0) 
 
@@ ­820,6 +824,10 @@ ifeq 
($(CONFIG_STRIP_ASM_SYMS),y) 
 LDFLAGS_vmlinux        += $(call ld­option, ­X,) 
 endif 
 
+ifdef CONFIG_GC_SECTIONS 
+LDFLAGS_vmlinux        += ­gc­sections 
+endif 
+ 
 # Default kernel image to build when no specific 
target is given. 
 # KBUILD_IMAGE may be overruled on the command 
line or 
 # set in the environment 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Can’t be hard, right?
$ make vmlinux 
[...] 
  CC      init/version.o 
  LD      init/built­in.o 
  LD      vmlinux 
arm­linux­ld: missing CPU support 
arm­linux­ld: no machine record defined 
Makefile:963: recipe for target 'vmlinux' failed 
 
Does this ring a bell?
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
From arch/arm/kernel/vmlinux.lds:
/* 
 * These must never be empty 
 * If you have to comment these two assert 
statements out, your 
 * binutils is too old (for other reasons as 
well) 
 */ 
ASSERT((__proc_info_end ­ __proc_info_begin), 
"missing CPU support") 
ASSERT((__arch_info_end ­ __arch_info_begin), "no 
machine record defined") 
 
They come from:
        .init.proc.info : { 
                . = ALIGN(4); 
                __proc_info_begin = .; 
                *(.proc.info.init) 
                __proc_info_end = .; 
        } 
        .init.arch.info : { 
                __arch_info_begin = .; 
                *(.arch.info.init) 
                __arch_info_end = .; 
        } 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
From arch/arm/include/asm/mach/arch.h:
/* 
 * Set of macros to define architecture features. 
This is built into 
 * a table by the linker. 
 */ 
#define​ ​MACHINE_START​(​_type​,​_name​) 
 
static​ ​const​ ​struct​ ​machine_desc 
__mach_desc_##_type    ​ 
 __used 
 
 ​__attribute__​((​__section__​(​".arch.info.init"​)))​ ​= 
{​    ​ 
        ​.​nr             ​=​ MACH_TYPE_##_type​, 
 
        ​.​name           ​=​ _name​, 
 
#define​ ​DT_MACHINE_START​(​_name​,​ _namestr​) 
 
static​ ​const​ ​struct​ ​machine_desc 
__mach_desc_##_name    ​ 
 __used 
 
 ​__attribute__​((​__section__​(​".arch.info.init"​)))​ ​= 
{​    ​ 
        ​.​nr             ​=​ ​~​0​, 
 
        ​.​name           ​=​ _namestr​, 
 
#define​ MACHINE_END                             ​ 
}​; 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Example usage:
MACHINE_START​(​EBSA110​,​ ​"EBSA110"​) 
        ​/* Maintainer: Russell King */ 
        ​.​atag_offset    ​=​ ​0x400​, 
        ​.​reserve_lp0    ​=​ ​1​, 
        ​.​reserve_lp2    ​=​ ​1​, 
        ​.​map_io         ​=​ ebsa110_map_io​, 
        ​.​init_early     ​=​ ebsa110_init_early​, 
        ​.​init_irq       ​=​ ebsa110_init_irq​, 
        ​.​init_time      ​=​ ebsa110_timer_init​, 
        ​.​restart        ​=​ ebsa110_restart​, 
MACHINE_END 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
We have to prevent those table sections with no explicit references from
being garbage collected:
diff ­­git a/arch/arm/kernel/vmlinux.lds.S 
b/arch/arm/kernel/vmlinux.lds.S 
index 8b60fde5ce..d62ccc2972 100644 
­­­ a/arch/arm/kernel/vmlinux.lds.S 
+++ b/arch/arm/kernel/vmlinux.lds.S 
@@ ­15,7 +15,7 @@ 
 #define PROC_INFO 
 
        . = ALIGN(4); 
 
        VMLINUX_SYMBOL(__proc_info_begin) = .; 
 
­       *(.proc.info.init) 
 
+       KEEP(*(.proc.info.init)) 
 
        VMLINUX_SYMBOL(__proc_info_end) = .; 
 
 #define IDMAP_TEXT 
 
@@ ­187,7 +187,7 @@ SECTIONS 
        } 
        .init.arch.info : { 
                __arch_info_begin = .; 
­               *(.arch.info.init) 
+               KEEP(*(.arch.info.init)) 
                __arch_info_end = .; 
        } 
        .init.tagtable : { 
 
Can’t be ​that​hard, right?
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Can’t be ​that​hard, right?
$ make vmlinux 
[...] 
  CC      init/version.o 
  LD      init/built­in.o 
  LD      vmlinux 
  SYSMAP  System.map 
$ 
 
Success!
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
How effective on the kernel?
Table 4. Size of the vmlinux binary
Build Type Size (bytes) Reference %
allnoconfig 860508 100%
allnoconfig +
CONFIG_NO_SYSCALLS
815804 94.8%
allnoconfig +
CONFIG_NO_SYSCALLS +
CONFIG_GC_SECTIONS
555798 64.6%
What about authentic LTO?
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Let’s compare against authentic LTO:
Table 5. Size of the vmlinux binary
Build Type Size (bytes) Reference %
allnoconfig 860508 100%
allnoconfig +
CONFIG_NO_SYSCALLS
815804 94.8%
allnoconfig +
CONFIG_NO_SYSCALLS +
CONFIG_GC_SECTIONS
555798 64.6%
allnoconfig +
CONFIG_NO_SYSCALLS +
CONFIG_LTO
488264 56.7%
The -gc-sections result is somewhat bigger but so much faster.
Still… it’s big for a kernel that does nothing…
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
Is that it?
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
More table sections have to be marked with KEEP():
■ the initcall pointer table
■ the exception fixup pointer table
■ the vector table and stubs
■ the pa/va code patching pointer table
■ the SMP alt code pointer table
■ the ramfs section
■ the list of kernel command line argument parsers
■ etc.
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
The backward reference problem:
int​ ​foobar​(​int​ ​__user​ ​*​p​) 
{ 
        ​return​ ​put_user​(​0x5a​,​ p​); 
} 
 
Result:
    1:​ ​        .section​ ​.​text​.​foobar​,​"ax" 
    2:​ ​foobar: 
    3:​         ​mov​     r​3​,​ #​0 
    4:​         ​mov​     r​2​,​ #​0x5a 
    5:​ ​1:​      ​str​     r​2​,​ ​[​r​0​] 
    6:​ ​2:​      ​mov​     r​0​,​ r​3 
    7:​         ​bx​      lr 
    8: 
    9:​ ​        .section​ ​.​text​.​fixup​,​"ax" 
   10:​ ​3:​      ​mov​     r​3​,​ #​­​EFAULT 
   11:​         b       ​2​b 
   12: 
   13:​ ​        .section​ __ex_table​,​"a" 
   14:​ ​        .long​   ​1​b​,​ ​3​b 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
The "backward reference" problem:
    1:​ ​        .section​ ​.​text​.​foo​1​,​"ax" 
    2:​ ​foo1:​   ​... 
    3: 
    4:​ ​        .section​ ​.​text​.​foo​2​,​"ax" 
    5:​ ​foo2:​   ​... 
    6: 
    7:​ ​        .section​ ​.​text​.​foo​3​,​"ax" 
    8:​ ​foo3:​   ​... 
    9: 
   10:​ ​        .section​ ​.​text​.​fixup​,​"ax" 
   11:​ ​1:​      ​mov​     r​3​,​ #​­​EFAULT 
   12:​         b       foo​1​ ​+​ ​<​offset​> 
   13:​ ​2:​      ​mov​     r​3​,​ #​­​EFAULT 
   14:​         b       foo​2​ ​+​ ​<​offset​> 
   15:​ ​3:​      ​mov​     r​3​,​ #​­​EFAULT 
   16:​         b       foo​3​ ​+​ ​<​offset​> 
   17: 
   18:​ ​        .section​ __ex_table​,​"a" 
   19:​ ​        .long​   foo​1​ ​+​ ​<​offset​>,​ ​1​b 
   20:​ ​        .long​   foo​2​ ​+​ ​<​offset​>,​ ​2​b 
   21:​ ​        .long​   foo​3​ ​+​ ​<​offset​>,​ ​3​b 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
A closer look at put_user():
#define​ ​put_user​(​x​,​ p​)​  ​__put_user​(​x​,​ p​) 
 
 
#define​ ​__put_user​(​x​,​ ptr​) 
 
(​{ 
 
        ​long​ __pu_err ​=​ ​0​; 
 
        ​__put_user_err​((​x​),​ ​(​ptr​),​ __pu_err​); 
 
        __pu_err​; 
 
}​) 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
A closer look at put_user():
#define​ ​__put_user_err​(​x​,​ ptr​,​ err​) 
 
do​ ​{ 
 
        ​unsigned​ ​long​ __pu_addr ​=​ ​(​unsigned 
long​)(​ptr​);​                 ​ 
        ​__typeof__​(*(​ptr​))​ __pu_val ​=​ ​(​x​); 
 
        ​__chk_user_ptr​(​ptr​); 
 
        ​might_fault​(); 
 
        ​switch​ ​(​sizeof​(*(​ptr​)))​ ​{ 
 
        ​case​ ​1​:​ ​__put_user_asm_byte​(​__pu_val​, 
__pu_addr​,​ err​);​  ​break​;​  ​ 
        ​case​ ​2​:​ ​__put_user_asm_half​(​__pu_val​, 
__pu_addr​,​ err​);​  ​break​;​  ​ 
        ​case​ ​4​:​ ​__put_user_asm_word​(​__pu_val​, 
__pu_addr​,​ err​);​  ​break​;​  ​ 
        ​case​ ​8​:​ ​__put_user_asm_dword​(​__pu_val​, 
__pu_addr​,​ err​);​ ​break​;​  ​ 
        ​default​:​ ​__put_user_bad​(); 
 
        ​} 
 
}​ ​while​ ​(​0​) 
 
Linux Kernel Size Reduction
 
A poor man’s LTO: ld -gc-sections
A closer look at put_user():
#define​ ​__put_user_asm_word​(​x​,​ __pu_addr​,​ err​) 
 
        ​__asm__​ ​__volatile__​( 
 
        ​"1:     "​ ​TUSER​(​str​)​ ​"  %1,[%2],#0​n​" 
 
        ​"2:​n​" 
 
        ​"       .pushsection 
.text.fixup,​"​ax​"n​"​              ​ 
        ​"       .align  2​n​" 
 
        ​"3:     mov     %0, %3​n​" 
 
        ​"       b       2b​n​" 
 
        ​"       .popsection​n​" 
 
        ​"       .pushsection __ex_table,​"​a​"n​" 
 
        ​"       .align  3​n​" 
 
        ​"       .long   1b, 3b​n​" 
 
        ​"       .popsection" 
 
        ​:​ ​"+r"​ ​(​err​) 
 
        ​:​ ​"r"​ ​(​x​),​ ​"r"​ ​(​__pu_addr​),​ ​"i"​ ​(­​EFAULT​) 
 
        ​:​ ​"cc"​) 
 
How to create distinct .text.fixup and __ex_table section instances?
 
Linux Kernel Size Reduction
 
Context based ELF section creation
Some possibilities:
__put_user(val, ptr, __func__)
__put_user(val, ptr, __FUNCTION__)
__put_user(val, ptr, __PRETTY_FUNCTION__)
__put_user(val, ptr, __FILE__, __LINE__)
__put_user(val, ptr, __COUNTER__)
 
Linux Kernel Size Reduction
 
Context based ELF section creation
The solution: modify gas
        .macro​ exception_code 
        .pushsection​ ​%​S​.​exception 
        ​... 
        .popsection 
        .endm 
 
        .section​ ​.​text​.​foo 
        ​... 
        exception_code 
        ​... 
 
        .section​ ​.​text​.​bar 
        ​... 
        exception_code 
        ​... 
 
Resulting sections:
■ .text.foo.exception
■ .text.bar.exception
Note  Feature available upstream, in
binutils 2.25.51.0.3 from H.J. Lu and
Linaro release.
 
Linux Kernel Size Reduction
 
Context based ELF section creation
This fixes the built-in __exit section problem:
    1:​ ​        .text 
    2:​ ​foobar: 
    3:​ ​1:​      ​... 
    4: 
    5:​ ​        .section​ ​.​init​.​text 
    6:​ foobar_init​: 
    7:​ ​2:​      ​... 
    8: 
    9:​ ​        .section​ ​.​exit​.​text 
   10:​ foobar_exit​: 
   11:​ ​3:​      ​... 
   12: 
   13:​ ​        .section​ ​.​text​.​fixup 
   14:​         do_fix  ​1​b 
   15: 
   16:​ ​        .section​ ​.​init​.​text​.​fixup 
   17:​         do_fix  ​2​b 
   18: 
   19:​ ​        .section​ ​.​exit​.​text​.​fixup 
   20:​         do_fix  ​3​b 
 
Linux Kernel Size Reduction
 
Context based ELF section creation
The "missing forward reference" problem:
    1:​ ​        .section​ ​.​text​.​foobar​,​"ax" 
    2:​ ​foobar: 
    3:​         ​mov​     r​3​,​ #​0 
    4:​         ​mov​     r​2​,​ #​0x5a 
    5:​ ​1:​      ​str​     r​2​,​ ​[​r​0​] 
    6:​ ​2:​      ​mov​     r​0​,​ r​3 
    7:​         ​bx​      lr 
    8: 
    9:​ ​        .section​ ​.​fixup​.​text​.​foobar​,​"ax" 
   10:​ ​3:​      ​mov​     r​3​,​ #​­​EFAULT 
   11:​         b       ​2​b 
   12: 
   13:​ ​        .section 
__ex_table​.​text​.​foobar​,​"a" 
   14:​ ​        .long​   ​1​b​,​ ​3​b 
 
?
 
Linux Kernel Size Reduction
 
Context based ELF section creation
The "missing forward reference" solution:
    1:​ ​        .section​ ​.​text​.​foobar​,​"ax" 
    2:​ ​foobar: 
    3:​         ​mov​     r​3​,​ #​0 
    4:​         ​mov​     r​2​,​ #​0x5a 
    5:​ ​1:​      ​str​     r​2​,​ ​[​r​0​] 
    6:​ ​        .tug​    ​4​f 
    7:​ ​2:​      ​mov​     r​0​,​ r​3 
    8:​         ​bx​      lr 
    9: 
   10:​ ​        .section​ ​.​fixup​.​text​.​foobar​,​"ax" 
   11:​ ​3:​      ​mov​     r​3​,​ #​­​EFAULT 
   12:​         b       ​2​b 
   13: 
   14:​ ​        .section 
__ex_table​.​text​.​foobar​,​"a" 
   15:​ ​4:​      ​.​long   ​1​b​,​ ​3​b 
 
Linux Kernel Size Reduction
 
Context based ELF section creation
The "missing forward reference" solution:
Turns out that no modifications to gas is necessary.
    1:​ ​        .section​ ​.​text​.​foobar​,​"ax" 
    2:​ ​foobar: 
    3:​         ​mov​     r​3​,​ #​0 
    4:​         ​mov​     r​2​,​ #​0x5a 
    5:​ ​1:​      ​str​     r​2​,​ ​[​r​0​] 
    6:​ ​        .reloc​  ​.,​ R_ARM_NONE​,​ ​4​f 
    7:​ ​2:​      ​mov​     r​0​,​ r​3 
    8:​         ​bx​      lr 
    9: 
   10:​ ​        .section​ ​.​fixup​.​text​.​foobar​,​"ax" 
   11:​ ​3:​      ​mov​     r​3​,​ #​­​EFAULT 
   12:​         b       ​2​b 
   13: 
   14:​ ​        .section 
__ex_table​.​text​.​foobar​,​"a" 
   15:​ ​4:​      ​.​long   ​1​b​,​ ​3​b 
 
Linux Kernel Size Reduction
 
Making both LTO and -gc-sections effective
Reducing number of "Peg Point" Symbols:
■ configurable system calls
● syscalls as modules
■ selective EXPORT_SYMBOL()
 
Linux Kernel Size Reduction
Questions ?

More Related Content

What's hot

P4 to OpenDataPlane Compiler - BUD17-304
P4 to OpenDataPlane Compiler - BUD17-304P4 to OpenDataPlane Compiler - BUD17-304
P4 to OpenDataPlane Compiler - BUD17-304Linaro
 
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverter
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverterKernel Recipes 2014 - NDIV: a low overhead network traffic diverter
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverterAnne Nicolas
 
OpenCL - The Open Standard for Heterogeneous Parallel Programming
OpenCL - The Open Standard for Heterogeneous Parallel ProgrammingOpenCL - The Open Standard for Heterogeneous Parallel Programming
OpenCL - The Open Standard for Heterogeneous Parallel ProgrammingAndreas Schreiber
 
A Library for Emerging High-Performance Computing Clusters
A Library for Emerging High-Performance Computing ClustersA Library for Emerging High-Performance Computing Clusters
A Library for Emerging High-Performance Computing ClustersIntel® Software
 
Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Tomasz Bednarz
 
Trip down the GPU lane with Machine Learning
Trip down the GPU lane with Machine LearningTrip down the GPU lane with Machine Learning
Trip down the GPU lane with Machine LearningRenaldas Zioma
 
Luca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvmLuca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvmlinuxlab_conf
 
YOW2021 Computing Performance
YOW2021 Computing PerformanceYOW2021 Computing Performance
YOW2021 Computing PerformanceBrendan Gregg
 
Understand and Harness the Capabilities of Intel® Xeon Phi™ Processors
Understand and Harness the Capabilities of Intel® Xeon Phi™ ProcessorsUnderstand and Harness the Capabilities of Intel® Xeon Phi™ Processors
Understand and Harness the Capabilities of Intel® Xeon Phi™ ProcessorsIntel® Software
 
BUD17-300: Journey of a packet
BUD17-300: Journey of a packetBUD17-300: Journey of a packet
BUD17-300: Journey of a packetLinaro
 
Evolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorEvolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorLarry Lang
 

What's hot (20)

P4 to OpenDataPlane Compiler - BUD17-304
P4 to OpenDataPlane Compiler - BUD17-304P4 to OpenDataPlane Compiler - BUD17-304
P4 to OpenDataPlane Compiler - BUD17-304
 
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverter
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverterKernel Recipes 2014 - NDIV: a low overhead network traffic diverter
Kernel Recipes 2014 - NDIV: a low overhead network traffic diverter
 
OpenCL - The Open Standard for Heterogeneous Parallel Programming
OpenCL - The Open Standard for Heterogeneous Parallel ProgrammingOpenCL - The Open Standard for Heterogeneous Parallel Programming
OpenCL - The Open Standard for Heterogeneous Parallel Programming
 
A Library for Emerging High-Performance Computing Clusters
A Library for Emerging High-Performance Computing ClustersA Library for Emerging High-Performance Computing Clusters
A Library for Emerging High-Performance Computing Clusters
 
Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Introduction to OpenCL, 2010
Introduction to OpenCL, 2010
 
Trip down the GPU lane with Machine Learning
Trip down the GPU lane with Machine LearningTrip down the GPU lane with Machine Learning
Trip down the GPU lane with Machine Learning
 
Luca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvmLuca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvm
 
Manycores for the Masses
Manycores for the MassesManycores for the Masses
Manycores for the Masses
 
Hands on OpenCL
Hands on OpenCLHands on OpenCL
Hands on OpenCL
 
Debug generic process
Debug generic processDebug generic process
Debug generic process
 
SDAccel Design Contest: SDAccel and F1 Instances
SDAccel Design Contest: SDAccel and F1 InstancesSDAccel Design Contest: SDAccel and F1 Instances
SDAccel Design Contest: SDAccel and F1 Instances
 
YOW2021 Computing Performance
YOW2021 Computing PerformanceYOW2021 Computing Performance
YOW2021 Computing Performance
 
SDAccel Design Contest: Vivado HLS
SDAccel Design Contest: Vivado HLSSDAccel Design Contest: Vivado HLS
SDAccel Design Contest: Vivado HLS
 
SDAccel Design Contest: Intro
SDAccel Design Contest: IntroSDAccel Design Contest: Intro
SDAccel Design Contest: Intro
 
Foss Gadgematics
Foss GadgematicsFoss Gadgematics
Foss Gadgematics
 
Understand and Harness the Capabilities of Intel® Xeon Phi™ Processors
Understand and Harness the Capabilities of Intel® Xeon Phi™ ProcessorsUnderstand and Harness the Capabilities of Intel® Xeon Phi™ Processors
Understand and Harness the Capabilities of Intel® Xeon Phi™ Processors
 
SDAccel Design Contest: Vivado
SDAccel Design Contest: VivadoSDAccel Design Contest: Vivado
SDAccel Design Contest: Vivado
 
Introduction to OpenCL
Introduction to OpenCLIntroduction to OpenCL
Introduction to OpenCL
 
BUD17-300: Journey of a packet
BUD17-300: Journey of a packetBUD17-300: Journey of a packet
BUD17-300: Journey of a packet
 
Evolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO VisorEvolving Virtual Networking with IO Visor
Evolving Virtual Networking with IO Visor
 

Viewers also liked

LCU14 LNG demo posters_published2014sep18
LCU14 LNG demo posters_published2014sep18LCU14 LNG demo posters_published2014sep18
LCU14 LNG demo posters_published2014sep18Linaro
 
BUD17-TR01: Philosophy of Open Source
BUD17-TR01: Philosophy of Open SourceBUD17-TR01: Philosophy of Open Source
BUD17-TR01: Philosophy of Open SourceLinaro
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 Linaro
 
ODP IPsec lookaside API Demo
ODP IPsec lookaside API DemoODP IPsec lookaside API Demo
ODP IPsec lookaside API DemoLinaro
 
mcuboot for IoT
mcuboot for IoTmcuboot for IoT
mcuboot for IoTLinaro
 
Next event prediction
Next event predictionNext event prediction
Next event predictionLinaro
 
Dragonboard 410c/820c
Dragonboard 410c/820cDragonboard 410c/820c
Dragonboard 410c/820cLinaro
 
Android "AOSP TV" - BUD17
Android "AOSP TV" - BUD17Android "AOSP TV" - BUD17
Android "AOSP TV" - BUD17Linaro
 
Apache Ambari and Big data components on AARCH64
Apache Ambari and Big data components on AARCH64Apache Ambari and Big data components on AARCH64
Apache Ambari and Big data components on AARCH64Linaro
 
http server on user-level mTCP stack accelerated by DPDK
http server on user-level mTCP stack accelerated by DPDKhttp server on user-level mTCP stack accelerated by DPDK
http server on user-level mTCP stack accelerated by DPDKLinaro
 
DB410c: Face tracking and motor control
DB410c: Face tracking and motor controlDB410c: Face tracking and motor control
DB410c: Face tracking and motor controlLinaro
 
Optimized Android N MR1 + 4.4 Kernel
Optimized Android N MR1 + 4.4 KernelOptimized Android N MR1 + 4.4 Kernel
Optimized Android N MR1 + 4.4 KernelLinaro
 
ST 96Boards Demo
ST 96Boards DemoST 96Boards Demo
ST 96Boards DemoLinaro
 
Archermind demo for MTK X20 Pro and Mstar TV 96Boards
Archermind demo for MTK X20 Pro and Mstar TV 96BoardsArchermind demo for MTK X20 Pro and Mstar TV 96Boards
Archermind demo for MTK X20 Pro and Mstar TV 96BoardsLinaro
 
MEAN-stack based sensor gateway
MEAN-stack based sensor gatewayMEAN-stack based sensor gateway
MEAN-stack based sensor gatewayLinaro
 
Socionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demoSocionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demoLinaro
 
OpenCV & Robot Framework
OpenCV & Robot FrameworkOpenCV & Robot Framework
OpenCV & Robot FrameworkLinaro
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLinaro
 

Viewers also liked (18)

LCU14 LNG demo posters_published2014sep18
LCU14 LNG demo posters_published2014sep18LCU14 LNG demo posters_published2014sep18
LCU14 LNG demo posters_published2014sep18
 
BUD17-TR01: Philosophy of Open Source
BUD17-TR01: Philosophy of Open SourceBUD17-TR01: Philosophy of Open Source
BUD17-TR01: Philosophy of Open Source
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
 
ODP IPsec lookaside API Demo
ODP IPsec lookaside API DemoODP IPsec lookaside API Demo
ODP IPsec lookaside API Demo
 
mcuboot for IoT
mcuboot for IoTmcuboot for IoT
mcuboot for IoT
 
Next event prediction
Next event predictionNext event prediction
Next event prediction
 
Dragonboard 410c/820c
Dragonboard 410c/820cDragonboard 410c/820c
Dragonboard 410c/820c
 
Android "AOSP TV" - BUD17
Android "AOSP TV" - BUD17Android "AOSP TV" - BUD17
Android "AOSP TV" - BUD17
 
Apache Ambari and Big data components on AARCH64
Apache Ambari and Big data components on AARCH64Apache Ambari and Big data components on AARCH64
Apache Ambari and Big data components on AARCH64
 
http server on user-level mTCP stack accelerated by DPDK
http server on user-level mTCP stack accelerated by DPDKhttp server on user-level mTCP stack accelerated by DPDK
http server on user-level mTCP stack accelerated by DPDK
 
DB410c: Face tracking and motor control
DB410c: Face tracking and motor controlDB410c: Face tracking and motor control
DB410c: Face tracking and motor control
 
Optimized Android N MR1 + 4.4 Kernel
Optimized Android N MR1 + 4.4 KernelOptimized Android N MR1 + 4.4 Kernel
Optimized Android N MR1 + 4.4 Kernel
 
ST 96Boards Demo
ST 96Boards DemoST 96Boards Demo
ST 96Boards Demo
 
Archermind demo for MTK X20 Pro and Mstar TV 96Boards
Archermind demo for MTK X20 Pro and Mstar TV 96BoardsArchermind demo for MTK X20 Pro and Mstar TV 96Boards
Archermind demo for MTK X20 Pro and Mstar TV 96Boards
 
MEAN-stack based sensor gateway
MEAN-stack based sensor gatewayMEAN-stack based sensor gateway
MEAN-stack based sensor gateway
 
Socionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demoSocionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demo
 
OpenCV & Robot Framework
OpenCV & Robot FrameworkOpenCV & Robot Framework
OpenCV & Robot Framework
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
 

Similar to SFO15-BFO2: Reducing the arm linux kernel size without losing your mind

Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Marcus Tarquinio
 
Internet of Tiny Linux (IoTL): Episode IV - SFO17-100
Internet of Tiny Linux (IoTL): Episode IV  - SFO17-100Internet of Tiny Linux (IoTL): Episode IV  - SFO17-100
Internet of Tiny Linux (IoTL): Episode IV - SFO17-100Linaro
 
Not breaking userspace: the evolving Linux ABI
Not breaking userspace: the evolving Linux ABINot breaking userspace: the evolving Linux ABI
Not breaking userspace: the evolving Linux ABIAlison Chaiken
 
The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)Chris Simmonds
 
Modern IoT and Embedded Linux Deployment - Berlin
Modern IoT and Embedded Linux Deployment - BerlinModern IoT and Embedded Linux Deployment - Berlin
Modern IoT and Embedded Linux Deployment - BerlinDjalal Harouni
 
Embedded Linux primer
Embedded Linux primerEmbedded Linux primer
Embedded Linux primerDrew Fustini
 
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B KuteUnit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B KuteTushar B Kute
 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMSherif Mousa
 
BPF & Cilium - Turning Linux into a Microservices-aware Operating System
BPF  & Cilium - Turning Linux into a Microservices-aware Operating SystemBPF  & Cilium - Turning Linux into a Microservices-aware Operating System
BPF & Cilium - Turning Linux into a Microservices-aware Operating SystemThomas Graf
 
Hacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An IntroductionHacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An IntroductionLevente Kurusa
 
Module 4 Embedded Linux
Module 4 Embedded LinuxModule 4 Embedded Linux
Module 4 Embedded LinuxTushar B Kute
 
BKK16-105 HALs for LITE
BKK16-105 HALs for LITEBKK16-105 HALs for LITE
BKK16-105 HALs for LITELinaro
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and InsightsGlobalLogic Ukraine
 
IoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesIoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesMender.io
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
 
Kernel bug hunting
Kernel bug huntingKernel bug hunting
Kernel bug huntingAndrea Righi
 

Similar to SFO15-BFO2: Reducing the arm linux kernel size without losing your mind (20)

Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1
 
Internet of Tiny Linux (IoTL): Episode IV - SFO17-100
Internet of Tiny Linux (IoTL): Episode IV  - SFO17-100Internet of Tiny Linux (IoTL): Episode IV  - SFO17-100
Internet of Tiny Linux (IoTL): Episode IV - SFO17-100
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
Not breaking userspace: the evolving Linux ABI
Not breaking userspace: the evolving Linux ABINot breaking userspace: the evolving Linux ABI
Not breaking userspace: the evolving Linux ABI
 
Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)
 
Modern IoT and Embedded Linux Deployment - Berlin
Modern IoT and Embedded Linux Deployment - BerlinModern IoT and Embedded Linux Deployment - Berlin
Modern IoT and Embedded Linux Deployment - Berlin
 
Embedded Linux primer
Embedded Linux primerEmbedded Linux primer
Embedded Linux primer
 
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B KuteUnit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARM
 
BPF & Cilium - Turning Linux into a Microservices-aware Operating System
BPF  & Cilium - Turning Linux into a Microservices-aware Operating SystemBPF  & Cilium - Turning Linux into a Microservices-aware Operating System
BPF & Cilium - Turning Linux into a Microservices-aware Operating System
 
Hacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An IntroductionHacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An Introduction
 
Linux-Internals-and-Networking
Linux-Internals-and-NetworkingLinux-Internals-and-Networking
Linux-Internals-and-Networking
 
Module 4 Embedded Linux
Module 4 Embedded LinuxModule 4 Embedded Linux
Module 4 Embedded Linux
 
BKK16-105 HALs for LITE
BKK16-105 HALs for LITEBKK16-105 HALs for LITE
BKK16-105 HALs for LITE
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and Insights
 
IoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesIoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSes
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
 
Kernel bug hunting
Kernel bug huntingKernel bug hunting
Kernel bug hunting
 

More from Linaro

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloLinaro
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaLinaro
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraLinaro
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaLinaro
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018Linaro
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018Linaro
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...Linaro
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Linaro
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Linaro
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteLinaro
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopLinaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allLinaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorLinaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMULinaro
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MLinaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootLinaro
 

More from Linaro (20)

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qa
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 

Recently uploaded

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

SFO15-BFO2: Reducing the arm linux kernel size without losing your mind