Posts in Hardware (20 found)

EDM: An Ultra-Low Latency Ethernet Fabric for Memory Disaggregation

EDM: An Ultra-Low Latency Ethernet Fabric for Memory Disaggregation Weigao Su and Vishal Shrivastav ASPLOS'25 This paper describes incremental changes to Ethernet NICs and switches to enable efficient disaggregation of memory without the need for a separate network ( e.g., CXL) for memory traffic. Fig. 1 shows the north star: Source: https://dl.acm.org/doi/10.1145/3669940.3707221 Servers are partitioned into Compute Nodes and Memory Nodes . When a compute node wants to access remote memory, it issues a request to its local NIC, which sends the request to the correct memory node (via a switch). The key problem this paper addresses is Ethernet fabric latency (i.e., the time taken for requests/responses to flow between NICs and switches). The paper assumes that the latency between the processor and the NIC is low (and cites other papers which describe techniques for reducing this latency to below 100ns). Typical Ethernet fabric latency is measured in microseconds, which is much higher than a local memory access. The Ethernet hardware stack can be decomposed into MAC and PHY layers. The MAC is higher level and sits on top of the PHY. The paper proposes implementing EDM (Ethernet Disaggregated Memory) with modifications to the PHY layer in both the NIC and the switch. Normal network packets flow through the MAC and PHY as they usually would, but a side channel exists which allows remote memory accesses to be handled directly by the enhanced PHY layer. Fig. 3 illustrates the hardware changes in Ethernet NICs and switches. Source: https://dl.acm.org/doi/10.1145/3669940.3707221 Remote memory access requests and responses are smaller than typical Ethernet packets. Additionally, end-to-end application performance is more sensitive to remote memory access latency than the latency of regular network traffic. The bulk of the paper describes how EDM achieves low latency for remote memory traffic. The EDM PHY modifications allow a memory request to preempt a non-memory packet. Say the MAC sends a 1KiB packet to the PHY, which begins to send the packet over the wire in 66-bit blocks. If a memory request shows up in the middle of transmitting the network packet, the PHY can sneak the memory request onto the wire between 66-bit blocks, rather than waiting for the whole 1KiB to be sent. Standard Ethernet requires 96 bits of zeros to be sent on the wire between each packet. This overhead is small for large packets, but it is non-trivial for small packets (like remote memory access requests). The EDM PHY modifications allow these idle bits to be used for remote memory accesses. The MAC still sees the gaps, but the PHY does not. If you ask an LLM what could possibly go wrong by trying to use the inter-frame gap to send useful data, it will spit out a long list. I can’t find too much detail in the paper about how to ensure that this enhancement is robust. The possible problems are limited to the PHY layer however, as the MAC still sees the zeros it expects. To avoid congestion and dropping of memory requests, EDM uses an in-network scheduling algorithm somewhat like PFC. The EDM scheduler is in the PHY layer of the switch. Senders notify the switch when they have memory traffic to send, and the switch responds later with a grant , allowing a certain amount of data to be sent. The authors implemented EDM on FPGAs (acting as both NIC and switch). Table 1 compares latencies for TCP/IP, RDMA, raw Ethernet packets, and EDM, breaking down latencies at each step: Source: https://dl.acm.org/doi/10.1145/3669940.3707221 Fig. 7 throws CXL into the mix: Source: https://dl.acm.org/doi/10.1145/3669940.3707221 Dangling Pointers Section 3.3 “Practical Concerns” has a discussion of what could go wrong ( e.g., fault tolerance and data corruption). It is hard to judge how much work is needed to make this into something that industry could rely on. Subscribe now

0 views
HeyDingus 2 days ago

7 Things This Week [#182]

A weekly list of interesting things I found on the internet, posted on Sundays. Sometimes themed, often not. 1️⃣ Jose Munoz has a good tip for not getting sucked into doom-scrolling apps by Siri Suggestions in Search and the App Library: simply hide them from those areas. [ 🔗 josemunozmatos.com ] 2️⃣ I love a good stats-based pitch. Herman provides one for the benefits of morning exercise. [ 🔗 herman.bearblog.dev ] 3️⃣ Jason Fried explains a clever design detail about the power reserve indicator on a mechanical watch. [ 🔗 world.hey.com ] 4️⃣ I found myself nodding along to Chris Coyier’s list of words you should probably avoid using in your writing. [ 🔗 css-tricks.com ] 5️⃣ I spent a surprising amount of time recently perusing the depths of Louie Mantia’s portfolio and blog after reading his People & Blogs interview . He’s worked on so many cool things, lots of which have touched my life. [ 🔗 lmnt.me ] 6️⃣ Robert Birming made me feel a little better about my less-than-tidy house. [ 🔗 robertbirming.com ] 7️⃣ I’m not going to buy it, but I’m certainly intrigued by this tiny eReader that attaches via MagSafe onto the back of your phone. I love my Kobo, but it so often gets left behind. This would be a remedy. [ 🔗 theverge.com ] Thanks for reading 7 Things . If you enjoyed these links or have something neat to share, please let me know . And remember that you can get more links to internet nuggets that I’m finding every day by following me @jarrod on the social web. HeyDingus is a blog by Jarrod Blundy about technology, the great outdoors, and other musings. If you like what you see — the blog posts , shortcuts , wallpapers , scripts , or anything — please consider leaving a tip , checking out my store , or just sharing my work. Your support is much appreciated! I’m always happy to hear from you on social , or by good ol' email .

0 views
./techtipsy 2 days ago

SteamOS on a ThinkPad P14s gen 4 (AMD) is quite nice

In April 2024, I wrote on the Lenovo ThinkPad P14s gen 4 and how it does not suck under Linux. That is still true. It’s been fantastic, and a very reliable laptop during all that time. The P14s gen 4 comes with a CPU that is still solid today, the AMD Ryzen 7 PRO 7840U, and that comes with impressive integrated graphics in the form of an AMD Radeon 780M. I’ve had a Steam Deck. I’ve also accidentally built a Steam Machine. I had to put SteamOS on this laptop to see how well it does. I did a quick Bazzite test the last time around, but after being impressed with how well the stock SteamOS image runs on a random machine with an AMD GPU, I had to test that, too. The normal way to install SteamOS on a machine is to take the Steam Deck recovery image and to install it on your own machine that has one NVMe SSD. I didn’t want to do exactly that, I wanted to run it off of an USB SATA SSD, which the recovery image does not support, as it hard-codes the target SSD for the SteamOS installation to . There’s a handy project out there that customizes the recovery script to allow you to install SteamOS to any target device, but I learned about that after the fact. I went a slightly different route: I imaged the SteamOS installation from my DIY Steam Machine build, wrote it to the 4TB USB SSD that I had available for testing, and after that I resized the partition to take up the full disk. Bam, clean SteamOS on a USB SSD! Oh, and before I did that, I did the same process but to a 128 GB Samsung FIT USB 3.0 thumb drive. The game library images did load a bit slowly, but it was a great demonstration of how low you can go with the hardware requirements. I wouldn’t recommend actually installing games on such a setup as that would likely kill the USB thumb drive very quickly. I ran the SteamOS setup on this laptop over a USB-C dock that only supports running at up to 4K at 30Hz, so I did testing at 1080p 60Hz setup. You’re unlikely to want to run this setup at 4K anyway, unless you’re a fan of light, easy to run games like Katamari or Donut County. In most games, the experience was enjoyable. 1080p resolution, maybe change the settings to medium or low in some cases, and you’ll likely have a solid gaming experience. Forza Horizon 4? No problem, 1080p high settings and a solid, consistent experience. Need for Speed Hot Pursuit Remastered was an equally enjoyable experience, and I did not have to turn the settings down from high/ultra. God of War Ragnarök was pushing the setup to the limits. With 1080p, low/medium settings you can expect 30+ FPS. If you include AMD FSR settings in the mix and also enable FSR frame generation, you can have a perfectly enjoyable 50-60 FPS experience. Some UI hints were a bit “laggy” with frame generation, but I’m genuinely surprised how well that rendering trick worked. I’ll admit it, my eyesight is not the best, but given the choice of a crisp but laggy picture, and a slightly blurrier but smoother experience, I’d pick the latter. After a pint of Winter Stout, you won’t even notice the difference. 1 Wreckfest was also heaps fun. It did push the limits of the GPU at times, but running it at 1080p and medium/high settings is perfectly enjoyable. The observed power usage throughout the heaviest games measured via SteamOS performance metrics ( ) were around 30-40 W, with the GPU using up the most of that budget. In most games, the CPU was less heavily loaded, and in the games that required good single thread performance, it could provide it. I like SteamOS. It’s intentionally locked down in some aspects (but you can unlock it with one command), and the Flatpak-only approach to software installation will make some people mad, but I like this balance. It almost feels like a proper console-type experience, almost . Valve does not officially support running SteamOS on random devices, but they haven’t explicitly prevented it either. I love that. Take any computer from AMD that has been manufactured from the last 5 years, slap SteamOS on it, and there is a very high chance that you’ll have a lovely gaming experience, with the level of detail and resolution varying depending on what hardware you pick. A top of the line APU from AMD seems to do the job well enough for most casual gamers like myself, and if the AMD Strix Halo based systems were more affordable, I would definitely recommend getting one if you want a small but efficient SteamOS machine. Last year, we saw the proliferation of gaming-oriented Linux distros. The Steam Machine is shipping this year. DankPods is covering gaming on Linux. 2026 has to be the year of the Linux (gaming) desktop. that’s the tipsy part in techtipsy   ↩︎ that’s the tipsy part in techtipsy   ↩︎

0 views

How To Quiet A Ugreen 4800 Plus Without Sacrificing Drive Temps

I recently got a Ugreen 4800 Plus NAS, and it is basically perfect for what I wanted. Four bays, enough CPU, enough RAM, nice build quality, and it does not look like a sci-fi router from 2012. The first thing I did was wipe the OS it shipped with and install TrueNAS. That part was also great. The not so great part was the noise. I expected it to be louder than my old Synology, mostly because I moved from “HDDs in a plastic box” to “a more PC-like NAS with more airflow”. Still, it was louder than I thought it would be, and it had this annoying behavior where the fan would randomly ramp up. Which is exactly the kind of thing you notice at night.

0 views

SmartPoi Accelerometer Controller

Connects to your Poi Gets a list of images available Every time it stops spinning sends a “Change Image” signal to the poi* *only works for the newer SmartPoi firmware with Single Image selection. Code is on GitHub: https://github.com/tomjuggler/SmartPoi_Accelerometer_Controller – includes all install instructions needed (ESP32 C3 only – PlatformIO firmware). Extra: Battery, charger and switch, for one you can clip onto poi.. The post SmartPoi Accelerometer Controller appeared first on Circus Scientist . ESP32 with C3 chip: recommended: https://www.aliexpress.com/item/1005008593933324.html (just choose the correct one with antenna). I used C3 SuperMini which also works (WiFi not the best though), my better ones are still in the post. MPU-6050 Accelerometer: https://s.click.aliexpress.com/e/_c40exNFh

0 views
Jeff Geerling 3 days ago

Exploring a Modern SMTPE 2110 Broadcast Truck With My Dad

In October, my Dad and I got to go behind the scenes at two St. Louis Blues (NHL hockey) games, and observe the massive team effort involved in putting together a modern digital sports broadcast. I wanted to explore the timing and digital side of a modern SMPTE 2110 mobile unit, and my Dad has been involved in studio and live broadcast for decades, so he enjoyed the experience as the engineer not on duty!

0 views
Brain Baking 3 days ago

Creating Buttons To Remember Things

My wife recently bought a device to scratch her creative crafting itch: a button press . At first, I dismissed it as yet another thing requiring space in her increasingly messy atelier. I don’t know how we manage to do it but we seem to be experts in gathering things that gather things themselves: dust. But now that she finally started doing something with it, I was secretly becoming interested in what it could mean for our scrapbook making. The button press in question is a “We R Makers Button Press Bundle All-In-One Kit” that comes with press, a few add-on peripherals that allow you to modify how it cuts and presses, and of course the buttons themselves. The button press in action, about to create a 'little monster'. Since handling the lever requires a bit of pressure to correctly cut and a second time fit the cut circle inside the button, I yelled TSJAKKA every time she would press it, to great joy of our daughter. She now calls it the Tsjakka . “Daddy, can we make another little monster with Tjsakka?” Because my first instinct after thinking about what kind of buttons I wanted was to print a variant of the Alien Lisp Mascot —a green monster with five eyes. Fellow nerds reading this might have covered their entire laptop back with cool looking stickers: a Docker container sticker, an IDEA logo one, the GitHub Octocat, and god knows what else you managed to nab from a conference table. While I always found those laptops to be just cute, I never wanted to soil mine with a sticker of some technology stack that I would grow to hate a few years later. Thanks to a random takeover by Microsoft sharks, for instance. *cough* Give Up Github *cough*. So why not a programming language mascot? Java’s The Duke? No way, I’m not that big of a Java fan. The Gopher perhaps? Better, but no. If I was to wear a badge, smack on a sticker somewhere prominent, it would have to be of something that makes me happy. Go is cool but boring. Java brings in a lot of money but smells like enterprise mud. So far, I haven’t encountered a single programming language that truly makes me happy. But Lisp is coming very close. The Lisp Alien it is, then: The result: three buttons pinned to the inside of my bike bag. One of the other two buttons is self-explanatory: the Brain Baking logo. The first one on the upper left is a part of my late father-in-law’s master’s thesis; an electronic schematic with resistors. The embossed logo on the button press, below the We R name, reads: Memory Keepers. Which is exactly what that button is for. They market it as a way to permanently record precious memories—and wear them on your sleeve . I think it’s brilliant. We don’t have an endless supply of metal clips and plastic caps to press that memory in so we have to be mindful: which one’s do we really want to create? Sure you can buy more and it’s not expensive, but that’s not the point. The point is that there won’t be a Duke on my bag, but there will be a Brain Baking logo. And, apparently, a warning. Most folks pin these buttons onto the obvious visible part of their bag. But I don’t want to come across as a button lunatic (at least not at first sight). A more convincing argument then: the bag I pinned it on is a simple detachable laptop cycle bag . The exterior gets wet now and then. I highly doubt that the button is water resistant. The third but slightly less convincing argument is that the buttons rattle quite a bit as the needle on the back used to pin it onto something sits quite loose in its metal socket. Perhaps that depends from product type to type. As you might have guessed, our daughter now is dead set on pinning a little monster on her bag she uses carry her lunch go to school. We’ll first have to ask Tjsakka to get back to work. Related topics: / crafting / By Wouter Groeneveld on 7 February 2026.  Reply via email .

0 views
Jeff Geerling 4 days ago

The first good Raspberry Pi Laptop

Ever since the Raspberry Pi Compute Module 5 was introduced, I wondered why nobody built a decent laptop chassis around it. You could swap out a low spec CM5 for a higher spec, and get an instant computer upgrade. Or, assuming a CM6 comes out someday in the same form factor, the laptop chassis could get an entirely new life with that upgrade.

0 views

I made my Keychron K2 HE stealthy

Hey guys, I've got a new keyboard: Keychron K2 HE and customized it with blank black and wooden keycaps. So, I'd like to share how I did it. Here is a video: The above keyboard is Keychron Q1, which I've been using for over 3 years. It's been working perfectly, and I haven't ever had any issues with it. However, I felt like using another keyboard. So, I've got the new one: Keychron K2 HE, which is the one below in the pic. The design looks already beautiful out of the box. I really love the wooden side frame. It comes with brown keycaps for ESC and return keys, but they are plastic, so they felt a bit off. So, I'd like to replace them with my wooden keycaps. I used a keycap removal tool bundled with the package. These wooden keycaps are from Etsy, which fit with the keyboard, fortunately: Looks good :) I've been interested in trying blank keycaps because it's been unnecessary to look at keys when coding for years for me, except for some special keys like volume up/down. I really liked the feeling of the default keycaps, which are made of PBT. So, I searched for blank PBT keycaps that I can buy from Japan, and found this one: This keycap set is originally for keyboards called Majestouch by Filco. However, I found an article where a guy used this for his keychron (a different model). So, I decided to try it, too. Thanks to the same material, they look very similar. I'd prefer the rounded corners of the original ones, otherwise they are perfect. Since Keychron K2's right shift key is shorter than usual, this keycap set doesn't include a keycap for it, unfortunately. So, I ended up putting masking tape on it. It looks ok. I've been using it for around 3 weeks, and it's been working pretty well so far. I'm happy with it. Here are some additional shots: Using these blank keycaps didn’t affect my typing speed, as you can see in the demo in the video. My WPM is still around 100, as usual on this keyboard. The layout is almost the same as a MacBook Pro, so it’s never been awkward to switch between them. Noice. https://www.etsy.com/listing/921781674/wooden-keycaps-black-walnut-wood-key

0 views

An Analysis of User-space Idle State Instructions on x86 Processors

An Analysis of User-space Idle State Instructions on x86 Processors Malte-Christian Kuns, Hannes Tröpgen, and Robert Schöne ICPE'25 I’ve long believed that busy waiting is poor form. The closest thing you should ever come to busy waiting is to lock a , which will busy wait for a short while on your behalf. If your primary concern is power consumption, then busy waiting may be less offensive on a modern processor. This paper describes newly added x86 instructions to enable low power busy waiting from user space, and has a ton of data to help you sleep better at night. puts the processor into a low power state for a user-specified amount of time. supports two low power states ( and ), which trade power consumption for wake-up latency. TPAUSE can be called in user space but doesn’t wrest control of the core away from the OS. The trick is the OS can set a maximum timeout value, which gives the OS a chance to switch away from the busy waiting thread. and instructions are similar to but allow the processor to be woken up when a write occurs in a specified memory range. sets up the memory range to be monitored, and causes the processor to enter a low power state. accepts a timeout value and a target power state (just like ). AMD supports similar functionality via the and instructions. A key question the paper investigates is how closely the user-specified timeout is honored. Fig. 1 shows results for three Intel cores: Source: https://dl.acm.org/doi/10.1145/3676151.3719370 Times are measured in timestamp counter cycles (roughly 3 GHz for Alder Lake). The plateau at the top right is caused by the OS-specified maximum timeout. The authors find that timeout values are quantized ( e.g., 83 cycles on Alder Lake P-core). Additionally, for short timeouts the processor may ignore the user-requested power state (presumably because it doesn’t make sense to enter a deep sleep for a short amount of time). On Alder Lake P-cores, the threshold below which the processor will not enter the lowest power state is around 23,000 TSC cycles. Alder Lake E-cores seem to only support one low power state. Fig. 3 measures how much the processor can “oversleep” (wake up later than requested) depending on processor frequency and requested power state: Source: https://dl.acm.org/doi/10.1145/3676151.3719370 And finally, table 2 shows measured power consumption for these new instructions vs old-fashioned busy wait loops that uses the PAUSE instruction (which does not support a user-specified timeout): Source: https://dl.acm.org/doi/10.1145/3676151.3719370 I’m shocked by the advantage that AMD has here. If CPU core power during busy waiting is your primary concern, then you should choose your chip carefully. Condition variables are a general and useful abstraction. It would be nice if code that used condition variables could automatically benefit from these instructions. Maybe some compiler and/or hardware assistance is necessary to enable that. Subscribe now

0 views
Stratechery 6 days ago

Apple Earnings, Supply Chain Speculation, China and Industrial Design

Apple's earnings could have been higher but the company couldn't get enough chips; then, once again a new design meant higher sales in China.

0 views

Re-architecting End-host Networking with CXL: Coherence, Memory, and Offloading

Re-architecting End-host Networking with CXL: Coherence, Memory, and Offloading Houxiang Ji, Yifan Yuan, Yang Zhou, Ipoom Jeong, Ren Wang, Saksham Agarwal, and Nam Sung Kim MICRO'25 This paper is the third one that I’ve posted about which deals with the subtleties of interfacing a NIC and a host CPU. Here are links to the previous posts on this subject: Disentangling the Dual Role of NIC Receive Rings CEIO vs rxBisect: Fixing DDIO’s Leaky DMA Problem The authors bring a new hammer to the construction site: CXL , which offers some interesting efficiencies and simplifications. This paper shows how CXL can address two specific problems with the HW/SW interface of a typical PCIe NIC: After the host prepares a packet to be transmitted, it notifies the NIC with a MMIO write. This MMIO write is expensive because it introduces serialization into the host processor pipeline. When the NIC sends a received packet to the host, ideally it would write data to the LLC rather than host DRAM. However, if the host CPU cannot keep up, then the NIC should have a graceful fallback. CXL Type-1 devices are asymmetric: the device has coherent access to host memory, but the host does not have coherent access to device memory. Practically speaking, both packet descriptors and packet payloads must still be stored in host memory (no change from PCIe based NICs). Because the NIC has coherent access to host memory, it can safely prefetch receive descriptors (RxDs) into an on-NIC cache. When a packet arrives, the NIC can grab a descriptor from the cache and thus avoid an expensive host memory read to determine where to write packet data. If the host CPU updates a RxD after the NIC has prefetched it, the CXL cache coherence protocol will notify the NIC that it must invalidate its cached data. Coherence also enables the tail pointers for transmit ring buffers to be safely stored in host memory. The host networking stack can update a tail pointer with a regular store instruction (rather than an MMIO write). The NIC can continually poll this value, using coherent reads. If the tail index pointer has not been updated since the last poll, the NIC will read a cached value and not generate any PCIe traffic. CXL Type-2 NICs allow packets and descriptors to be stored in NIC memory. The host CPU can cache data read from the NIC, as the NIC will generate the necessary coherence traffic when it reads or writes this data. The design space (what data goes into what memory) is large, and the results section has numbers for many possible configurations. Section 5.3 of the paper describes how a type-2 NIC can intelligently use the CXL operation to write received packet data directly into the host LLC. This is similar to DDIO (described in the two papers linked at the top of this post), but the key difference is that the NIC is in the driver’s seat. The CEIO paper proposes monitoring LLC usage and falling back to storing received packets in DRAM local to the NIC if the LLC is too full. With CXL, the NIC has the option to write data to host memory directly (bypassing the LLC), thus avoiding the need for DRAM attached to the NIC. The authors implemented a CXL NIC on an Altera FPGA. They compared results against an nVidia BlueField-3 PCIe NIC. Fig. 10 compares loopback latency for the two devices, normalized to the BlueField-3 latency (lower is better) for a variety of CXL configurations. Source: https://dl.acm.org/doi/pdf/10.1145/3725843.3756102 Dangling Pointers One fact I took away from this paper is that CXL coherence messages are much cheaper than MMIOs and interrupts. Burning a CPU core polling a memory location seems wasteful to me. It would be nice if that CPU core could at least go into a low power state until a relevant coherence message arrives. Thanks for reading Dangling Pointers! Subscribe for free to receive new posts and support my work. After the host prepares a packet to be transmitted, it notifies the NIC with a MMIO write. This MMIO write is expensive because it introduces serialization into the host processor pipeline. When the NIC sends a received packet to the host, ideally it would write data to the LLC rather than host DRAM. However, if the host CPU cannot keep up, then the NIC should have a graceful fallback.

0 views
./techtipsy 1 weeks ago

Meet the Garbage PC

This is the Garbage PC. Not too long ago, I received a half-broken Dell Inspiron N5110, sporting 6 GB of RAM, a dual core Intel i3-2110M, and an unsupported NVIDIA GPU of some sort. One of the hinges was loose from the case because it was screwed into plastic (common issue for these types of laptops), the touchpad did not work, and to insert a drive into it, you had to disassemble the whole machine. I’m quite confident that I’ve worked on this laptop model in a very distant past, around 2012-2013, and I remember it well because during the disassembly plastic bits were falling off everywhere and the right hinge was broken in exactly the same way. I’ve always wanted to take a half-broken laptop and to mount it on some acrylic panels (plexiglass) using brass standoffs. I love how bare PCB-s look. They’re just so damn cool, and I can’t be the only one who thinks this way, right? I also get a good feeling out of taking trash/obsolete parts and making them useful once again. This laptop was destined for the e-waste pile, which meant that it was a fantastic candidate to try this idea on. The main constraint in this project was time. I’m a parent, I have a job, and sometimes between all that I like to rest, so the amount of available time for this project was about 8 hours spread across a month. I also lack proper tooling to do a good job, so this was achieved using whatever I had available, mainly a cordless jigsaw and a hand drill. On the upside, this means that if I can do it, then you can likely do it as well! This laptop turned out to be a total pain to work on. During initial testing, it was very clear that the laptop needed a good thermal paste and pads replacement, as it tried to overheat playing casual videos off of YouTube. After I disassembled the laptop to bare essentials and put it together as a test run for the “mount it on acrylic panel” idea, the extension board containing two USB ports and the Ethernet port just stopped working. I probably broke something, but annoying nevertheless. On the positive side, the overall size of the build was smaller as a result of this happy little accident. Using this laptop via the HDMI output only also turned out to be an unnecessary headache. LibreELEC did not play well with it, often resulting in a blank screen, and on Fedora Workstation 43, there was a “ghost” display somewhere that always showed up on the display settings view. So did the internal display, even when it was disconnected. This caused an issue when trying to get Fedora installed on this machine, as the installation UI would be placed on a screen that was not the HDMI output one that I was actually using. This issue can be mitigated similar to my LattePanda V1 adventure by disabling video outputs completely. For this laptop, I modified kernel parameters via and added the following kernel parameters: Yes, it’s possible to modify the display setup on your desktop environment of choice to disable certain outputs that way, but using kernel parameters ensures that if you change monitors, you won’t have to do that all over again. To make this whole build even more garbage-tier, I used an 256GB SATA SSD with 5 known bad blocks. I sourced a large 4mm thick plexiglass panel from a hardware store, as that seemed to be the most accessible place where I can get one. In Estonia, these types of panels are often sold in the gardening sections of general hardware stores. For attaching the motherboard to the board, I sourced an assortment of M2.5 brass standoffs and screws, and multiple sets in case I need more of a specific height (turned out to be a good call on my part). I chose M2.5 because the laptop used screws of that size, and this size is common in the world of Raspberry Pi and other SBC-s, which can be handy for any future dumb ideas experiments. To mark the positions on the plexiglass, I put the motherboard assembly on it, marked some good spots with an awl 1 , and then drilled holes using a hand drill and 2.5mm drill bit. I also sourced heat inserts so that I can melt them into the plexiglass assembly, but those didn’t work out very well. I used my Pinecil soldering iron to push these in to the 2mm pre-drilled holes that I set up for these, but I had alignment issues and the threads ended up getting gunked up by the melted remains of the plexiglass, so I could not screw any brass standoffs in there. I tried to be very careful with getting the drill holes to line up, and it went mostly alright. My recommendation here is to be precise, and don’t screw everything tight before you’ve got screws and standoffs lined up for all planned holes, otherwise you lose the option of wiggling things a bit to get them to line up. The standoffs and screws were screwed on tight enough to keep things in place, but not too tight to avoid cracking. For the other panel, I cut out a similarily sized plexiglass panel, marked the holes again, and repeated the process. Since I was using a cordless jigsaw, I positioned the new piece so that the flat side of the plexiglass panel that I bought lined up with the other straight end on the existing assembly, because I will never get a good straight cut with a freehanded jigsaw. That worked out well enough. For the power button, I reused the small PCB that contains the power button and power LED-s from the original case. To house that, I drilled a small hole with 1cm diameter to slip the ribbon cable in, and I used small pieces of 3M VHB double-sided tape 2 to secure it to the panel. And there you have it, the garbage PC. The shine of the plexiglass does a fantastic job of bringing out the beauty of the motherboard and all its components. Standoffs leave plenty of room for the machine to breathe. Since the extension board is missing, this build relies heavily on one USB port and one eSATA port that also supports USB connectivity. WiFi, Bluetooth, keyboard/mouse, it’s all over USB 2.0 ports. One thing that I have yet to do is to add a base to the build so that it does not tip over that easily. Double-sided tape plus a wooden trim piece might do the trick. This build is using parts that are about 15 years old. For context, that was when dubstep was popular, it was cool to hate on Justin Bieber, rage comics and bad memes were a thing, and the news in Europe were worried about Greece going bankrupt or something. That does mean that the performance on this machine is not great. The machine still runs warm, but not nearly as hot as before. In its stock form and before any thermal paste replacements, it ran about 85+°C, but now it doesn’t seem to ever hit 70°C. As a basic desktop PC, assuming that you’re not trying to run a 1440p or 4K display, the experience feels completely usable! If you’re thinking about setting this up as a media player PC, then you’re limited to H.264 playback. H.265 was just too much for this machine. If you use Kodi with Jellyfin, then it is luckily possible to enforce transcoding content to H.264, ensuring a smooth experience on the client side. I wish that this laptop supported a “power on with AC attach” type feature that turns the laptop on once the power adapter is connected, that would’ve made it more useful as a crappy little home server. If you don’t mind extended downtime during a power outage, then it can still do that job well enough, but it’s just something I was slightly annoyed with. The board has a small SATA port that can be converted to a normal SATA port, plus an eSATA port, making it perfectly plausible to add two drives to this and to totally turn it into a home server. I tried running Windows 11 on it once, but I tried to do that with the official installer and didn’t get past the “lol your hardware is too old” view. I know that you can remove that limitation, but given the 6GB of RAM and Windows 11 being awful with using resources, it was probably for the best to give up here. The fan is audible when doing things. I did in fact take it apart and added some silicon oil inside the center to give it a fighting chance and it did improve the acoustics, but it’s something to keep in mind if you’re doing similar projects with these old laptops. There does seem to be a way to control the fan by writing values to kernel module controls in , and if you overwrite the value often enough, like in a 0.1 second loop, then you can definitely overpower the BIOS fan control on this board. The control does not seem to be fine-tuned, it’s either off, on, or full speed, but at least you can get some control over the fan speed if you really need to. Alternatively, you can slap a huge heat sink on the CPU and GPU if you want to, and you should be getting away with it. The CPU throttles heavily once you hit 80°C while playing back video, so that seems to be the soft temperature ceiling for this laptop. Overall, I’m happy I did this project. There were way more obstacles and challenges associated with this project that I expected, but the end result looks cool, so that makes it worth it in my view. It was also a good trial run to work with plexiglass and brass standoffs, and I will very likely do something cooler in the future based on this experience. I hope that this inspires more people to reuse older hardware instead of just throwing it into the e-waste pile, especially with new computer parts sometimes experiencing price spikes due to the economy doing weird things. If you’ve built something similar, then do share a link to it (ideally in blog post format) and I will happily link to it here! this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎ this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎

0 views
Circus Scientist 1 weeks ago

Failure is part of Success

Today I want to talk about failure – specifically where it applies to my work on SmartPoi/Magic Poi, with Cecli AI assistant . A little while back I decided to add Timeline mode to SmartPoi – and SmartPoi_Controls. This required code updates to: After looking at Timelines, I realised that actually I did not have to re-write the whole Timeline thing into SmartPoi firmware – I already had a working base in Magic Poi, re-written from scratch and with the integration with Magic Poi website built-in. The solution: I have started polishing the firmware up and am going to release it as Open Source. UDP mode on ESP32 just doesn’t work, sorry. I am starting to suspect it is an issue with the UDP library and not my code. I have a lot of work to do here – if the library is not working as I suspect I will have to prove that for myself by creating a simple UDP Client-Server pair of apps and troubleshoot that, without all of the complexity of SmartPoi happening around it. Estimated time: at least 2 days, but if it’s really broken there may actually be no solution? I don’t like to say something is impossible, I am willing to spend another two weeks looking at this to fix it at some point! I am currently obsessed with getting the “Perfect Sync” between poi. This is made more difficult by my “Virtual Poi” – which I am determined to sync with the “Real” poi. I actually did get this working, but now the “Virtual Poi” do not sync with one-another! So far finishing this feature is proving very difficult due to the sheer amount of services and functions that have to work together. I have MQTT server, Flask back-end, JavaScript and C++ firmware to handle. Every change needs to be uploaded to poi, and server, then tested in real world situations. The good news is, when this is working, we will have something I have never achieved before – and it’s an unique feature for LED Poi! Real-time, perfect sync over the internet. I just need time to fail and try again and it will work eventually. Looking forward to releasing Magic Poi firmware asap – while also fixing the few bugs we still have with the SmartPoi_Controls app. Many thanks to my Patreon supporters – special shout out to Flavio over in Brazil who is doing increadible things with the hardware side of things! Follow me on Patreon Check out Flavio’s work on Intagram The post Failure is part of Success appeared first on Circus Scientist . Magic Poi website (downloading of Timelines) SmartPoi firmware (both ESP32 AND Arduino versions), and SmartPoi_Controls Android App This did not succeed. I literally spent 2 weeks on this, but I am sure I mentioned before, SmartPoi code is based on a project that is now 12 years old. It works, but is very difficult to change. The changes required to add Timeline functionality were threatening to break some of that stability.

0 views
neilzone 1 weeks ago

Flo Mask Pro thoughts

When I first thought about going to FOSDEM , the thing at the top of my “to purchase” list was a new face mask / respirator. While I wear a mask on public transport, and in busy indoor venues, I’d heard that FOSDEM was going to be incredibly busy, with very poor air quality. And, rightly or wrongly, I felt that it would be sensible to get a better mask. I received several recommendations from mask-savvy fedizens, and I picked the Flo Mask Pro . It is not cheap, especially once one factors in international delivery, and it requires (well, says that it requires) the filter to be replaced daily. I don’t know how much that is “we want to sell you our custom filters” but I did change it this morning, before a second day’s use. I will never be in a position to say how effective it was, or whether it was more effective than my normal masks. I just can’t assess that reliably. What I can say is: Ultimately, yes, it is expensive, but I rather liked it. And if it helps lessen the risk of me getting sick, from whatever it might be, then that is money well spent. But, annoyingly, I have no way of assessing that. it is very comfortable, and I wore it for several hours at a time. It is heavier, but the two straps (sort of three, since the top strap splits in two) hold it in place nicely. It does not pull on my ears like my normal masks. I have a short beard and, as far as I could tell, it still sealed around my mouth and nose fine. Perhaps it would be better if I were clean shaven, but I am not. I can talk through it. I did a few tests with Sandra before I came (essentially, to make sure that I knew how to put it on correctly, and how to change the filter, before I arrived, but also to see what talking was like), and she said that I was clearly audible. I had no problem chatting to people while wearing it, in the quieter indoor areas, but there was no point at all in me trying to have a conversation without shouting in the busier areas, mask or no mask. changing the filter is easy, but there is a cost to the filters. It took me about a minute to change the filter this morning, and that was with me having to remind myself how to do it, since I tested it over Christmas and didn’t bring the instructions with me. yes, the shape makes you look a bit like a scifi soldier. I think it is the curves in the design. It did not bother me - I’m trying to be safe, not a fashion icon - but it might be a botheration factor for some. if the manufacturer stops selling the filters, I guess that it is finished, unless someone else starts selling them. it is relatively bulky. When I was not wearing it, I put it back in its small cloth bag, and then into my rucksack. It does fit into a hoodie’s pouch, but it is a it of a stretch (or I need a bigger hoodie), and into the pocket of my winter coat. I might wear it when I travel back on the Eurostar, in preference to my normal masks, simply because it is more comfortable. nobody gave me any grief whatsoever for wearing it. One person commented pleasantly - another person wearing a mask, saying that it was nice to see someone else wearing a mask - and that was it.

0 views
Stone Tools 1 weeks ago

Scala Multimedia on the Commodore Amiga

The ocean is huge. It's not only big enough to separate landmasses and cultures, but also big enough to separate ideas and trends. Born and raised in the United States, I couldn't understand why the UK was always eating so much pudding. Please forgive my pre-internet cultural naiveté. I should also be kind to myself for thinking the Video Toaster was the be-all-end-all for video production and multimedia authoring on the Amiga. Search Amiga World metadata on Internet Archive for "toaster" and "scala" and you'll see my point. "Toaster" brings up dozens of top-level hits, and "Scala" gets zero. The NTSC/PAL divide was as vast as the ocean. From the States, cross either ocean and Scala was everywhere, including a full, physical-dongle-copy-protection-removed, copy distributed on the cover disk of CU Amiga Magazine , issue 96. Listening to Scala founder, Jon Bøhmer, speak of Scala 's creation in an interview on The Retro Hour , his early intuition on the Amiga's potential in television production built Scala into an omnipresent staple across multiple continents. Intuition alone can't build an empire. Bøhmer also had gladiatorial-like aggression to maintain his dominance in that market. As he recounted, "A Dutch company tried to make a Scala clone, and they made a mistake of putting...the spec sheet on their booth and said all those different things that Scala didn't have yet. So I took that spec sheet back to my developers (then, later) lo and behold before those guys had a bug free version out on the street, we had all their features and totally eradicated their whole proposal." Now, of course I understand that it would have been folly to ignore the threat. Looked at from another angle, Scala had apparently put themselves in a position where their dominance could face a legitimate threat from a disruptor. Ultimately, that's neither here nor there as in the end, Scala had early momentum and could swing the industry their direction. Scala (the software) remains alive and well even now, in the digital signage authoring and playback software arena. You know the stuff, like interactive touchscreens at restaurant checkouts, or animated displays at retail stores. As with the outliner/PIM software in the ThinkTank article , the world of digital signage is likewise shockingly crowded. Discovering this felt like catching a glimpse of a secondary, invisible world just below the surface of conscious understanding. Scala didn't find success without good reason. It solved some thorny broadcast production issues on hardware that was alone in its class for a time. A unique blend of software characteristics (multitasking, IFF, ARexx) turned an Amiga running Scala into more than the sum of its parts. Scala by itself would have made rumbles. Scala on the Amiga was seismic. At heart, I'm a print guy. Like anyone, I enjoy watching cool video effects, and I once met Kiki Stockhammer in person. But my brain has never been wired for animation or motion design. My 3D art was always static; my designs were committed to ink on paper. I liked holding a physical artifact in my hands at the end of the design process. Considering the sheer depths of my video naivete, for this investigation I will need a lot of help from the tutorials. I'll build the demo stuff from the manual, and try to push myself further and see where my explorations take me. CU Amiga Magazine issues 97 - 102 contain Scala MM300 tutorials as well, so I'll check those out for a man-on-the-streets point of view. The first preconception I need to shed is thinking Scala is HyperCard for the Amiga. It flirts with certain concepts, but building Myst with this would be out of reach for most people. I'll never say it's "impossible," as I don't like tempting the Fates that way, but it would need considerable effort and development skills. A little terminology is useful before we really dig in. I usually start an exploration of GUI applications by checking out the available menus. With Scala , there aren't any. I don't mean the menubar is empty, I mean there isn't a menubar, period. It does not exist. I am firmly in Scala Land and Scala 's vision of how multimedia work gets done. As with PaperClip , I find its opinionated interface comforting. I have serious doubts about common assumptions of interface homogeneity being a noble goal, but that's a discussion for a future post. Despite its plain look, what we see when the program launches is richly complex. Anything in purple (or whatever your chosen color scheme uses) is clickable, and if it has its own boundaries it does its own thing. Across the top we have the Scala logo, program title bar, and the Amiga Workbench "depth gadget." Clicking the logo is how we save our project and/or exit the program. Then we have what is clearly a list, and judging from interface cues its a list of pages. This list ("script") is akin to a HyperCard stack with transitions ("wipes") between cards ("pages"). Each subsection of any given line item is its own button for interfacing with that specific aspect of the page. It's approachable and nonthreatening, and to my mind encourages me to just click on things and see what happens. The bottom-sixth holds an array of buttons that would normally be secreted away under standard Amiga GUI menus. On the one hand, this means if you see it, it's available; no poking through dozens of greyed-out items. On the other hand, keyboard shortcuts and deeper tools aren't exposed. There's no learning through osmosis here. Following the tutorial, the first thing to do is define my first "page." Click "New," choose a background as a visual starting point if you like, click "OK", choose a resolution and color depth (this is per-screen, not per-project), and click "OK" to finish. The program steps me through the process; it is clear how to proceed. The design team for Scala really should be commended for the artistic craftsmanship of the product. It is easy to put something professional together with the included backgrounds, images, and music. Everything is tasteful and (mostly) subdued, if aesthetically "of its time" occasionally. Thanks to IFF support, if you don't like the built-in assets, you can create your own in one of the Amiga's many paint or music programs. That visual care extends to the included fonts, which are a murderer's row of well-crafted classics. All the big stars are here! Futura, Garamond, Gill Sans, Compact, and more. Hey, is that Goudy I see coming down the red carpet? And behind them? Why it's none other than Helvetica, star of their own hit movie that has the art world buzzing! And, oh no! Someone just threw red paint all over Franklin Gothic. What a shame, because I'm pretty sure that's a pleather dress. The next screen is where probably 85% of my time will be spent. One thing I've noticed with the manual is a lack of getting the reader up to speed on the nomenclature of the program. This screen contains the "Edit Menu" but is that what I should call this screen? The "Edit Menu" screen? Screen layouts are called "pages." Is this the "Page Edit" screen? Anyway, the "Edit Menu" gives a lot of control, both fine and coarse, for text styling, shape types, creating buttons, setting the color palette, coordinating object reveals, and more. Buttons with hide extra options, for styling or importing other resources, and it could be argued the interface works against itself a bit. As Scala has chosen to eschew typical Amiga GUI conventions, they walk a delicate line of showing as much as possible, while avoiding visual confusion. It never feels overwhelming, but only just and could stand to borrow from the MacOS playbook's popup menus, rather than cycling of options. Entering text is simple; click anywhere on the screen and begin typing. Where it gets weird is how Scala treats all text as one continuous block. Every line is ordered by Y-position on screen, but every line is connected to the next. Typing too much on a given line will spill over into the next line down, wherever it may be, and however it may be styled. 0:00 / 0:17 1× Text weirdness in the Edit Screen. (I think I had a Trapper Keeper in that pattern.) The unobtrusive buttons "IN" and "OUT" on the left define how the currently selected object will transition into or out of the screen. Doing this by mouse selection is kind of a drag, as there is no visible selection border for the object being modified. There is an option to draw boxes around objects, but there is no differentiation of selected vs. unselected objects, except when there is. It's a bit inconsistent. The "List" button reveals a method for assigning transitions and rearranging object timings precisely. It is quickly my preferred method for anything more complex than "a simple piece of text flies into view." As a list we can define only a pure sequence. Do a thing. Do a second thing. Do a third thing. The end. Multiple items can be "chained" to perform precisely the same wipe as the parent object, with no variation. It's a grouping tool, not a timing tool. 0:00 / 0:04 1× "List" editing of text effect timings. Stay tuned for the sequel: "celeriac and jicama" I'm having a lot of fun exploring these tools, and have immediately wandered off the tutorial path just to play around. Everything works like I'd expect, and I don't need to consult the manual much at all. There are no destructive surprises nor wait times. I click buttons and see immediate results; my inquisitiveness is rewarded. Pages with animation are all good and well, but it is interactivity which elevates a Scala page over the stoicism of a PowerPoint slide. That means it's time for the go-to interaction metaphor: the good ole' button. Where HyperCard has the concept of buttons as objects, in Scala a button is just a region of the screen. It accepts two events: and , though it burdens these simple actions with the confusing names and . I mix up these terms constantly in my mind. To add a button, draw a box. Alternately, click something you've drawn and a box bound to that object's dimensions will be auto-generated. Don't be fooled! That box is not tethered to the object. It just happens to be sized precisely to the object's current dimensions and position on screen, as a helpful shortcut to generate the most-likely button for your needs. Button interactions can do a few things. First, it can adjust colors within its boundaries. Amiga palettes use indexed color, so color swaps are trivial and pixel-perfect. Have some white text that should highlight in red when the mouse enters it? Set the "mark" (mouse enter) palette to remap white to red. Same for "select" (mouse click), a separate palette remap could turn the white to yellow on click. Why am I talking about this when I can just show you? 0:00 / 0:24 1× I intentionally drew the button to be half the text height to illustrate that the button has no relation to the text itself. Color remapping occurs within button boundaries. The double palettes represent the current palette (top), and the remapped palette (bottom). Buttons can also contain simple logic, setting or reading global variable states to determine how to behave at any given moment. IF-THEN statements can likewise be embedded to route presentation order based on those variables. So, a click could add +1 to a global counter, then if the counter is a certain value it could transition to a corresponding page. 0:00 / 0:03 1× If we feel particularly clever with index color palette remapping, it is possible to give the illusion of complete image replacement. Buttons do not need any visible attributes, nor do they need to be mouse-clicked to perform their actions. If "Function Keys" are enabled at the Scala "System" level, the first 10 buttons on a page are automatically linked to F1 - F10. A sample script which ships with Scala demonstrates F-Key control over a page in real-time, altering the values of sports scores by set amounts. This is a clever trick, and with deeper thought opens up interesting possibilities. If every page in a script were to secretly contain such a set of buttons, a makeshift control panel could function like a "video soundboard" of sorts. F-Keys could keep a presentation dynamic, perhaps reacting to live audience participation. I mention this for no particular reason and it is not a setup for a later reveal. ahem Once we've made some pages, its time to stitch them together into a proper presentation, a "script" in Scala parlance. This all happens in the "Main Menu" which works similarly to the "List" view when editing page text elements, with a few differences. "Wipe" is the transition from the previous page to the selected page. If you want to wipe "out" from a page with transition X, then wipe "in" to next page with transition Y, a page must be added in-between to facilitate that. The quality of the real-time wipe effects surprises me. Again, my video naivete is showing, because I always thought the Amiga needed specialized hardware to do stuff like this, especially when there is video input. The wipes are fun, if perhaps a little staid compared to the Toaster 's. In Scala 's defense, they remain a bit more timeless in their simplicity. "Pause" controls, by time or frame count, how long to linger on a page before moving on to the next one. Time can be relative to the start of the screen reveal, or absolute so as to coordinate Scala animations with known timestamps on a pre-recorded video source. A mouse click can also be assigned as the "pause," waiting for a click to continue. "Sound" attaches a sound effect, or a MOD music file, to the reveal. There are rudimentary tools for adjusting pitch and timing, and even for trimming sounds to fit. An in-built sampler makes quick, crunchy, low-fidelity voice recordings, for when you need to add a little extra pizazz in a pinch, or to rough out an idea to see how it works. Sometimes the best tool for the job is the one you have with you. There are hidden tools on the Main Menu. Like many modern GUI table views, the gap between columns is draggable. Narrowing the "Name" column reveals two hidden options to the right: Variables and Execute. Now I'm finally getting a whiff of HyperCard . Unlike HyperCard , these tools are rather opaque and non-intuitive. Right off the bat, there is no built-in script editor. Rather, Scala is happy to position itself as one tool in your toolbox, not to provide every tool you need out of the box. It's going to take some time to get to know how these work, perhaps more than I have allocated for this project, but I'll endeavor to at least come to grips with these. The Scala manual says, "The Scala definition of variables (closely resembles) ARexx, since all variable operators are performed by ARexx." After 40 years, I guess it's time to finally learn about ARexx. ARexx is the Amiga implementation of the REXX scripting language . From ARexx User's Reference Manual, "ARexx is particularly well suited as a command language. Command programs, sometimes called "scripts" or "macros", are widely used to extend the predefined commands of an operating system or to customize an applications program." This is essentially the Amiga's AppleScript equivalent, a statement which surely has a pedant somewhere punching their 1084 monitor at my ignorance. Indeed, the Amiga had ARexx before Apple had AppleScript, but not before Apple had HyperCard . Amiga Magazine , August 1989, described it thusly, "Amiga's answer to HyperCard is found in ARexx, a programming and DOS command language, macro processor, and inter-process controller, all rolled into one easy-to-use command language." "Easy-to-use" you say? Commodore had their heart in the right place, but the "Getting Acquainted" section of the ARexx manual immediately steers hard into programmer-speak. From the jump we're hit with stuff like, "(ARexx) uses the double-precision math library called "mathieeedoubbas.library" that is supplied with the Amiga WorkBench disk, so make sure that this file is present in your LIBS: directory. The distribution disk includes the language system, some example programs, and a set of the INCLUDE files required for integrating ARexx with other software packages." I know exactly what I'd have thought back in the day. What is a "mathieeedoubbas?" What is a "library?" Is "LIBS" and "library" the same thing? What is "double-precision?" What is "INCLUDE"? What is a "language system?" You, manual, said yourself on page 2, "If you are new to the REXX language, or perhaps to programming itself, you should review chapters 1 through 4." So far, that ain't helpin'. Luckily for young me, now me knows a thing or two about programming and can make sense of this stuff. Well, "sense" in the broadest definition only. What this means for Scala is that we have lots of options for handling variables and logic in our project. The manual says, "Any ARexx operators and functions can be used (in the variable field)." However, a function like "Say," which outputs text to console, doesn't make any sense in a Scala context, so I'm not always 100% clear where lie the boundaries of useful operators and functions. In addition to typical math functions and simple string concatentation, ARexx gives us boolean and equality checks, bitwise operators, random number generation, string to digit conversion, string filtering and trimming, the current time, and a lot more. Even checking for file existence works, which possibly carried over from Scala 's roots as a modem-capable automated remote video-titler. Realistically, there's only so much we can do given the tiny tiny OMG it's so small interface into which we type our expressions. My aspirations are scoped by the interface design. This is not necessarily a bad thing , IMHO. " Small, sharp tools " is a handy mental scoping model. Variables are global, starting from the page on which they're defined. So page 1 cannot reach variables defined on page 2. A page can display the value of any currently defined variable by using the prefix in the on-screen text, as in . 0:00 / 0:08 1× I was trying to do Cheifet's melt effect, but I couldn't get animated brushes to work in Scala . Still, I was happy to get even this level of control over genlock/ Scala interplay. "Execution" in the Main Menu means "execute a script." Three options are available: Workbench, CLI, and ARexx. For a feature that gets two pages in the manual with extra-wide margins, this is a big one, but I get why it only receives a brief mention. The only other recourse would be to include hundreds of pages of training material. "It exists. Have fun." is the basic thrust here. "Workbench" can launch anything reachable via the Workbench GUI, the same as double-clicking it. This is useful for having a script set up the working environment with helper apps, so an unpaid intern doesn't forget to open them. For ARexx stuff, programs must be running to receive commands, for example. "CLI" does the same thing as Workbench, except for AmigaDOS programs; programs that don't have a GUI front-end. Maybe open a terminal connection or monitor a system resource. "ARexx" of course runs ARexx scripts. For a program to accept ARexx commands, it must have an active REXX port open. Scala can send commands, and even its own variable data, to a target program to automate it in interesting ways. I saw an example of drawing images in a paint program entirely through ARexx scripting. Scala itself has an open REXX port, meaning its own tools can be controlled by other programs. In this way, data can flow between software, even from different makers, to form a little self-enclosed, automation ecosystem. One unusually powerful option is that Scala can export its own presentation script, which includes information for all pages, wipes, timings, sound cues, etc, as a self-contained ARexx script. Once in that format, it can be extended (in any text editor) with advanced ARexx commands and logic, perhaps to extract data from a database and build dynamic pages from that. Now it gets wild. That modified ARexx file can then be brought back into Scala as an "Execute" ARexx script on a page. Let me clarify this. A Scala script, which builds and runs an entire multi-page presentation, can itself be transformed into just another ARexx script assigned to a single page of a Scala project. One could imagine building a Scala front-end with a selection of buttons, each navigating on-click to a separate page which itself contains a complete, embedded presentation on a given topic. Scripts all the way down. There's one more scripting language Scala supports, and that's its own. Dubbed Scala Lingo (or is it Lingua?), when we save a presentation script we're saving in Lingo. It's human-readable and ARexx-friendly, which is what made it possible to save a presentation as an ARexx script in the previous section. Here's pure Lingo. This is a 320x200x16 (default palette) page, solid blue background with fade in. It displays one line of white text with anti-aliasing. The text slides in from the left, pauses 3 seconds, then slides out to the right. Here's the same page as an ARexx script. Looks like all we have to do is wrap each line of Lingo in single quotes, and add a little boilerplate. So, we have Scala on speaking terms with the Amiga and its applications, already a thing that could only be done on this particular platform at the time. Scala's choice of platform was further benefited by one of the Amiga's greatest strengths. That was thanks to the "villain" of the PaperClip article , Electronic Arts. The hardware and software landscape of the 70s and 80s was a real Wild West, anything goes, invent your own way, period of experimentation. Ideas could grow and bloom and wither on the vine multiple times over the course of a decade. Why, enough was going on a guy could devote an entire blog to it all. ahem While this was fun for the developers who had an opportunity to put their own stamp on the industry, for end-users it could create a bit of a logistical nightmare. Specifically, apps tended to be siloed, self-contained worlds which read and wrote their own private file types. Five different art programs? Five different file formats. Data migration was occasionally supported, as with VisiCalc's use of DIF (data interchange format) to store its documents. DIF was not a "standard" per se, but rather a set of guidelines for storing document data in ASCII format. Everyone using DIF could roll their own flavor and still call it DIF, like Lotus did in extending (but not diverging from) VisiCalc's original. Microsoft's DIF variant broke with everyone else, a fact we'll just let linger in the air like a fart for a moment. Let's really breathe it in, especially those of us on Windows 11 . More often than not, especially in the case of graphics and sound, DIF-like options were simply not available. Consider The Print Shop on the Apple 2. When its sequel, The New Print Shop , arrived it couldn't even open graphics from the immediately previous version of itself . A converter program was included to bring original Print Shop graphics into New Print Shop . On the C64, the Koala file format became semi-standard for images, simply by virtue of its popularity. Even so, there was a market for helping users move graphics across applications on the exact same hardware. While other systems struggled, programs like Deluxe Video on the Amiga were bringing in Deluxe Music and Deluxe Paint assets without fuss. A cynic will say, "Well yeah, those were all EA products so of course they worked together." That would be true in today's "silos are good, actually" regression of computing platforms into rent extractors. But, I will reiterate once more, there was genuinely a time when EA was good to its users. They didn't just treat developers as artists, they also empowered users in their creative pursuits. EA had had enough of the file format wars. They envisioned a brighter future and proposed an open file standard to achieve precisely that. According Dave Parkinson's article "A bit IFFy," in Amiga Computing Magazine , issue 7, "The origins of IFF are to be found in the (Apple) Macintosh's clipboard, and the file conventions which allow data to be cut and pasted between different Mac applications. The success of this led Electronic Arts to wonder — why not generalize this?" Why not, indeed! In 1985, working directly in conjunction with Commodore, the Electronic Arts Interchange File Format 1985 was introduced; IFF for short. It cannot be overstated how monumental it was to unlocking the Amiga's potential as a creative workhorse. From the Scala manual, "Unlike other computers, the Amiga has very standardized file formats for graphics and sound. This makes it easy to exchange data between different software packages. This is why you can grab a video image in one program, modify it in another, and display it in yet another." I know it's hard for younger readers to understand the excitement this created, except to simply say that everything in computing has its starting point. EA and the Amiga led the charge on this one. So, what is it? From "A Quick Introduction to IFF" by Jerry Morrison of Electronic Arts, "IFF is a 2-level standard. The first layer is the "wrapper" or “envelope” structure for all IFF files. Technically, it’s the syntax. The second layer defines particular IFF file types such as ILBM (standard raster pictures), ANIM (animation), SMUS (simple musical score), and 8SVX (8-bit sampled audio voice)." To assist in the explanation of the IFF file format, I built a Scala presentation just for you, taken from Amiga ROM Kernel Reference Manual . This probably would have been better built in Lingo, rather than trying to fiddle with the cumbersome editing tools and how they (don't) handle overlapping objects well. What's done is done. 0:00 / 0:07 1× I used the previously mentioned "link" wipe to move objects as groups. IFF is a thin wrapper around a series of data "chunks." It begins with a declaration of what type of IFF this particular file is, known as its "FORM." Above we see the ILBM "FORM," probably the most prevalent image format on the Amiga. Each chunk has its own label, describes how many bytes long it is, and is then followed by that many data bytes. That's really all there is to it. IDs for the FORM and the expected chunks are spec'd out in the registered definition document. Commodore wanted developers to always try to use a pre-existing IFF definition for data when possible. If there was no such definition, say for ultra-specialized data structures, then a new definition should be drawn up. "To prevent conflicts, new FORM identifications must be registered with Commodore before use," says Amiga ROM Kernel Reference Manual . In Morrison's write-up on IFF, he likened it to ASCII. When ASCII data is read into a program, it is sliced, diced, mangled, and whatever else needs to be done internally to make the program go. However, the data itself is on disk in a format unrelated to the program's needs. Morrison described a generic system for storing data, of whatever type, in a standardized way which separated data from software implementations. At its heart, IFF first declares what kind of data it holds (the FORM type), then that data is stored in a series of labelled chunks. The specification of how many chunks a given FORM needs, the proper labels for those chunks, the byte order for the raw data, and so on are all in the FORM's IFF definition document. In this way, anyone could write a simple IFF reader that follows the registered definition, et voila! Deluxe Paint animations are suddenly a valid media resource for Scala to consume. It can be confusing when hearing claims of "IFF compatibility" in magazines or amongst the Amiga faithful, but this does not mean that any random Amiga program can consume any random IFF file. The burden of supporting various FORMS still rests on each individual developer. FORM definitions which are almost identical, yet slightly different, were allowed. For example, the image FORM is "almost identical to " with differences in the chunk and the requirement of a new chunk called . "Almost identical" is not "identical" and so though both RGBN and ILBM are wrapped in standardized IFF envelopes, a program must explicitly support the ones of interest. Prevalent support for any given FORM type came out of a communal interest to make it standard. Cooperation was the unsung hero of the IFF format. "Two can do something better than one," has been on infinite loop in my mind since 1974. How evergreen is that XKCD comic about standards ? Obviously, given we're not using it these days, IFF wound up being one more format on the historical pile. We can find vestiges of its DNA here and there , but not the same ubiquity. There were moves to adopt IFF across other platforms. Tom Hudson, he of DEGAS Elite and CAD-3D , published a plea in the Fall 1986 issue of START Magazine for the Atari ST development crowd to adopt IFF for graphics files. He's the type to put up, not shut up, and so he also provided an IFF implementation on the cover disk, and detailed the format and things to watch out for. Though inspired by Apple originally, Apple seemed to believe IFF only had a place within a specific niche. AIFF, audio interchange file format, essentially standardized audio on the Mac, much like ILBM did for Amiga graphics. Despite being an IFF variant registered with Commodore, Scala doesn't recognize it in my tests. So, again, IFF itself wasn't a magical panacea for all file format woes. That fact was recognized even back in the 80s. In Amazing Computing , July 1987, in an article "Is IFF Really a Standard?" by John Foust, "Although the Amiga has a standard file format, it does not mean Babel has been avoided." He noted that programs can interpret IFF data incorrectly, resulting in distorted images, or outright failure. Ah well, nevertheless . Side note: One might reasonably believe TIFF to be a successful variant of IFF. Alas, TIFF shares "IFF" in name only and stands for "tagged image file format." One more side note: Microsoft also did to IFF what they did to DIF. fart noise The last major feature of note is Scala's extensibility. In the Main Menu list view, we have columns for various page controls. The options there can be expanded by including EX modules, programs which control external systems. This feels adjacent to HyperCard's XCMDs and XFCNs, which could extend HyperCard beyond its factory settings. EX modules bundled with Scala can control Sony Laserdisc controllers, enable MIDI file playback, control advanced Genlock hardware, and more. Once installed as a "Startup" item in Scala , these show up in the Main Menu and are as simple to control as any of Scala's built-in features. As an EX module, it is also Lingo scriptable so the opportunity to coordinate complex hardware interactions all through point-and-click is abundant. I turned on WinUAE's MIDI output and set it to "Microsoft GS Wave Table." In Amiga Workbench, I enabled the MIDI EX for Scala . On launch, Scala showed a MIDI option for my pages so I loaded up Bohemian-Rhapsody-1.mid . Mamma mia, it worked! I haven't found information about how to make new EXes, nor am I clear what EXes are available beyond Scala's own. However, here at the tail end of my investigation, Scala is suddenly doing things I didn't think it could do. The potential energy for this program is crazy high. No, I'm not going to be doing that any time soon, but boy do I see the appeal. Electronic Arts's documentation quoted Alan Kay for the philosophy behind the IFF standard, "Simple things should be simple, complex things should possible." Scala upholds this ideal beautifully. Making text animate is simple. Bringing in Deluxe Paint animations is simple. Adding buttons which highlight on hover and travel to arbitrary pages on click is simple. The pages someone would typically want to build, the bread-and-butter stuff, is simple. The complex stuff though, especially ARexx scripting, is not fooling around. I tried to script Scala to speak a phrase using the Amiga's built-in voice synthesizer and utterly failed. Jimmy Maher wrote of ARexx in The Future Was Here: The Commodore Amiga , "Like AmigaOS itself, it requires an informed, careful user to take it to its full potential, but that potential is remarkable indeed." While Scala didn't make me a video convert, it did retire within me the notion that the Toaster was the Alpha and Omega of the desktop video space. Interactivity, cross-application scripting, and genlock all come together into a program that feels boundless. In isolation, Scala a not a killer app. It becomes one when used as the central hub for a broader creative workflow. A paint program is transformed into a television graphics department. A basic sampler becomes a sound booth. A database and a little Lingo becomes an editing suite. Scala really proves the old Commodore advertising slogan correct, "Only Amiga Makes it Possible." 0:00 / 1:48 1× I'm accelerating the cycle of nostalgia. Now, we long for "four months ago." The more I worked with Scala , the more I wanted to see how close I could get to emulating video workflows of the day. Piece by piece over a few weeks I discovered the following (needs WinUAE , sorry) setup for using live Scala graphics with an untethered video source in a Discord stream. Scala can't do video switching*, so I'm locked to whatever video source happens to be genlocked to WinUAE at the moment. But since when were limitations a hindrance to creativity? * ARexx and EX are super-powerful and can extend Scala beyond its built-in limitations, but I don't see an obvious way to explore this within WinUAE. This is optional, depending on your needs, but its the fun part. You can use whatever webcam you have connected just as well. Camo Camera can stream mobile phone video to a desktop computer, wirelessly no less. Camo Camera on the desktop advertises your phone as a webcam to the desktop operating system. So, install that on both the mobile device and desktop, and connect them up. WinUAE can see the "default" Windows webcam, and only the default, as a genlock source; we can't select from a list of available inputs. It was tricky getting Windows 11 to ignore my webcam and treat Camo Camera as my default, but I got it to work. When you launch WinUAE , you should see your camera feed live in Workbench as the background. So far, so good. Next, in Scala > Settings turn on Genlock. You should now see your camera feed in Scala with Scala's UI overlaid. Now that we have Scala and our phone's video composited, switch over to OBS Studio . Set the OBS "Source" to "Window Capture" on WinUAE. Adjust the crop and scale to focus in on the portion of the video you're interested in broadcasting. On the right, under "Controls" click "Start Virtual Camera." Discord, Twitch , et al are able to see OBS as the camera input for streaming. When you can see the final output in your streaming service of choice (I used Discord 's camera test to preview), design the overlay graphics of your heart's desire. Use that to help position graphics so they won't be cut off due to Amiga/Discord aspect ratio differences. While streaming, interactivity with the live Scala presentation is possible. If you build the graphics and scripts just right, interesting real-time options are possible. Combine this with what we learned about buttons and F-Keys, and you could wipe to a custom screen like "Existential Crisis - Back in 5" with a keypress. 0:00 / 0:35 1× Headline transitions were manually triggered by the F-Keys, just to pay off the threat I made earlier in the post. See? I set'em up, I knock'em down. I also wrote a short piece about Cheifet , because of course I did. Ways to improve the experience, notable deficiencies, workarounds, and notes about incorporating the software into modern workflows (if possible). WinUAE v6.0.2 (2025.12.21) 64-bit on Windows 11 Emulating an NTSC Amiga 1200 2MB Chip RAM, 8MB Z2 Fast RAM AGA Chipset 68020 CPU, 24-bit addressing, no FPU, no MMU, cycle-exact emulation Kickstart/Workbench 3.1 (from Amiga Forever ) Windows directory mounted as HD0: For that extra analog spice, I set up the video Filter as per this article Scala Multimedia MM300 Cover disk version from CU Amiga Magazine , issue 96 (no copy protection) I didn't have luck running MM400 , nor could I find a MM400 manual Also using Deluxe Paint IV and TurboText Nothing to speak of. The "stock" Amiga 1200 setup worked great. I never felt the need to speed boost it, though I did give myself as much RAM as possible. I'll go ahead and recommend Deluxe Paint IV over III as a companion to Scala , because it supports the same resolutions and color depths. If you wind up with a copy of Scala that needs the hardware dongle, WinUAE emulates that as well. Under are the "red" (MM200) and "green" (MM300 and higher) variants I'm not aware of any other emulators that offer a Genlock option. I did not encounter any crashes of the application nor emulator. One time I had an "out of chip RAM" memory warning pop up in Scala . I was unclear what triggered it, as I had maxed out the chip RAM setting in WinUAE . Never saw it again after that. I did twice have a script become corrupted. Scripts are plain text and human-readable, so I was able to open it, see what was faulting, and delete the offending line. So, -6 points for corrupting my script; +2 points for keeping things simple enough that I could fix it on my own. F-Keys stopped working in Scala 's demonstration pages. Then, it started working again. I think there might have been an insidious script error that looked visually correct but was not. Deleting button variable settings and resetting them got it working again. This happened a few times. I saw some unusual drawing errors. Once was when a bar of color touched the bottom right edge of the visible portion of the screen, extra pixels were drawn into the overscan area. Another time, I had the phrase "Deluxe Paint" in Edit Mode, but when I viewed the page it only said "Deluxe Pa". Inspecting the text in "List" mode revealed unusual characters (the infinity symbol?!) had somehow been inserted into the middle of the text. I outlined one option above under "Bonus: Streaming Like Its 1993" above. OBS recording works quite well and is what I used for this post. WinUAE has recording options, but I didn't have a chance to explore them. I don't yet know how to export Scala animations into a Windows-playable format. For 2026, it would surely be nice to have native 16:9 aspect ratio support. Temporary script changes would be useful. I'd love to be able to turn off a page temporarily to better judge before/after flow. It can be difficult to visualize an entire project flow sometimes. With page transitions, object transitions, variable changes, logic flow, and more, understanding precisely what to do to create a desired effect can get a little confusing. Scala wants to maintain a super simple interface almost to its detriment. Having less pretty, more information dense, "advanced" interface options would be welcome. I suppose that's what building a script in pure ARexx is for. I'd like to be able to use DPaint animated brushes. Then I could make my own custom "transition" effects that mix with the Scala page elements. Maybe it's possible and I haven't figured out the correct methodology? The main thing I wanted was a Genlock switch, so I could do camera transitions easily. That's more of a WinUAE wishlist item though.

0 views
Stratechery 1 weeks ago

2026.05: The Chip Fly in the AI Ointment

Welcome back to This Week in Stratechery! As a reminder, each week, every Friday, we’re sending out this overview of content in the Stratechery bundle; highlighted links are free for everyone . Additionally, you have complete control over what we send to you. If you don’t want to receive This Week in Stratechery emails (there is no podcast), please uncheck the box in your delivery settings . On that note, here were a few of our favorites this week. This week’s Sharp Tech video is on the Apple Vision Pro not getting live events right. Tech’s Looming Chip Problem . My first obsession in tech was semiconductors, back when every new generation provided such astronomical gains that it fundamentally shaped how the entire software industry approached development. Then, for a few decades, semiconductors faded to the background: yes, they matter, but they were commodities, both in terms of availability and ongoing costs. Today, however, chips matter more than ever thanks to AI. Yet even though it’s no longer an esoteric topic, I actually think that the industry is not thinking about them enough : today we have chip shortages, but if demand doesn’t take the initiative to restructure supply than the shortages looming by the end of the decade could dramatically curtail AI’s impact and, by extension, the entire industry’s revenue potential. — Ben Thompson What Is Meta Doing, and Why?  Thursday’s Daily Update was a return to Stratechery’s bread and butter: unpacking Meta’s latest earnings announcement and explaining why Wall Street might be overreacting to the results. Come to read how Meta beat expectations again (continuing a trend that began in Q2 2025 ), and stay to learn why, despite Wall Street’s apparent permission to spend up to $135 billion on AI infrastructure , there are fair questions to ask of Zuckerberg’s enormous bets. We doubled back to discuss all this on the podcast this week , including thoughts on whether Zuckerberg is ultimately stuck in the same box he’s been in for years — the world’s most successful app developer, yearning to be something more — and the stark contrast between Apple and Meta in the AI era.  — Andrew Sharp Disappearing PLA Generals and “De-Risking.”  The past few weeks have seen both Canada and the U.K. make outreach to the Chinese government to gin up new business and de-risk from the U.S.; on Sharp Text, I wrote about why that’s a bad idea (and why the fawning over Mark Carney’s Davos speech annoyed me). Elsewhere, a warning: we don’t have many answers as to what the hell is happening at the top of the PLA, but Xi has now purged 5 of the 6 appointees of the Central Military Commission, and 50 senior officers since 2023, including his number two in command, Gen. Zhang Youxia, last weekend. This week’s episode of Sharp China probes the questions raised by all this (for Taiwan, for Xi, was Zhang leaking nuclear secrets to the US?) and it was a terrific coda to a week of rampant speculation in the wake of genuinely seismic China news.  — AS TSMC Risk — If hyperscalers and chip companies don’t build up a TSMC competitor they are set to forego billions of dollars in revenue and stunt the AI revolution. Intel Earnings, The Agentic Opportunity, Intel’s Mistaken Pessimism — Intel’s earnings were disappointing because the company is missing a huge opportunity by virtue of selling off its capacity. An Interview with Kalshi CEO Tarek Mansour About Prediction Markets — An interview with Kalshi co-founder and CEO Tarek Mansour about the value of prediction markets. Meta Earnings, Turning Dials, Zuckerberg’s Motivation — Meta is up, despite massive CapEx plans. The company is turning every dial to drive revenue, because Mark Zuckerberg thinks winning in AI is existential. The Scorpion and the Frogs — As world leaders look to China to de-risk from the U.S., it’s worth considering how we got here. Meta’s Tim Cook Doctrine Toshiba’s Breakthrough Laptop PC The Japanese AI Boom Needs A Little More Ambition 10 Questions on the Detention of Zhang Youxia, Corruption in the PLA, Rumors, Messaging, and Taiwan The Luka Trade One Year Later, The Hottest Team in the NBA and an OKC Reality Check, Another Giannis Injury Meta’s Plans to Spend $135 Billion, The ‘AI Bubble’ Bubble?, Why Hyperscalers Should NOT Invest in TSMC

9 views
Jeff Geerling 1 weeks ago

Ode to the AA Battery

Recently this post from @Merocle caught my eye: I'm fixing my iFixit soldering station. I haven't used it for a long time and the battery has gone overdischarge. I hope it will come back to life. Unfortunately, there are no replacements available for sale at the moment. Devices with built-in rechargeable batteries have been bugging me a lot lately. It's convenient to have a device you can take with you and use anywhere. And with modern Li-ion cells, battery life is remarkable.

0 views

Forest: Access-aware GPU UVM Management

Forest: Access-aware GPU UVM Management Mao Lin, Yuan Feng, Guilherme Cox, and Hyeran Jeon ISCA'25 Unified virtual memory is an abstraction which presents a single unified address space for both the CPU and GPU. This is a convenient programming model because it allows one device to create a complex data structure (with pointers) and pass that directly to the other device. Maintaining this illusion in systems with discrete GPUs is a complex task. The state-of-the-art involves initially placing allocations in host memory and then copying them to GPU memory to resolve GPU page faults ( far-faults ). Prefetching can help avoid some far-faults. A state-of-the-art prefetcher is called the tree-based neighboring prefetcher (TBNp). Fig. 3 shows the TBNp data structure for a 512KiB allocation: Source: https://dl.acm.org/doi/10.1145/3695053.3731047 TBNp tracks each 2MiB of virtual memory with a binary tree containing 64KB leaf nodes. When a far-fault occurs on a 4 KiB page (yellow “1” in Fig. 3) the remaining 60 KiB (blue “2” in Fig. 3) in the leaf are prefetched. Once the leaves contained by a particular sub-tree are >= 50% resident in GPU memory, the remainder of the sub-tree is prefetched. In Fig. 3 that situation occurs when the three left-most leaf nodes have been transferred to GPU memory. At that point, the remaining leaf node in the subtree (green “7” in Fig. 3) is prefetched. This paper proposes customizing the TBNp trees associated with each object, with the help of access pattern profiling hardware. Fig. 7 illustrates the design: Source: https://dl.acm.org/doi/10.1145/3695053.3731047 The GPU MMU tracks access times for each object (i.e., allocation created by and for each page. Once a healthy amount of profiling data has been collected, the GPU fires an interrupt which notifies the driver that it should grab the latest statistics. The driver classifies access patterns for each object into one of the following four buckets: Linear/Streaming Non-Linear, High-Coverage, High-Intensity Non-Linear, High-Coverage, Low-Intensity Non-Linear, Low-Coverage The paper uses tree-based prefetching like TBNp, but configures the trees differently for each object depending on the access pattern bucket. This is where the name “Forest” comes from: each tree has a maximum size, so large objects are chopped up and tracked with multiple trees. Streaming accesses are detected with linear regression. If the R 2 value is close to 1, then the driver classifies the accesses as streaming. The prefetching trees used for objects accessed in a streaming manner are 4MiB in size and contain 256KiB leaf nodes (relatively large). If the driver determines accesses are not streaming, then the choice between the remaining three buckets is determined by the access coverage and access intensity . Access coverage is computed based on the minimum and maximum page numbers accessed during profiling. Access intensity is based on the number of accesses during profiling. For objects with high access coverage and high access intensity, the associated prefetching trees are 512KiB in size and contain 64KiB leaf nodes. For objects with high access coverage and low access intensity, the associated prefetching trees are 512KiB in size and contain 16KiB leaf nodes. Finally, for objects with low access intensity, the associated prefetching trees are 2MiB in size and contain 64KiB leaf nodes. Fig. 12 contains simulation results for a number of benchmarks: Source: https://dl.acm.org/doi/10.1145/3695053.3731047 is the design described in this paper. is a modification that avoids the overheads associated with initial profiling by trying to make better initial guesses about access patterns before profiling data is available. I wonder how much vertical integration can help here. Certainly, a number of applications have enough context to make smarter decisions than the driver relying on profiling information. Subscribe now Source: https://dl.acm.org/doi/10.1145/3695053.3731047 TBNp tracks each 2MiB of virtual memory with a binary tree containing 64KB leaf nodes. When a far-fault occurs on a 4 KiB page (yellow “1” in Fig. 3) the remaining 60 KiB (blue “2” in Fig. 3) in the leaf are prefetched. Once the leaves contained by a particular sub-tree are >= 50% resident in GPU memory, the remainder of the sub-tree is prefetched. In Fig. 3 that situation occurs when the three left-most leaf nodes have been transferred to GPU memory. At that point, the remaining leaf node in the subtree (green “7” in Fig. 3) is prefetched. Access Pattern Profiling This paper proposes customizing the TBNp trees associated with each object, with the help of access pattern profiling hardware. Fig. 7 illustrates the design: Source: https://dl.acm.org/doi/10.1145/3695053.3731047 The GPU MMU tracks access times for each object (i.e., allocation created by and for each page. Once a healthy amount of profiling data has been collected, the GPU fires an interrupt which notifies the driver that it should grab the latest statistics. Access Pattern Classification The driver classifies access patterns for each object into one of the following four buckets: Linear/Streaming Non-Linear, High-Coverage, High-Intensity Non-Linear, High-Coverage, Low-Intensity Non-Linear, Low-Coverage

0 views