自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

转载 DPDK学习笔记(第二节,DPDK介绍)

原文链接:https://blog.csdn.net/qq_20817327/article/details/105587309DPDK是INTEL公司开发的一款高性能的网络驱动组件,旨在为数据面应用程序提供一个简单方便的,完整的,快速的数据包处理解决方案,主要技术有用户态、轮询取代中断、零拷贝、网卡RSS、访存DirectIO等。一、主要特点1、UIO(Linux Userspace I/O)提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间的,减下了报文在用户空间和应用空间的多次拷贝

2022-04-04 11:55:22 483 1

原创 DPDK学习笔记(第一节)

本小白学习DPDK笔记计划:1、b站视频入门2、CSDN等博客总结+DPDK官方文档3、结合源码梳理框图b站入门视频笔记1、DPDK主要应用UIO、HUGEPAGE和CPU Affinity机制3个技术点直接提高高度网络数据的修理性能2、内核接收数据包处理流程:从网卡收到报文后,通过DMA机制将报文放到内存 -->网卡触发中断通知系统有报文到达(一个报文,一个中断),系统分配sk_buff,将报文copy到这块sk_buff -->经过协议栈处理,将报文传送用户态应用程序处理。

2022-04-03 16:36:41 591

原创 操作系统实战 设计

操作系统实战 设计宏内核结构尽管图中一层一层的,这并不是它们有层次关系,仅仅表示它们链接在一起。为了理解宏内核的工作原理,我们来看一个例子,宏内核提供内存分配功能的服务过程,具体如下:应用程序调用内存分配的 API(应用程序接口)函数。处理器切换到特权模式,开始运行内核代码。内核里的内存管理代码按照特定的算法,分配一块内存。把分配的内存块的首地址,返回给内存分配的 API 函数。内存分配的 API 函数返回,处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使

2021-11-03 11:09:36 142

原创 操作系统实战 启动初始化

启动初始化记录初始化过程:1、PC 机 BIOS 固件是固化在 PC 机主板上的 ROM 芯片中的,掉电也能保存,PC 机上电后的第一条指令就是 BIOS 固件中的,它负责检测和初始化 CPU、内存及主板平台,然后加载引导设备(大概率是硬盘)中的第一个扇区数据,到 0x7c00 地址开始的内存空间,再接着跳转到 0x7c00 处执行指令,在我们这里的情况下就是 GRUB 引导程序。2、GRUB 在启动时会加载一个 grub.cfg 的文本文件,根据其中的内容执行相应的操作,其中一部分内容就是启动项。

2021-09-23 09:36:29 1009

原创 Linux性能优化实战02

Linux性能优化实战应该怎么理解“平均负载”?当系统变慢时,第一件事就是执行top或者uptime来了解系统负载情况。root@ubuntu:/home/ncnn-arm# uptime 18:41:32 up 4 min, 1 user, load average: 1.32, 1.66, 0.84 //18:41:32 当前时间 //up 4 min 系统运行时间 //1 user 当前用户数 //1.32 1分钟前的平均负载 //1.66 5分钟前的平均负载 //1.

2021-05-18 10:08:24 189

原创 Linux性能优化实战

Linux性能优化实战开篇词性能指标是什么?高并发、响应快——“吞吐”和“延时”这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。跟它们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。想要学习好性能分析和优化,建立整体系统性能的全局观是最核心的话题。因而,理解最基本的几个系统知识原理;掌握必要的性能工具;通过实际的场景演练,贯穿不同的组件。这三点,就是我们学习的重中之重。这个图是 Linux 性能分析最重要的参考资料之一,它告诉你,在 Linux

2021-05-18 09:33:27 168

原创 Linux设备驱动程序学习笔记——第十一章 内核的数据结构

Linux设备驱动程序学习笔记第十一章 内核的数据结构坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷,提高可移植性。内核使用的数据类型主要被分为三大类:类似int的标准C语言类型类似u32的有确定大小的类型类似pid_t这样用于特定内核对象的类型一、使用标准C语言类型要避免类型冲突和潜在的风险。标准C语言类型会随体系架构发生变化,所占空间大小并不相同,主要表现在long类型。内核的普通内存地址通常是unsigned lon

2021-05-17 09:12:37 169

原创 Linux设备驱动程序学习笔记——第十章 中断处理

Linux设备驱动程序学习笔记第十章 中断处理一、安装中断处理例程中断信号线是珍贵且有限的资源。内核维护了一个中断信号线的注册表,模块在使用中断前要现请求一个中断通道(或者中断请求IRQ),然后在使用后释放该通道。#include <linux/sched.h>int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)

2021-05-16 18:49:54 466

原创 深入理解Linux内核笔记——第三章进程

深入理解Linux内核笔记——第三章进程进程一、进程、轻量级进程和线程(1)进程描述符进程状态state可运行状态TASK_RUNNING可中断的等待状态TASK_INTERRUPTIBLE不可中断的等待状态TASK_UNINTERRUPTIBLE暂停状态TASK_STOPPED跟踪状态TASK_TUACED僵死状态EXIT_ZOMBIE僵死撤消状态EXIT_DEADset_task_state和set_current_state(2)标识一个进程进程和进程描述符有严格的一一对应

2021-05-13 15:03:23 275

原创 Linux设备驱动程序学习笔记——第九章 与硬件通信

Linux设备驱动程序学习笔记第九章 与硬件通信一、I/O端口和I/O内存每种外设都通过读写寄存器进行控制。(1)I/O寄存器和常规内存注意避免由于CPU或编译器不恰当的优化而改变预期的I/O动作。有硬件缓存引起的问题很好解决,只要把底层硬件配置成在访问I/O区域时禁止硬件缓存即可。由编译器优化或硬件重新排序引起的问题解决办法,对硬件必须以特定顺序执行的操作之间设置内存屏障(memory barrier)。Linux提供了4个宏:#include<linux/kernel.h>

2021-05-11 19:02:41 222

原创 Linux设备驱动程序学习笔记——第八章分配内存

Linux设备驱动程序学习笔记第八章分配内存一、kmalloc函数的内幕(1)flags参数//kmalloc原型#include<linux/slab.h>void *kmalloc(size_t size, int flags);//flags分配标志,最常用的是GFP_FERNEL分配标志:GFP_ATOMIC用于在中断处理例程或其他运行于进程上下文以外的代码中分配内存如tasklet以及内核定时器调用,不会休眠GFP_KERNEL内核内存的

2021-05-09 12:42:20 164

原创 Linux设备驱动程序学习笔记——第七章时间、延迟及延缓操作

Linux设备驱动程序学习笔记第七章时间、延迟及延缓操作一、度量时间差内核通过定时器中断来跟踪时间流时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个与体系结构相关的常数,定义在<linux/param.h>,默认50-1200每当时钟中断发生时,内核内部计时器的值就会+1。这个计数器是一个64位变量称为“jiffies_64”。驱动开发者通常访问jeffies变量,其unsigned long类型,要么与jiffies_64相同,要么为其低32位,其

2021-05-07 16:59:53 206

原创 Linux内核设计与实现笔记

第3章 进程管理进程进程描述符及任务结构分配进程描述符,通过slab分配器分配task_struct,达到对象复用和缓存着色的目的task_structthread_info每个任务的thread_info结构在他的内核栈的尾端分配,结构中task域中存放的是指向该任务task_struct的指针进程描述符的存放进程状态设置当前进程状态set_task_state(task, state)必要时,会设置内存屏障来强制其他处理器做重新排序进程上下文一般程序在用户空间进行,当一个程序执

2021-05-05 14:03:34 188

原创 Chapter 13 Memory Ordering

第十三章内存排序如果你的代码直接与硬件或在其他核心上执行的代码交互,或者直接加载或写入要执行的指令,或者修改页表,你需要注意内存排序问题。在所有这些情况下,内存排序问题都由相关代码为您处理.如果您正在编写操作系统内核或设备驱动程序,或者实现管理程序、JIT编译器或多线程库,那么您必须很好地理解ARM架构的内存排序规则。ARMv8架构使用了一个弱排序的内存模型。一般来说,这意味着内存访问的顺序不需要与加载和存储操作的程序顺序相同。对普通内存的读写可以由硬件重新排序,只受数据依赖关系和显式内存屏障指令的

2021-03-16 20:29:09 300 1

原创 Chapter 2 ARMv8-A Architecture and Processors

ARMv8-A架构和处理器变化:1、大的物理地址,使得处理器能够访问超过4GB的物理内存2、64位虚拟寻址,这使得虚拟内存超过了4GB的限制。这对于使用内存映射文件I/O或稀疏寻址的现代桌面和服务器软件来说很重要。3、自动事件信号,这使得高效节能、高性能的自旋锁成为可能。4、更大的注册文件,31位通用寄存器提高了性能并减少了堆栈的使用,如在函数调用过程中可以有更多的参数直接通过寄存器传递(原本分界线4个)。5、高效的64位即时生成,不太需要文字池。6、相对于pc的较大寻址范围,一个+/-4GB

2021-03-06 21:20:14 86

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除