代码编织梦想

New API是Linux内核接收网络中的数据包所调用的一个接口,能够有效减少Linux内核接收数据包时的损耗。

实现网络驱动最简单的办法是,每次收到一个包,就向内核提出一个中断请求。但是,当网络中包的数量非常多时,这种方式会给Linux内核带来极大的损耗,使得内核没有时间运行其他进程。

池化(Polling)可以解决上述问题。池化指的是Linux内核周期性地检查是否有需要处理的包,这种方式完全不需要Linux内核处理中断请求。但是,Linux内核检查包的周期太长或太短都不好。如果太长,那么缓存的包可能来不及处理就因为空间已满而被丢弃,造成丢包的问题。如果太短,则check的次数太多,很占用内核资源。

Linux内核采用了一种折中的机制:平时使用中断的方式接收包,当包的数量足够多,超过一个阈值时,转换到池化模式。

调用NAPI(New API)的网络驱动会这样工作:

  • 接收包时不允许中断;
  • 网络驱动向内核提供一个池化方法,内核调用之后可以获取所有待处理的包;
  • 当被允许时,内核调用该方法,尝试立即处理这些包。

NAPI有很多优点:

  • Linux内核去除了处理中断带来的负载;
  • 接收的数据包更加有序;
  • 当内核无法处理所有包时,丢弃的包在网络驱动内部直接被后来的包所覆盖,内核无需做任何事。在传统的处理方式下,内核需要一个个载入数据包并处理,可能导致内核中的虚拟内存被过度使用,导致颠簸 (Thrashing)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/sinat_35406909/article/details/113262561

shell:vmstat (虚拟内存统计)-爱代码爱编程

NAME        vmstat - Report virtual memory statistics Usage: vmstat [options] [delay [count]] DESCRIPTION        vmstat reports information about processes, memory, paging, blo

shell:free(显示内存状态)-爱代码爱编程

Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 Usage:  free [options] Options:  -b, --bytes         show output in bytes -k, --kilo          sho

Brew install Redis on Mac-爱代码爱编程

type below: brew update brew install redis To have launchd start redis now and restart at login: brew services start redis to stop it, just run: brew services stop redis

shell:lsof(list open files,列出所有打开的文件)-爱代码爱编程

目录 1、每一列的含义 2、查看某个文件的使用情况 3、查询8080端口的使用情况 4、恢复被删除的文件 5、查看某个路径下被打开的文件  6、查看root用户打开的文件 list open files,lsof列出活跃进程的所有打开文件,因为在linux中一切皆文件。 1、每一列的含义 COMMAND:进程的名称 PID:进程标识

Crontab实现从指定时间开始每隔多少秒(分钟/天)执行一次脚本的方法-爱代码爱编程

Crontab实现从指定时间开始每隔多少秒(分钟/天)执行一次脚本的方法 背景Crontab的格式Crontab的使用与局限性解决方法 背景 大家好,最近发生了很多事,已经很久没有在CSDN上推出新文章了。总之呢,我现在是一名大数据开发工程师,会从今天开始不定期地分享自己学到的新技术。如果你对大数据感兴趣的话,欢迎关注我。 最近接到了上级分配

shell脚本定时任务-爱代码爱编程

目录 一、准备工作: 1、shell代码: 2、crontab 2.1 安装crontab  2.2 开启crontab服务 二、添加定时任务 新增调度任务可用两种方法:  三、原理 一、准备工作: 1、shell代码: 1.1 使用vi编辑器 可以直接 # vim time.sh编写第一个shell文件 time.sh $ cat

【python】使用virtualenvwrapper工具管理虚拟环境-爱代码爱编程

环境 centOS7.3 过程 (1) 安装virtualenv sudo pip3 install virtualenv (2) 安装virtualenvwrapper sudo pip3 install virtualenvwrapper (3) 执行virtualenvwrapper.sh文件 cd /usr/local/b

linux内核链表(亲测可用)-爱代码爱编程

Linux内核链表 头文件: #ifndef _LIST_H #define _LIST_H //#include<stdio.h> //#include<stdlib.h> struct list_head { struct list_head *next, *prev; }; #define LIST_HEAD_INIT

解决apt-get update失败更新慢无法安装软件问题-爱代码爱编程

新装linux系统如果要装软件需要执行apt-get install命令,结果找不到软件包。首先需要先执行apt-get update命令,然后发现apt-get update命令也执行失败超时。 更新成国内源后速度快了,结果还是会卡在某个地方,一直执行不下去。真的是崩溃了。 按照下面两个步骤执行后,解决了安装软件问题。   解决国外源更新慢问题

VMvare虚拟机中安装ubuntu-16.04.6——十分详细-爱代码爱编程

VMvare虚拟机中安装ubuntu-16.04.6——十分详细 前言环境准备下载镜像创建新的虚拟机 ❤❤❤❤欢迎一键三连,关注点赞走一波(づ ̄ 3 ̄)づ❤❤❤❤❤ 前言 为什么要安装ubuntu16.04.6 版本,因为此版本比较稳定,如果有小伙伴想要搭建一个环境用来玩玩Linux,ubuntu是值得一选的。 VMware 安装ubunt

Centos安装g++错误 :No package g++ available-爱代码爱编程

在centos下安装g++,如果输入 yum install g++,那么将会提示:   [root@hugo hugo]# yum install g++  Loaded plugins: fastestmirror, refresh-packagekit, security  Loading mirror speeds from cached ho

RHEL-Linux命令行获得帮助-爱代码爱编程

RHEL-Linux命令行获得帮助 whatis--helpmantab whatis ##查看命令的基本用途 ##查看过程中出现 ##nothing appropriate 1.表示要查看内容没有帮助 2.系统帮助数据未更新用mandb命令更新 (注意:当执行whatis命令出现nothing appropriate时,大多数情况是因为