Skip to content

feat: add uhyve feature#2391

Open
mkroening wants to merge 13 commits intomainfrom
feature-uhyve
Open

feat: add uhyve feature#2391
mkroening wants to merge 13 commits intomainfrom
feature-uhyve

Conversation

@mkroening
Copy link
Copy Markdown
Member

Currently, Hermit unikernels can only be specialized to which device drivers to include, but not to which VMM the unikernel is run in.

This PR enables such specialization by feature-gating the Uhyve code. This means when Uhyve is targeted, the uhyve feature must be enabled. Currently, this only reduces code size and dependencies for unikernels that do not target Uhyve. In a follow-up PR, I will add the loader feature to enable savings for unikernels that do target Uhyve.

In the grander scheme of things, going this direction allows us to nicely specialize for direct PVH support in the future (#2366).

Depends on hermit-os/hermit-rs#976.
I will pull out some of the preparatory refactorings into a separate PR.

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark Results

Details
Benchmark Current: 6bfbe18 Previous: e0b9d04 Performance Ratio
startup_benchmark Build Time 89.57 s 90.22 s 0.99
startup_benchmark File Size 0.76 MB 0.80 MB 0.95
Startup Time - 1 core 0.81 s (±0.03 s) 0.82 s (±0.04 s) 0.98
Startup Time - 2 cores 0.79 s (±0.03 s) 0.82 s (±0.04 s) 0.96
Startup Time - 4 cores 0.80 s (±0.03 s) 0.83 s (±0.03 s) 0.97
multithreaded_benchmark Build Time 90.60 s 92.03 s 0.98
multithreaded_benchmark File Size 0.86 MB 0.91 MB 0.95
Multithreaded Pi Efficiency - 2 Threads 88.96 % (±7.32 %) 89.53 % (±8.21 %) 0.99
Multithreaded Pi Efficiency - 4 Threads 44.73 % (±2.78 %) 43.81 % (±2.78 %) 1.02
Multithreaded Pi Efficiency - 8 Threads 25.91 % (±1.71 %) 26.30 % (±1.72 %) 0.99
micro_benchmarks Build Time 100.39 s 100.06 s 1.00
micro_benchmarks File Size 0.87 MB 0.92 MB 0.95
Scheduling time - 1 thread 69.47 ticks (±4.33 ticks) 73.83 ticks (±4.75 ticks) 0.94
Scheduling time - 2 threads 39.99 ticks (±5.33 ticks) 40.31 ticks (±4.87 ticks) 0.99
Micro - Time for syscall (getpid) 3.66 ticks (±0.33 ticks) 3.03 ticks (±0.28 ticks) 1.21
Memcpy speed - (built_in) block size 4096 76314.72 MByte/s (±52876.24 MByte/s) 74297.66 MByte/s (±51450.89 MByte/s) 1.03
Memcpy speed - (built_in) block size 1048576 30314.72 MByte/s (±24918.65 MByte/s) 30384.44 MByte/s (±25123.41 MByte/s) 1.00
Memcpy speed - (built_in) block size 16777216 25221.33 MByte/s (±21017.29 MByte/s) 22358.71 MByte/s (±18609.52 MByte/s) 1.13
Memset speed - (built_in) block size 4096 76715.67 MByte/s (±53169.65 MByte/s) 74713.95 MByte/s (±51707.68 MByte/s) 1.03
Memset speed - (built_in) block size 1048576 31076.29 MByte/s (±25340.73 MByte/s) 31139.74 MByte/s (±25543.05 MByte/s) 1.00
Memset speed - (built_in) block size 16777216 25971.48 MByte/s (±21497.68 MByte/s) 23007.68 MByte/s (±19039.40 MByte/s) 1.13
Memcpy speed - (rust) block size 4096 68790.94 MByte/s (±47972.03 MByte/s) 66767.89 MByte/s (±46628.30 MByte/s) 1.03
Memcpy speed - (rust) block size 1048576 30322.52 MByte/s (±24811.22 MByte/s) 30165.31 MByte/s (±25004.23 MByte/s) 1.01
Memcpy speed - (rust) block size 16777216 25638.70 MByte/s (±21348.28 MByte/s) 23346.06 MByte/s (±19388.66 MByte/s) 1.10
Memset speed - (rust) block size 4096 68974.54 MByte/s (±48103.60 MByte/s) 67218.70 MByte/s (±46992.71 MByte/s) 1.03
Memset speed - (rust) block size 1048576 31092.23 MByte/s (±25244.77 MByte/s) 30928.81 MByte/s (±25426.89 MByte/s) 1.01
Memset speed - (rust) block size 16777216 26392.92 MByte/s (±21824.40 MByte/s) 24055.06 MByte/s (±19863.24 MByte/s) 1.10
alloc_benchmarks Build Time 91.32 s 96.62 s 0.95
alloc_benchmarks File Size 0.83 MB 0.87 MB 0.96
Allocations - Allocation success 100.00 % 100.00 % 1
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 100.00 % 100.00 % 1
Allocations - Average Allocation time 7047.86 Ticks (±130.61 Ticks) 6884.16 Ticks (±146.01 Ticks) 1.02
Allocations - Average Allocation time (no fail) 7047.86 Ticks (±130.61 Ticks) 6884.16 Ticks (±146.01 Ticks) 1.02
Allocations - Average Deallocation time 1529.14 Ticks (±629.17 Ticks) 1212.05 Ticks (±597.54 Ticks) 1.26
mutex_benchmark Build Time 92.09 s 94.75 s 0.97
mutex_benchmark File Size 0.87 MB 0.92 MB 0.95
Mutex Stress Test Average Time per Iteration - 1 Threads 13.02 ns (±0.88 ns) 13.58 ns (±0.83 ns) 0.96
Mutex Stress Test Average Time per Iteration - 2 Threads 16.74 ns (±12.84 ns) 16.88 ns (±6.68 ns) 0.99

This comment was automatically generated by workflow using github-action-benchmark.

@jounathaen
Copy link
Copy Markdown
Member

Can we make uhyve a default feature?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants