Category: Linux

  • Using signalfd and pidfd to make signals less painful under Linux

    Anyone introduced to Unix programming gets to marvel at the clever construct of signals. In the life-cycle of a process, fortune and misfortune are present in good measure. Signals allow the operating system to tell the process about the occurrence of various events like the execution of illegal CPU instructions, a user typing and thus…

  • Pipes and process groups

    Source code for this tidbit is available at the Linux Tidbits repo here.

  • Containers the hard way: Gocker: A mini Docker written in Go

    They are popular and they are misunderstood. Containers have become the default way applications are packaged and run on servers, initially popularized by Docker. Now, Docker itself is misunderstood. It is the name of a company and a command (a suite of commands, rather) that allow you to manage containers (create, run, delete, network) easily.…

  • io_uring By Example: An Article Series

    io_uring is a clever new, high-performance interface for asynchronous I/O for Linux without the drawbacks of the aio set of APIs. In this 3-part article series, we look at how to use io_uring to get the most common programming tasks done under Linux. We write a series of programs of increasing complexity to slowly but…

  • io_uring By Example: Part 3 – A Web Server with io_uring

    This article is a part of a series on io_uring Series introduction Part 1: Introduction to io_uring. In this article we create cat_uring based on the raw io_uring interface and cat_liburing, built on the higher level liburing. Part 2: Queuing multiple operations: We develop a file copying program, cp_liburing leveraging multiple requests with io_uring. Part…

  • io_uring By Example: Part 2 – Queuing multiple requests

    This article is a part of a series on io_uring Series introduction Part 1: Introduction to io_uring. In this article we create cat_uring based on the raw io_uring interface and cat_liburing, built on the higher level liburing. Part 2: This article. Part 3: A web server written using io_uring. In part 1, we saw how…

  • io_uring by example: Part 1 – Introduction

    This article is a part of a series on io_uring Series introduction Part 1: This article. Part 2: Queuing multiple operations: We develop a file copying program, cp_liburing leveraging multiple requests with io_uring. Part 3: A web server written using io_uring. Introduction Come to think about it, I/O, along with compute are the only two…

  • Sparkler: A KVM-based Virtual Machine Manager

    [Join the discussion on Hacker News here.] Serverless computing is quite the rage these days and AWS Lambda is on the forefront of this. A while ago, they released Firecracker, the engine behind Lambda. Unsurprisingly, it was based on Linux’s KVM (Kernel-based Virtual Machine) technology, but what was surprising was how it gave up the…

  • How AWS Firecracker works: a deep dive

    Anything that powers technology like AWS Lambda needs to be really fast. And it needs to be secure. While AWS could have gone with existing technology, to satisfy both these main requirements, they went with building something new, Firecracker, that is both really fast – it can boot Linux and start executing user space processes…

  • Linux Pressure Stall Information (PSI) by Example

    [Discuss this article and read other’s comments on the subject on this thread on Hacker News.] The three fundamental building blocks of computers, CPU, I/O and RAM can come under pressure due to contention and this is not uncommon. To both accurately size workloads and to increase hardware utilization, having information on how much pressure…