<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alessandro Sangiorgi — GPU Performance Engineer</title><link>https://contact.alessandrosangiorgi.net/</link><description>Recent content on Alessandro Sangiorgi — GPU Performance Engineer</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 31 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://contact.alessandrosangiorgi.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Serving DeepSeek-V4-Flash-0731 in Tensor Parallel Across Two DGX Sparks</title><link>https://contact.alessandrosangiorgi.net/posts/deepseek-v4-flash-0731-tensor-parallel-dgx-spark/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/deepseek-v4-flash-0731-tensor-parallel-dgx-spark/</guid><description>&lt;p&gt;DeepSeek published &lt;strong&gt;DeepSeek-V4-Flash-0731&lt;/strong&gt; today — the official release superseding the preview, &amp;ldquo;only re-post-trained&amp;rdquo; on the same architecture, but with a large jump in agentic capability:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Benchmark&lt;/th&gt;
 &lt;th style="text-align: right"&gt;V4-Flash-0731&lt;/th&gt;
 &lt;th style="text-align: right"&gt;V4-Flash (Preview)&lt;/th&gt;
 &lt;th style="text-align: right"&gt;V4-Pro (Preview)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Terminal Bench 2.1&lt;/td&gt;
 &lt;td style="text-align: right"&gt;82.7&lt;/td&gt;
 &lt;td style="text-align: right"&gt;61.8&lt;/td&gt;
 &lt;td style="text-align: right"&gt;72.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cybergym&lt;/td&gt;
 &lt;td style="text-align: right"&gt;76.7&lt;/td&gt;
 &lt;td style="text-align: right"&gt;38.7&lt;/td&gt;
 &lt;td style="text-align: right"&gt;52.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeepSWE&lt;/td&gt;
 &lt;td style="text-align: right"&gt;54.4&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7.3&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Toolathlon-Verified&lt;/td&gt;
 &lt;td style="text-align: right"&gt;70.3&lt;/td&gt;
 &lt;td style="text-align: right"&gt;49.7&lt;/td&gt;
 &lt;td style="text-align: right"&gt;55.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DSBench-Hard&lt;/td&gt;
 &lt;td style="text-align: right"&gt;59.6&lt;/td&gt;
 &lt;td style="text-align: right"&gt;25.8&lt;/td&gt;
 &lt;td style="text-align: right"&gt;31.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Notably it &lt;strong&gt;beats V4-Pro-Preview on every one of those&lt;/strong&gt;, despite a much smaller activated parameter count — and it comes with a speculative-decoding module attached out of the box. I have two &lt;a href="https://contact.alessandrosangiorgi.net/posts/dgx-spark-nccl-collective-latency/"&gt;GB10 DGX Sparks wired together over ConnectX-7&lt;/a&gt; for exactly this kind of thing, so this post is the tensor-parallel deployment recipe: what&amp;rsquo;s actually in the checkpoint, whether it fits, the launch flags, and the trap that will wedge a fresh multi-node deployment if you skip it.&lt;/p&gt;</description></item><item><title>Unboxing Two DGX Sparks, and Recovering One From a Kernel Panic on First Boot</title><link>https://contact.alessandrosangiorgi.net/posts/dgx-spark-kernel-panic-recovery/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/dgx-spark-kernel-panic-recovery/</guid><description>&lt;p&gt;I recently took delivery of &lt;strong&gt;two NVIDIA DGX Sparks&lt;/strong&gt; (the GB10 units I later wired together for the &lt;a href="https://contact.alessandrosangiorgi.net/posts/dgx-spark-nccl-collective-latency/"&gt;small-message NCCL latency benchmark&lt;/a&gt;). The out-of-box experience is genuinely slick — right up until one of the two bricked itself on the very first software update and dropped me into a kernel panic. This post is the other half of the story: the setup flow, and exactly how I brought the dead one back.&lt;/p&gt;</description></item><item><title>Wiring Two DGX Sparks: One Script to Detect, Configure, and Validate the RoCE Link</title><link>https://contact.alessandrosangiorgi.net/posts/dgx-spark-roce-link-validation/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/dgx-spark-roce-link-validation/</guid><description>&lt;p&gt;You plug the ConnectX-7 stacking cable into two DGX Sparks, assign a couple of IPs, and&amp;hellip; now what? Before you trust that link with any distributed workload, you want to &lt;em&gt;know&lt;/em&gt; three things are true:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The link runs at line rate (~100 Gbps/rail), not pinned at ~13 Gbps by a firmware-throttle trap.&lt;/li&gt;
&lt;li&gt;RDMA latency is in the single-digit microseconds.&lt;/li&gt;
&lt;li&gt;NCCL collectives actually ride the RoCE fabric — not a silent TCP fallback that &lt;em&gt;looks&lt;/em&gt; like it works but runs 50× slower.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Every one of those can fail &lt;em&gt;silently&lt;/em&gt;, reporting a plausible-but-wrong number. And before you can even test them, you have to answer a surprisingly annoying question: &lt;strong&gt;which network device is the live one?&lt;/strong&gt; On a fresh Spark the answer is not obvious, and it is not the same name on both boxes.&lt;/p&gt;</description></item><item><title>The Number Nobody Published: Small-Message NCCL Latency Between Two DGX Sparks</title><link>https://contact.alessandrosangiorgi.net/posts/dgx-spark-nccl-collective-latency/</link><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/dgx-spark-nccl-collective-latency/</guid><description>&lt;p&gt;If you go looking for performance numbers on two NVIDIA DGX Sparks wired together over the ConnectX-7 stacking cable, you&amp;rsquo;ll find the same thing everywhere: &lt;strong&gt;bandwidth&lt;/strong&gt;. NCCL bus bandwidth of ~24 GB/s. RDMA &lt;code&gt;ib_write_bw&lt;/code&gt; of ~190 Gbps aggregate. iperf throughput. Forum threads about getting from a throttled 13 Gbps back up to line rate.&lt;/p&gt;
&lt;p&gt;What you will &lt;em&gt;not&lt;/em&gt; find — anywhere, as of this writing — is the number that actually matters for a latency-bound distributed workload: &lt;strong&gt;how long does a small-message collective take?&lt;/strong&gt; Not a 1 GB all-gather that&amp;rsquo;s bottlenecked on bandwidth, but a few-kilobyte all-reduce whose cost is pure round-trip latency, the kind that lands on the critical path of tightly-coupled parallel execution and gets paid once per layer, per step, with no overlap.&lt;/p&gt;</description></item><item><title>From a Student Side Project to a Google Success Story</title><link>https://contact.alessandrosangiorgi.net/posts/featured-by-google-sangiorgi-srl/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/featured-by-google-sangiorgi-srl/</guid><description>&lt;p&gt;Google just published a &lt;a href="https://www.google.com/ads/publisher/stories/sangiorgi_srl/"&gt;Publisher Success Story about Sangiorgi SRL&lt;/a&gt; — the company I founded and still run from Sicily while working full-time at Red Hat. It&amp;rsquo;s a strange and wonderful thing to see your own origin story written up by the platform that made it possible. Here&amp;rsquo;s the longer version, in my own words.&lt;/p&gt;
&lt;h2 id="it-started-as-a-way-to-learn"&gt;It started as a way to learn&lt;/h2&gt;
&lt;p&gt;While I was studying computer engineering in Catania, I built &lt;a href="https://play.google.com/store/apps/details?id=com.tester.wpswpatester"&gt;WiFi WPS WPA Tester&lt;/a&gt; as a side project. I wanted to understand how WPS — the &amp;ldquo;press a button to connect&amp;rdquo; feature on home routers — actually worked, and how badly it could fail. The app let people check whether their own Wi-Fi network was exposed to the well-known WPS vulnerabilities of the time.&lt;/p&gt;</description></item><item><title>FLAG_MUTABLE PendingIntent in DeviceAsWebcam Allows Foreground Activity Hijack via fillIn() Injection</title><link>https://contact.alessandrosangiorgi.net/posts/deviceaswebcam-flag-mutable-pendingintent-activity-hijack/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/deviceaswebcam-flag-mutable-pendingintent-activity-hijack/</guid><description>&lt;p&gt;I reported a vulnerability in AOSP&amp;rsquo;s &lt;code&gt;DeviceAsWebcam&lt;/code&gt; service where a &lt;code&gt;FLAG_MUTABLE&lt;/code&gt; PendingIntent is used as the foreground notification&amp;rsquo;s &lt;code&gt;contentIntent&lt;/code&gt;. An attacker app with user-granted &lt;code&gt;NotificationListenerService&lt;/code&gt; access can extract the PendingIntent, inject arbitrary intent fields via &lt;code&gt;fillIn()&lt;/code&gt;, and force-launch the system-UID &lt;code&gt;DeviceAsWebcamPreview&lt;/code&gt; activity in the foreground — overlapping whatever the user was doing. The report was submitted on &lt;strong&gt;March 19, 2026&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="the-vulnerable-code"&gt;The Vulnerable Code&lt;/h2&gt;
&lt;p&gt;The vulnerability is in &lt;a href="https://android.googlesource.com/platform/packages/services/DeviceAsWebcam/+/refs/heads/main/interface/src/com/android/deviceaswebcam/DeviceAsWebcamFgService.java#134"&gt;&lt;code&gt;DeviceAsWebcamFgService.java&lt;/code&gt; (line 134)&lt;/a&gt;. The preview activity intent is created with only the component set — no action, no data, no extras, no flags, no categories:&lt;/p&gt;</description></item><item><title>Retrieving the ARP Table on Android SDK 30+ via Netlink</title><link>https://contact.alessandrosangiorgi.net/posts/ip-neigh-android-sdk30-netlink-workaround/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/ip-neigh-android-sdk30-netlink-workaround/</guid><description>&lt;p&gt;Starting with Android 11 (API level 30), Google removed the ability for apps to run &lt;code&gt;ip neigh&lt;/code&gt; or bind netlink sockets. This broke every app that relied on reading the ARP table — network scanners, device discovery tools, local network diagnostics. The change was intentional: Google argued that exposing the neighbor table leaks information about other devices on the local network, which is a privacy concern.&lt;/p&gt;
&lt;p&gt;The problem is that there was no replacement API. Apps that needed neighbor discovery — for example, to find smart home devices, printers, or other hosts on the LAN — were simply out of luck. So I wrote a native library that retrieves the ARP table via RTNetlink without binding the socket, shipped it as an Android library, and &lt;a href="https://github.com/fulvius31/ip-neigh-sdk30"&gt;open-sourced it&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Blocking WiFi De-Auth Attacks in the Kernel with eBPF and XDP</title><link>https://contact.alessandrosangiorgi.net/posts/ebpf-xdp-wifi-deauth-defense/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/ebpf-xdp-wifi-deauth-defense/</guid><description>&lt;p&gt;802.11 de-authentication attacks are one of the oldest and cheapest WiFi denial-of-service techniques. An attacker sends forged de-auth management frames to disconnect clients from an access point — &lt;code&gt;aireplay-ng&lt;/code&gt; sends 128 per attack command (64 directed at the AP, 64 at the client). Despite being a known problem for over two decades, the main defense is still 802.11w (Protected Management Frames), which requires both AP and client support and still degrades under high-rate floods.&lt;/p&gt;</description></item><item><title>Intercepting Android's ManagedProvisioning: A PendingIntent Vulnerability in AOSP</title><link>https://contact.alessandrosangiorgi.net/posts/managedprovisioning-pendingintent-vulnerability/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/managedprovisioning-pendingintent-vulnerability/</guid><description>&lt;p&gt;I found and reported a vulnerability in Android&amp;rsquo;s &lt;code&gt;ManagedProvisioning&lt;/code&gt; component — the system app responsible for setting up enterprise-managed (work) profiles. The bug allows any unprivileged third-party app to intercept a privileged provisioning callback, leaking install timing, session metadata, and in some cases package details — all without any special permissions.&lt;/p&gt;
&lt;p&gt;Google acknowledged the report, logged it for potential remediation, and classified it as low severity. Here&amp;rsquo;s the full breakdown.&lt;/p&gt;</description></item></channel></rss>