Skip to content

Commit a4200cc

Browse files
committed
Disable tweets
Need to figure something out here... Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent 9e51537 commit a4200cc

4 files changed

Lines changed: 13 additions & 9 deletions

File tree

content/blog/2021/08/14-progress-report.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ Instead, a much safer approach that has been used by projects such as [Nouveau](
2424

2525
This is very different from a typical virtual machine, which is designed to run a guest OS on top of a host OS, with a full set of virtualized hardware. Our hypervisor, which is built on our [m1n1](https://asahilinux.org/2021/03/progress-report-january-february-2021/#playing-with-hardware) bootloader and hardware experimentation tool, is a completely bespoke implementation. It is designed to mostly stay out of the way of the guest OS, running it in an environment as close to bare metal as possible, while just transparently intercepting and logging hardware accesses. Thus, macOS "sees" the real M1 hardware, and interacts with it as normal - complete with a full accelerated desktop.
2626

27+
<!--
2728
{{< captioned caption="This tweet was posted from Safari on macOS, running on the hypervisor" >}}
28-
{{< tweet user="AsahiLinux" id="1397963184959418370" >}}
29+
{< tweet user="AsahiLinux" id="1397963184959418370" >}
2930
{{< /captioned >}}
31+
-->
3032

3133
Since the hypervisor is built on m1n1, it works together with Python code running on a separate host machine. Effectively, the Python host can "puppeteer" the M1 and its guest OS remotely. The hypervisor itself is partially written in Python! This allows us to have a very fast test cycle, and we can even update parts of the hypervisor itself live during guest execution, without a reboot.
3234

content/blog/2021/10/06-progress-report.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,11 @@ Once we have a stable kernel foundation, we will start publishing an "official"
6666

6767
As part of reverse engineering the CPU frequency hardware, I found myself needing to run macOS under the m1n1 hypervisor with full SMP support... so I made it happen! The hypervisor can now expose all 8 CPU cores to the guest, and virtualizes the CPU startup hardware. This is not only important for reverse engineering SMP-related features, it also means it now boots almost as fast as on bare metal!
6868

69+
<!--
6970
{{< captioned caption="The hypervisor, now with 8 times the cores" >}}
70-
{{< tweet user="AsahiLinux" id="1438152384165728257" >}}
71+
{< tweet user="AsahiLinux" id="1438152384165728257" >}
7172
{{< /captioned >}}
73+
-->
7274

7375
This also makes it even more practical to use for testing Linux; there is very little reason not to run under the hypervisor during most kernel development now. This makes things much easier for anyone without a serial debug cable, as the hypervisor provides a virtual UART over USB, as well as interactive debugging features.
7476

content/blog/2022/07/18-release-and-progress-report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ The OpenBSD installer knows about the magic Apple partitions, so even if you cho
112112

113113
I know what you’re all thinking… what about the GPU?
114114

115-
{{< tweet user="LinaAsahi" id="1537828477352615936" >}}
115+
<!--{< tweet user="LinaAsahi" id="1537828477352615936" >} -->
116116

117117
Good news! A couple months ago, [Asahi Lina](https://twitter.com/LinaAsahi) joined our team and took on the challenge of reverse engineering the M1 GPU hardware interface and writing a driver for it. In this short time, she has already built a prototype driver good enough to run real graphics applications and benchmarks, building on top of the existing Mesa work. The proof of concept uses m1n1 via a USB connection and runs the driver remotely, so it is bottlenecked by USB bandwidth, but she has also demonstrated that the GPU proper renders the GLMark2 phong shaded bunny scene at over 1000FPS, at 1080p resolution. This fully open source stack passes [94%](https://twitter.com/LinaAsahi/status/1546301886147731457) of the dEQP-GLES2 test suite. Not bad!
118118

content/blog/2022/11/29-gpu-story.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Since getting all these structures right is critical for the GPU to work and the
6868

6969
At first most of the driver was really just [a bunch of hardcoded structures](https://github.com/AsahiLinux/m1n1/blob/main/proxyclient/experiments/agx_1tri.py), but eventually I managed to get them right and render a triangle!
7070

71-
{{< tweet user="LinaAsahi" id="1532028228189458432" >}}
71+
<!-- {< tweet user="LinaAsahi" id="1532028228189458432" >} -->
7272

7373
This was just a hacked up together demo, though... before starting on the Linux kernel driver, I wanted to make sure I really understood everything well enough to design the driver properly. Just rendering one frame is easy enough, but I wanted to be able to render multiple frames, and also test things like concurrency and preemption. So I really needed a true "kernel driver"... but that's impossible to do in Python, right?!
7474

@@ -78,7 +78,7 @@ Could I run [Inochi2D](https://inochi2d.com/) on top of Mesa, with Alyssa's Mesa
7878

7979
It's so ridiculous that it worked! ✨
8080

81-
{{< tweet user="LinaAsahi" id="1537828477352615936" >}}
81+
<!-- {< tweet user="LinaAsahi" id="1537828477352615936" >} -->
8282

8383
## A new language for the Linux kernel
8484

@@ -108,11 +108,11 @@ The more I worked with Rust, the more I fell in love with it! It feels like Rust
108108

109109
The driver slowly came together, and on September 24th I finally got kmscube to render the first cube, with my brand new Rust driver!
110110

111-
{{< tweet user="LinaAsahi" id="1573488347250536449" >}}
111+
<!-- {< tweet user="LinaAsahi" id="1573488347250536449" >} -->
112112

113113
And then, something magical happened.
114114

115-
{{< tweet user="LinaAsahi" id="1575345368018997248" >}}
115+
<!-- {< tweet user="LinaAsahi" id="1575345368018997248" >} -->
116116

117117
Just a few days later, I could run a full GNOME desktop session!
118118

@@ -126,7 +126,7 @@ Of course, there are always unsafe sections of code, but since Rust makes you th
126126

127127
Oh, and there's also error and cleanup handling! All the error-prone `goto cleanup` style error handling to clean up resources in C just... vanishes with Rust. Even just that is worth it on its own. Plus you get real iterators and reference counting is automatic! ❤
128128

129-
{{< tweet user="LinaAsahi" id="1583498896847667216" >}}
129+
<!-- {< tweet user="LinaAsahi" id="1583498896847667216" >} -->
130130

131131
## Joining forces
132132

@@ -143,7 +143,7 @@ And since the GPU power management is handled by the firmware, all that just wor
143143

144144
What about Vulkan support? Don't worry... [Ella](https://tech.lgbt/@ella) is working on that! ✨✨
145145

146-
{{< tweet user="EllaStanforth" id="1584316751591878656" >}}
146+
<!-- {< tweet user="EllaStanforth" id="1584316751591878656" >} -->
147147

148148
## What's next?
149149

0 commit comments

Comments
 (0)