Skip to content

refactor(virtio-console): remove VirtioUART wrapper#2556

Open
cagatay-y wants to merge 9 commits into
hermit-os:mainfrom
cagatay-y:refactor-console
Open

refactor(virtio-console): remove VirtioUART wrapper#2556
cagatay-y wants to merge 9 commits into
hermit-os:mainfrom
cagatay-y:refactor-console

Conversation

@cagatay-y

Copy link
Copy Markdown
Contributor

Rather than accessing the virtio-console driver through the global driver vector, place it into the using struct in a way similar to what was done in b735657.

cagatay-y added 7 commits July 9, 2026 00:40
This will allow sharing code between PCI and MMIO based devices.
Device ID is a constant defined in the VIRTIO specification for a given device
on a transport, so storing and printing it on error does not provide additional
information to the user.
Structures initialized with placeholder values can allow incorrect code that
reads them before they are actually filled in. This previously caused bugs in
virtio-net. For virtio-net, our solution was to work around it by making the
structure generic over its initialization stage. This approach, however, causes
the way the driver is initialized to differ in structure from how the other
drivers are initialized. This is an issue for us because it prevents making more
parts of the driver initialization common between the different device types.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

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: c4449c6 Previous: 2e23902 Performance Ratio
startup_benchmark Build Time 80.44 s 80.34 s 1.00
startup_benchmark File Size 0.76 MB 0.80 MB 0.95
Startup Time - 1 core 0.73 s (±0.02 s) 0.75 s (±0.02 s) 0.98
Startup Time - 2 cores 0.74 s (±0.02 s) 0.74 s (±0.02 s) 1.00
Startup Time - 4 cores 0.74 s (±0.02 s) 0.74 s (±0.02 s) 1.00
multithreaded_benchmark Build Time 82.48 s 82.11 s 1.00
multithreaded_benchmark File Size 0.90 MB 0.86 MB 1.05
Multithreaded Pi Efficiency - 2 Threads 91.21 % (±5.05 %) 85.89 % (±6.61 %) 1.06
Multithreaded Pi Efficiency - 4 Threads 44.40 % (±3.30 %) 43.43 % (±2.56 %) 1.02
Multithreaded Pi Efficiency - 8 Threads 25.83 % (±1.65 %) 25.76 % (±1.53 %) 1.00
micro_benchmarks Build Time 80.95 s 80.40 s 1.01
micro_benchmarks File Size 0.90 MB 0.86 MB 1.05
Scheduling time - 1 thread 63.39 ticks (±2.02 ticks) 62.65 ticks (±4.06 ticks) 1.01
Scheduling time - 2 threads 36.37 ticks (±6.00 ticks) 34.08 ticks (±4.10 ticks) 1.07
Micro - Time for syscall (getpid) 3.58 ticks (±0.66 ticks) 3.45 ticks (±0.58 ticks) 1.04
Memcpy speed - (built_in) block size 4096 85129.12 MByte/s (±58855.44 MByte/s) 82448.38 MByte/s (±56997.13 MByte/s) 1.03
Memcpy speed - (built_in) block size 1048576 30860.59 MByte/s (±24779.64 MByte/s) 30585.98 MByte/s (±24707.84 MByte/s) 1.01
Memcpy speed - (built_in) block size 16777216 28042.99 MByte/s (±23142.26 MByte/s) 26340.06 MByte/s (±21720.96 MByte/s) 1.06
Memset speed - (built_in) block size 4096 85085.10 MByte/s (±58832.07 MByte/s) 82292.76 MByte/s (±56891.50 MByte/s) 1.03
Memset speed - (built_in) block size 1048576 31561.29 MByte/s (±25172.90 MByte/s) 31323.85 MByte/s (±25145.86 MByte/s) 1.01
Memset speed - (built_in) block size 16777216 28765.16 MByte/s (±23558.02 MByte/s) 27104.68 MByte/s (±22209.94 MByte/s) 1.06
Memcpy speed - (rust) block size 4096 78437.03 MByte/s (±54581.54 MByte/s) 74097.96 MByte/s (±51811.44 MByte/s) 1.06
Memcpy speed - (rust) block size 1048576 30650.28 MByte/s (±24739.56 MByte/s) 30361.60 MByte/s (±24602.37 MByte/s) 1.01
Memcpy speed - (rust) block size 16777216 26999.32 MByte/s (±22308.87 MByte/s) 27625.34 MByte/s (±22806.88 MByte/s) 0.98
Memset speed - (rust) block size 4096 78964.89 MByte/s (±54925.79 MByte/s) 74373.47 MByte/s (±51976.48 MByte/s) 1.06
Memset speed - (rust) block size 1048576 31337.01 MByte/s (±25130.78 MByte/s) 31110.89 MByte/s (±25033.24 MByte/s) 1.01
Memset speed - (rust) block size 16777216 27749.03 MByte/s (±22768.43 MByte/s) 28386.93 MByte/s (±23265.03 MByte/s) 0.98
alloc_benchmarks Build Time 75.18 s 74.76 s 1.01
alloc_benchmarks File Size 0.84 MB 0.87 MB 0.96
Allocations - Allocation success 91.31 % 91.31 % 1
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 61.44 % 61.44 % 1
Allocations - Average Allocation time 2688.95 Ticks (±466.55 Ticks) 5860.58 Ticks (±98.43 Ticks) 0.46
Allocations - Average Allocation time (no fail) 3707.00 Ticks (±403.80 Ticks) 6554.81 Ticks (±92.86 Ticks) 0.57
Allocations - Average Deallocation time 761.94 Ticks (±78.00 Ticks) 1805.01 Ticks (±250.35 Ticks) 0.42
mutex_benchmark Build Time 77.44 s 79.82 s 0.97
mutex_benchmark File Size 0.90 MB 0.86 MB 1.05
Mutex Stress Test Average Time per Iteration - 1 Threads 11.86 ns (±0.45 ns) 12.10 ns (±0.41 ns) 0.98
Mutex Stress Test Average Time per Iteration - 2 Threads 38.02 ns (±2.49 ns) 40.26 ns (±1.68 ns) 0.94

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

Rather than accessing the virtio-console driver through the global driver
vector, place it into the using struct in a way similar to what was done in
b735657.
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.

1 participant