Linux Kernel

Ubuntu MATE 20.04 LTS:士别三日,当刮目相待 | Linux 中国

北慕城南 提交于 2020-08-11 10:57:17
Ubuntu MATE 20.04 LTS 无疑是最流行的 Ubuntu 官方特色版本之一。 来源: https:// linux.cn/article-12341- 1.html 作者:Ankush Das 译者:郑 (本文字数:3080,阅读时长大约:4 分钟) Ubuntu MATE 20.04 LTS 无疑是最流行的 Ubuntu 官方特色版本 之一。 不仅仅是我,这份 Ubuntu 20.04 调查报告 也持同样观点。不过不管流行与否,它都是一个令人印象深刻的 Linux 发行版,尤其是用在较旧的硬件上时。事实上,它也是可用的 最轻量的 Linux 发行版 之一。 所以,我想在一个虚拟机中尝试一下,为你提供一个概览,这样你可以了解其中有何值得期盼的变化,以及是否值得尝试。 在 Ubuntu MATE 20.04 LTS 中有什么新功能? 知乎视频 ​ www.zhihu.com Ubuntu MATE 20.04 LTS 的主要亮点应该是增加了 MATE Desktop 1.24。 你可以期待 MATE Desktop 1.24 中的所有新特色都被打包到 Ubuntu MATE 20.04 中。除此之外,还有很多重要的变化、改进和增补。 这是 Ubuntu MATE 20.04 中变化的概述: 新增 MATE Desktop 1.24 大量视觉改进 数十处错误修复 基于

Linux 操作系统原理 — 内存 — 大页内存

*爱你&永不变心* 提交于 2020-08-11 09:26:56
目录 文章目录 目录 前文列表 大页内存 Linux 的大页内存 大页的实现原理 大页内存配置 透明巨型页 THP 大页面对内存的影响 大页内存的性能问题 前文列表 大页内存 在页式虚拟存储器中,会在虚拟存储空间和物理主存空间都分割为一个个固定大小的页,为线程分配内存是也是以页为单位。比如:页的大小为 4K,那么 4GB 存储空间就需要 4GB/4KB=1M 条记录,即有 100 多万个 4KB 的页。我们可以相待,如果页太小了,那么就会产生大量的页表条目,降低了查询速度的同时还浪费了存放页面的主存空间;但如果页太大了,又会容易造成浪费,原因就跟段式存储管理方式一般。所以 Linux 操作系统默认的页大小就是 4KB,可以通过指令查看: $ getconf PAGE_SIZE 4096 但在某些对性能要求非常苛刻的场景中,页面会被设置得非常的大,比如:1GB、甚至几十 GB,这些页被称之为 “大页”(Huge Page)。大页能够提升性能的主要原因有以下几点: 减少页表条目,加快检索速度。 提升 TLB 快表的命中率,TLB 一般拥有 16 ~ 128 个条目之间,也就是说当大页为 1GB 的时候,TLB 能够对应 16GB ~ 128GB 之间的存储空间。 值得注意的是,首先使用大页的同时一般会禁止主存-辅存页面交换(Swap),原因跟段式存储管理方式一样

Linux 操作系统原理 — 内存 — KSM 内存页共享的性能问题

南笙酒味 提交于 2020-08-11 07:41:12
目录 文章目录 目录 KSM 内存页共享的性能问题 KSM 内存页共享的性能问题 KSM(Kernel Shared Memory)是 Linux Kernel 的一种内存共享机制,在 2.6.36 版本引入。简而言之,KSM 用于合并具有相同内容的物理主存页面以减少页面冗余。在 Kernel 中有一个 KSM 守护进程 ksmd,它会定期扫描用户向它注册的内存区域,寻找到相同的页面就会将其合并,并用一个添加了写保护的页面来代替。当有进程尝试写入该页面时,Kernel 会自动为其分配一个新的页面,然后将新数据写入到这个新页面,这就是典型的 COW 机制。类似的,存储技术中有一个称为去耦合(de-duplication)的技术,通过删除冗余数据(基于数据块,或者基于更大的数据片段,比如文件)来减少已存储的数据。公共数据片段被合并(以一种 COW 方式),释放空间供其他用途。使用这种方法,存储成本更低,最终需要的存储器也更少。 KSM 最初被应用到 KVM 上,因为事实证明,如果虚拟化了许多相同的操作系统和应用程序组,那么宿主机上许多内存页面都是相同的。假如操作系统和应用程序代码以及常量数据在 VMs 之间相同,那么这个特点就很有用。当页面惟一时,它们可以被合并,从而释放内存,供其他应用程序使用。将多个 VMs 具有的相同内存页合并(共享),可以腾出更多的可用物理内存。 但是事实上

Ubuntu MATE 20.04 LTS:士别三日,当刮目相待

≯℡__Kan透↙ 提交于 2020-08-08 09:57:42
Ubuntu MATE 20.04 LTS 无疑是最流行的 Ubuntu 官方特色版本 之一。 不仅仅是我,这份 Ubuntu 20.04 调查报告 也持同样观点。不过不管流行与否,它都是一个令人印象深刻的 Linux 发行版,尤其是用在较旧的硬件上时。事实上,它也是可用的 最轻量的 Linux 发行版 之一。 所以,我想在一个虚拟机中尝试一下,为你提供一个概览,这样你可以了解其中有何值得期盼的变化,以及是否值得尝试。 在 Ubuntu MATE 20.04 LTS 中有什么新功能? Ubuntu MATE 20.04 LTS 的主要亮点应该是增加了 MATE Desktop 1.24。 你可以期待 MATE Desktop 1.24 中的所有新特色都被打包到 Ubuntu MATE 20.04 中。除此之外,还有很多重要的变化、改进和增补。 这是 Ubuntu MATE 20.04 中变化的概述: 新增 MATE Desktop 1.24 大量视觉改进 数十处错误修复 基于 Linux 内核 5.4 系列 添加了实验性的 ZFS 支持 添加了来自 Feral Interactive 的 GameMode 一些软件包更新 现在,为了更好地了解 Ubuntu MATE 20.04,我将给你提供更多的细节。 用户体验改善 考虑到越来越多的用户倾向于在桌面上使用 Linux

Linux网络数据转发平面的变迁-从内核协议栈到DPDK/XDP

…衆ロ難τιáo~ 提交于 2020-08-07 19:40:07
昨晚读了一篇Paper: https://penberg.org/parakernel-hotos19.pdf 大意是说,随着IO设备的进化,它们的存取/传输速率已经超过了CPU到内存的存储/传输速率,再也不再是慢速 外设 了,所以,对这些快速设备的管理和操作要发生改变才能适应,从这个意义上讲,几乎一成不变的Linux kernel在很多方面确实阻滞了性能的优化。 这可能是现如今人们纷纷转向DPDK/netmap或者XDP的本质原因了。怎么说呢?周末回上海前,发一篇感想。 在人们的印象中,一台标准的计算机包含三大件: CPU,即中央处理器。 内存,悬挂在类似叫做北桥的芯片上。 外设,慢速IO设备,悬挂在类似叫做南桥的芯片上。 这也是我们在《计算机组成原理》这门课中学到的。其实这就是现实中的计算机,就这样子,如果按照抽象的冯诺伊曼计算机来看,计算机是不包含外设的,它只有CPU和内存,强调存储和执行,是为 存储执行计算机。 有了现实中的计算机组成后,下一步就是设计操作系统来管理这些东西,事实上,几乎任何操作系统都可以按照这堆东西划分为不同的模块: 进程管理,管理CPU分时和调度。 内存管理,管理内存分配。 文件系统,管理文件组织。 网络协议栈,管理网络IO。 磁盘驱动,… … 其实一开始从名字上将除CPU,内存之外的物件叫做 外设 (某种意义上磁盘也是),并且将其连接到相对慢速的桥片上

【Linux 内核分析与应用】学习记录1-内核模块的插入和删除

蓝咒 提交于 2020-08-06 21:07:53
首先编写一个简单的内核模块代码 helloworld.c # include <linux/init.h> # include <linux/kernel.h> # include <linux/module.h> static int __init lkm_init(void) { printk("Hello world\n"); return 0; } static void __exit lkm_exit(void) { printk("Goodbye\n"); } module_init(lkm_init); module_exit(lkm_exit); MODULE_LICENSE("GPL"); 然后编写Makefile文件,注意tab键 obj-m:=helloworld.o CURRENT_PATH:=$(shell pwd) LINUX_KERNEL:=$(shell uname -r) LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL) all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean 这样就可以开始编译了

[转]做为一个初学者,对linux一无所知,到底有没有一个公式化的方法可以一步一步进入高手的行列呢?

本小妞迷上赌 提交于 2020-08-06 18:57:02
做为一个过来人,我谈谈我自己的看法,欢迎大家补充: 首先肯定的一点是:不要一上来就看内核代码,基本上你会很快被挫败感打败。内核正在变得越来越庞大,学习曲线越来越陡峭,当你一无所知的时候冒然进入linux kernel,你会发现处处都是障碍,处处都是大坑,你根本走不下去。最好的方法是把对内核源代码的热情先放在心里,从基本功开始。 我认为的基本功包括两个方面: 1、linux的基本操作。内核中的很多设计都是源于应用,你不理解用户空间的操作,也就不会知道内核空间在干什么。这时候,你需要做的就是在自己的计算机上安装一个GNU/linux操作系统,Debian、Ubuntu什么的都OK,最好去掉其他的OS,这可以强迫你在linux下进行学习,工作,生活。在这个过程中,你可能需要google检索一些信息,安装一些软件,学习使用这些软件,理解一些基本的linux的背景知识......如果你想要从事底层的软件开发,那么尽量在终端下工作,这样会让你和linux kernel更接近一些,从而提供更多关于内核的基础知识。 2、第二个方面是软件相关的基础知识。你最好学习一些软件的逻辑思维,学习掌握一门语言,当然最好是c语言。掌握其基本的语法和语义,然后在linux环境下进行实际训练。这里不得不隆重推出一本经典之作《Unix高级环境编程》,仔细阅读这本书,然后动手实践,编写linux下的小程序

Linux cma内存的使用

…衆ロ難τιáo~ 提交于 2020-07-26 23:33:00
CMA的全称叫做contiguous memory allocator,它是为了便于进行连续物理内存申请的一块区域,一般我们把这块区域定义为reserved-memory。 早期的Linux内核中没有cma的实现,如果驱动想要申请一个大块的物理连续内存,那么只能通过预留专属内存的形式,然后在驱动中使用ioremap来映射后作为私有内存使用。这样带来的后果就是有一部分内存将被预留出来不能作为系统中的通用内存来使用,比如camera、audio设备,它们在工作时是需要大块连续内存进行DMA操作的,而当这些设备不工作时,预留的内存也无法被其他模块所使用。 如何使得操作系统能够充分的利用物理内存呢?比如当一些设备需要使用大块连续物理内存时,可以比较容易的申请到,而当这些设备不工作时,这些内存又可以当做普通的内存那样被系统其他模块申请使用。引入CMA就是为了解决这个问题的,定义为cma区域的内存,也是由操作系统来管理的,当一个驱动模块想要申请大块连续内存时,通过内存管理子系统把CMA区域的内存进行迁移,空出连续内存给驱动使用;而当驱动模块释放这块连续内存后,它又被归还给操作系统管理,可以给其他申请者分配使用。 我前面的文章有介绍过《对于MIGRATE_MOVABLE的理解》,其中有讲到,buddy system在对内存进行管理时,不同size的内存块是分类管理的,其中有一类就是

linux下TCP/IP及内核参数优化调优(TIME_WAIT)

倖福魔咒の 提交于 2020-07-26 19:43:22
以下未经验证,需根据实际场景测试验证!!! linux系统下内核参数优化,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等。 根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。 状态描述: CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK

【DPDK】谈谈DPDK如何实现bypass内核的原理 其一 PCI设备与UIO驱动

旧巷老猫 提交于 2020-05-09 10:45:41
【前言】   随着网络的高速发展,对网络的性能要求也越来越高,DPDK框架是目前的一种加速网络IO的解决方案之一,也是最为流行的一套方案。DPDK通过bypass内核协议栈与内核驱动,将驱动的工作从内核态移至用户态,并利用polling mode的线程工作模式加速网络I/O使得网络IO性能出现大幅度的增长。   在使用DPDK的时候,我们常常会说提到用DPDK来接管网卡以达到bypass内核驱动以及内核协议栈的操作,本篇文章将主要分析DPDK是如何实现的bypass内核驱动来实现所谓的“接管网卡”的功能。 注意: 本篇文章会涉及一些pci设备的内容,但是不会重点讲解pci设备,pci设备中的某些规则就是这么设计的,并没有具体原因。 本篇部分原理的讲解会以Q&A的方式拖出,因为DPDK bypass内核的这部分涉及的知识维度比较多,没有办法按照线性的思路讲解。 本人能力以及 水平有限,没办法保证没有疏漏 ,如有疏漏还请各路神仙进行指正,本篇内容都是本人个人理解,也就是 原创内容 。 由于内容过多,本篇文章会着重基础的将PCI以及igb_uio相关的知识与分析,以便于不光是从DPDK本身,而是全面的了解DPDK如果做到的bypass内核驱动,另外关于DPDK的代码部分实现将会放在后续文章中放出,另外还有DPDK的中断模式以及vfio也会在后续的文章中依次发出(先开个坑,立个flag)