System Architecture

System Architecture

8159 bookmarks
Custom sorting
The Android ION memory allocator
The Android ION memory allocator
Back in December 2011, LWN reviewed the list of Android kernel patches in the linux-next staging directory. The merging of these drivers, one of which is a memory allocator called PMEM, holds the promise that the mainline kernel release can one day boot an Android user space. Since then, it has become clear that PMEM is considered obsolete and will be replaced by the ION memory manager. ION is a generalized memory manager that Google introduced in the Android 4.0 ICS (Ice Cream Sandwich) release to address the issue of fragmented memory management interfaces across different Android devices. There are at least three, probably more, PMEM-like interfaces. On Android devices using NVIDIA Tegra, there is "NVMAP"; on Android devices using TI OMAP, there is "CMEM"; and on Android devices using Qualcomm MSM, there is "PMEM" . All three SoC vendors are in the process of switching to ION. This article takes a look at ION, summarizing its interfaces to user space and to kernel-space drivers. Besides being a memory pool manager, ION also enables its clients to share buffers, hence it treads the same ground as the DMA buffer sharing framework from Linaro (DMABUF). This article will end with a comparison of the two buffer sharing schemes. ION heaps Like its PMEM-like predecessors, ION manages one or more memory pools, some of which are set aside at boot time to combat fragmentation or to serve special hardware needs. GPUs, display controllers, and cameras are some of the hardware blocks that may have special memory requirements. ION presents its memory pools as ION heaps. Each type of Android device can be provisioned with a different set of ION heaps according to the memory requirements of the device. The provider of an ION heap must implement the following set of callbacks: struct ion_heap_ops { int (*allocate) (struct ion_heap *heap, struct ion_buffer *buffer, unsigned long len, unsigned long align, unsigned long flags); void (*free) (struct ion_buffer *buffer); int (*phys) (struct ion_heap *heap, struct ion_buffer *buffer, ion_phys_addr_t *addr, size_t *len); struct scatterlist *(*map_dma) (struct ion_heap *heap, struct ion_buffer *buffer); void (*unmap_dma) (struct ion_heap *heap, struct ion_buffer *buffer); void * (*map_kernel) (struct ion_heap *heap, struct ion_buffer *buffer); void (*unmap_kernel) (struct ion_heap *heap, struct ion_buffer *buffer); int (*map_user) (struct ion_heap *heap, struct ion_buffer *buffer, struct vm_area_struct *vma); }; Briefly, allocate() and free() obtain or release an ion_buffer object from the heap. A call to phys() will return the physical address and length of the buffer, but only for physically-contiguous buffers. If the heap does not provide physically contiguous buffers, it does not have to provide this callback. Here ion_phys_addr_t is a typedef of unsigned long, and will, someday, be replaced by phys_addr_t in include/linux/types.h. The map_dma() and unmap_dma() callbacks cause the buffer to be prepared (or unprepared) for DMA. The map_kernel() and unmap_kernel() callbacks map (or unmap) the physical memory into the kernel virtual address space. A call to map_user() will map the memory to user space. There is no unmap_user() because the mapping is represented as a file descriptor in user space. The closing of that file descriptor will cause the memory to be unmapped from the calling process.
·lwn.net·
The Android ION memory allocator
A deep dive into CMA
A deep dive into CMA
The Contiguous Memory Allocator (or CMA), which LWN looked at back in June 2011, has been developed to allow allocation of big, physically-contiguous memory blocks. Simple in principle, it has grown quite complicated, requiring cooperation between many subsystems. Depending on one's perspective, there are different things to be done and watch out for with CMA. In this article, I will describe how to use CMA and how to integrate it with a given platform.
·lwn.net·
A deep dive into CMA
Containers vs. Pods - Taking a Deeper Look - Ivan Velichko
Containers vs. Pods - Taking a Deeper Look - Ivan Velichko
What is the difference between a Docker Container and a Kubernetes Pod? Can a Pod be created with plain Docker commands? How are Pods implemented under the hood?
·iximiuz.com·
Containers vs. Pods - Taking a Deeper Look - Ivan Velichko
Picos at the Edge
Picos at the Edge
The future of computing is moving from the cloud to the edge. How can we create a decentralized, general-purpose computing mesh? Picos provide a model for exploration.
·windley.com·
Picos at the Edge
The Programming Language Mathematica Marks a Milestone
The Programming Language Mathematica Marks a Milestone
Stephen Wolfram, creator of a computational language, celebrates its 33 1/3rd anniversary, examining its place in tech’s history—and future.
·thenewstack.io·
The Programming Language Mathematica Marks a Milestone
Switching the Linux graphics stack from GLX to EGL
Switching the Linux graphics stack from GLX to EGL
Hi there! This is a guest post from Robert Mader, who contributed enormous improvements to Firefox’s graphics stack on Linux. TL;DR In the upcoming Firefox 94 release we will enable the EGL b…
·mozillagfx.wordpress.com·
Switching the Linux graphics stack from GLX to EGL
Cloud Application Hosting for Developers | Render
Cloud Application Hosting for Developers | Render
Render is a unified cloud to build and run all your apps and websites with free SSL, global CDN, private networks and auto deploys from Git.
·render.com·
Cloud Application Hosting for Developers | Render
Network Programming in Erlang
Network Programming in Erlang
Since I'm learning Erlang I thought my first non-trivial piece of code would be in an area where the language excels: network programming.
·20bits.com·
Network Programming in Erlang
Named pipes, ports and Erlang code in an Elixir project
Named pipes, ports and Erlang code in an Elixir project
I needed to read from a named pipe in an Elixir program, I made a mistake and I learned a few thing. Follow me. First create the named pipe: $ mkfifo “pipe” In Erlang you read from it l…
·ilconnettivo.wordpress.com·
Named pipes, ports and Erlang code in an Elixir project
The Accelerated Path To Petabyte-Scale Graph Databases
The Accelerated Path To Petabyte-Scale Graph Databases
Database acceleration using specialized co-processors is nothing new. Just to give a few examples, data warehouses running on the Netezza platform, owned
·nextplatform.com·
The Accelerated Path To Petabyte-Scale Graph Databases
UWP Is Dead, Long Live The App SDK
UWP Is Dead, Long Live The App SDK
Programming book reviews, programming tutorials,programming news, C#, Ruby, Python,C, C++, PHP, Visual Basic, Computer book reviews, computer history, programming history, joomla, theory, spreadsheets and more.
·i-programmer.info·
UWP Is Dead, Long Live The App SDK
DevSpace Designed to Lower the Kubernetes Learning Curve - The New Stack
DevSpace Designed to Lower the Kubernetes Learning Curve - The New Stack
Simply put, DevSpace makes developers more productive in the Kubernetes environment. It can be used as a Docker Compose alternative, but also much more. Open source DevSpace has drawn interest as a tool designed to make it easier for developers to create applications for Kubernetes without having to first learn the complexities associated with the […]
·thenewstack.io·
DevSpace Designed to Lower the Kubernetes Learning Curve - The New Stack
alt.VIS
alt.VIS
A half-day workshop at IEEE VIS 2021
·altvis.github.io·
alt.VIS
Cloud Native WebAssembly Applications Are Already Here - The New Stack
Cloud Native WebAssembly Applications Are Already Here - The New Stack
A wrapup of the best talks at KubeCon on WebAssembly. The takeaway message from the event is that cloud native WebAssembly applications are already being adopted by enterprises of all sizes, and along with the applications, we are also seeing a thriving ecosystem of frameworks, tools, and runtimes emerging.
·thenewstack.io·
Cloud Native WebAssembly Applications Are Already Here - The New Stack
High throughput Fizz Buzz
High throughput Fizz Buzz
Fizz Buzz is a common challenge given during interviews. The challenge goes something like this: Write a program that prints the numbers from 1 to n. If a number is divisible by 3, write Fizz inst...
·codegolf.stackexchange.com·
High throughput Fizz Buzz
Real-World HPC Gets the Benchmark It Deserves
Real-World HPC Gets the Benchmark It Deserves
While nothing can beat the notoriety of the long-standing LINPACK benchmark, the metric by which supercomputer performance is gauged, there is ample room
·nextplatform.com·
Real-World HPC Gets the Benchmark It Deserves
5 lessons I learned about chaos engineering for Kubernetes
5 lessons I learned about chaos engineering for Kubernetes
Kubernetes is a complex framework for a complex job. Managing several containers can be complicated, and managing hundreds and thousands of them is essentially just not humanly possible. Kubernetes makes highly available and highly scaled cloud applications a reality, and it usually does its job remarkably well. However, people don't tend to notice the days and months of success. Months and years of smooth operation aren't the things that result in phone calls at 2 AM. In IT, it's the failures that count. And unfortunately, failures don't run on a schedule.
·opensource.com·
5 lessons I learned about chaos engineering for Kubernetes
Chaos Engineering Made Simple - The New Stack
Chaos Engineering Made Simple - The New Stack
Cloud native chaos engineering ensures that every component responsible for an entire application’s proper functioning is resilient.
·thenewstack.io·
Chaos Engineering Made Simple - The New Stack