自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 资源 (2)
  • 收藏
  • 关注

原创 浅析ARMv8体系结构:原子操作

在编程中,当多个处理器或线程访问共享数据,并且至少有一个正在写入时,操作必须是原子的,这意味着数据访问必须被视为相对于其他处理器的单个操作,以避免数据竞争条件。原子操作的实现依赖处理器硬件提供支持,在不同的处理器体系结构上,原子操作会有不同的实现,例如在x86体系结构下,通常使用锁缓存/总线的方式实现原子操作。一种是经典的独占内存访问机制,也叫做LL/SC(Load-Link/Store-Conditional),早期ARM体系结构下的原子操作都是基于这种方式实现;

2024-02-27 00:49:09 1638

原创 浅析Linux设备驱动:DMA内存映射

现代计算机系统中,CPU访问内存需要经过Cache,但外部设备通常不感知Cache的存在,因此CPU和外设在访问DMA内存时,必须谨慎处理内存数据的一致性问题。为了处理这种一致性问题,同时为了兼顾多种设备类型,Linux系统会采用不同的规则来映射DMA内存,开发者遵循这套规则对DMA内存进行操作。

2024-02-25 09:00:00 1477

原创 浅析DPDK内存管理:Mempool

DPDK提供了一套内存池管理机制,以提供高效分配固定大小对象的能力。

2024-02-24 13:31:26 1370

原创 浅析DPDK内存管理:综述

作为高性能的数据转发面套件库,DPDK为了最大化发挥系统效能,它基于系统大页内存构建了自己独有的内存管理机制,并提供了常用的内存管理设施,包括Mempool、堆内存分配以及DMA内存管理等功能。

2024-02-21 08:00:00 1030

原创 浅析SPDK技术:vhost

SPDK vhost 作为虚拟机存储的后端,以进程的形式在宿主机上运行,通过轮询的方式从共享的 Ring Buffer 中得到虚拟机中的 IO 请求,并进行处理,最后将处理完的数据同样通过 Ring Buffer 的方式通知虚拟机。整个过程不需要锁的保护,没有中断引入的开销,效率极高。添加SPDK bdev设备到创建的vhost-scsi控制器中。接下来,启动SPDK自带的vhost应用程序。首先,创建vhost-scsi控制器。创建SPDK bdev设备。

2024-02-19 08:00:00 1338

原创 浅析Linux设备驱动:IO端口和IO内存

在计算机系统中,外部设备通常会提供一组寄存器或内存用于处理器配置和访问设备功能。这些寄存器或内存可能位于IO空间,或者内存空间。当寄存器或内存位于IO空间时,称为IO端口;当寄存器或内存位于内存空间时,称为IO内存。

2024-02-18 22:13:34 1057

原创 浅析DPDK驱动管理:vhost

DPDK提供了一套vhost库,用于加速virtio后端,对比于内核态的vhost方案,由于DPDK vhost是在用户态空间实现,因而也称作vhost-user。

2024-02-17 21:00:00 1908

原创 浅析Linux追踪技术之ftrace:综述

Ftrace,全称Function Tracer,是一个内部跟踪器,旨在帮助系统的开发人员和设计人员了解内核内部的情况,可以用来调试或分析在系统中发生的延迟和性能问题。尽管ftrace通常被认为是函数跟踪器,但它实际上是由几个不同的跟踪实用程序组成的框架。

2024-02-16 20:30:00 2277

原创 浅析Linux内核线程监测机制:Hung Task

Hung Task机制周期性地监测系统中处于TASK_UNINTERRUPTIBLE状态(即D状态)的进程,如果超过120s(时间可配),进程状态还没有进行切换,khungtaskd就会打印提示信息。

2024-02-15 19:00:00 753

原创 浅析Linux追踪技术之ftrace:Tracepoint

Tracepoint(跟踪点)是添加到代码流程中的调用点,并且允许开发者注册自定义的回调函数执行。默认情况下,跟踪点是关闭的状态,不会对原代码逻辑造成影响;当跟踪点为开启状态时,每次运行到跟踪点,都会调用开发者注册的回调函数。),),block_rq_complete为跟踪点名称;TP_PROTO部分定义了跟踪点回调函数原型;TP_ARGS部分定义了回调函数的参数;TP_STRUCT__entry部分定义了跟踪程序可以使用的数据结构,

2024-02-14 19:00:00 2043

原创 浅析Linux追踪技术之ftrace:Event Tracing

Event Tracing(事件追踪)利用在内核代码中加入的各种Tracepoint(追踪点)实现对系统的追踪。Tracepoint可以在不创建自定义内核模块的情况下使用,以使用Event Tracing基础结构注册探测函数。

2024-02-13 19:00:00 2170

原创 浅析Linux内核模块自加载机制

模块自加载用于配置系统在启动时自动加载所需要的模块,这在添加新的设备和驱动很有用。方式1:基于systemd提供的modules-load服务,使用静态配置。方式2:基于udev的动态加载机制。

2024-02-07 19:51:44 1790

原创 浅析现代计算机启动流程

现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包括硬件状态检测、设备配置等,并最终引导到用户可操作的操作系统界面。现代计算机的启动流程总体上可以分成三个阶段:BIOS/UEFI启动阶段、引导加载程序以及启动操作系统。如下:BIOS/UEFI阶段:完成上电自检、基本硬件初始化,选择引导介质,并将控制权移交到引导介质上的加载程序;引导加载程序:负责完成操作系统的选取,并引导对应的操作系统;

2024-02-05 23:19:50 1441

原创 浅谈Linux追踪技术

随着计算机的发展,软硬件系统变得越来越复杂,于是衍生出了各类追踪技术和工具,用于验证和分析复杂系统内部运行的正确性,并为解决生产问题提供必要的帮助。从广义上来说,包括日志也是一种追踪技术,日志记录系统的运行信息,并且可以在系统出错时打印错误信息,但日志的功能通常限制于对系统的流程信息和错误进行打印,而无法记录系统更详细的运行信息。时至今日,Linux系统上已经产生了太多的工具,例如perf、ftrace、BFP等,如何在面临问题时,选择和搭配合适的工具反而成了难题。

2024-02-03 19:05:11 929

原创 浅析Linux进程管理:preempt_count抢占计数器

Linux系统在运行时,总会处于某一种特定的上下文中,例如进程上下文、中断上下文等,为了判断系统当前运行的上下文状态,内核提供了preempt_count变量来记录当前运行的上下文信息。

2024-01-14 08:00:00 839

原创 浅析Linux进程地址空间

现代处理器基本都支持虚拟内存管理,在开启虚存管理时,程序只能访问到虚拟地址,处理器的内存管理单元(MMU)会自动完成虚拟地址到物理地址的转换。基于虚拟内存机制,操作系统可以为每个运行中的进程创建独享的虚拟地址空间,在这个空间中执行的程序,无法感知系统中其它进程的存在,从而使得不同的进程在运行时可以互不干扰。

2024-01-13 19:37:53 850

原创 浅析Linux进程管理:current宏实现

Linux内核在运行时经常需要访问当前运行进程的task_struct指针,于是,系统提供了current宏来查找当前运行进程的task_struct指针。由于体系结构的不同,加上内核版本在不断演进,current宏的实现方式也发生了较大的变化。

2024-01-13 19:20:29 545

原创 浅析ARMv8体系结构:Memory Type

ARMv8内存模型将内存分成了Normal和Device两种类型,不同的内存类型支持的属性也存在差异,其中,Normal类型主要应用于常规的系统内存,支持读写等操作;而Device类型,顾名思义,主要针对于设备内存,在访问时会存在更多的限制。

2024-01-09 23:16:53 813

原创 浅析ARMv8体系结构:A64指令集

LDP和STP指令支持3种寻址模式。它以Xn/SP寄存器的值为基地址,然后读取Xn/SP寄存器的值+ imm地址的值到X/1寄存 器,读取Xw/SP寄存器的值+ imm+8地址的值到R2寄存器中。它以Xn/SP寄存器的值为基地址,然后把XZ1寄存器的内容存储到[Xrt/SP + imm]处,把 Xt2寄存器的内容存储到[Xn/SP+inmi+8]处。这条指令的意义是,将当前PC寄存器的地址的 + 0x80000的偏移,取出地址内容填充到x7寄存器中。汇编代码里常常会使用标签(label)来标记代码片段。

2024-01-09 22:45:14 1367

原创 浅析内存一致性:内存屏障

内存屏障,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以执行此点之后的操作。内存屏障的产生是为了解决程序在运行过程中所产生的内存乱序访问问题。

2024-01-09 22:41:46 992

原创 浅析Open vSwitch数据结构:哈希表hmap/smap/shash

在OVS软件中,hmap提供了基础的哈希表存储结构,smap和shash基于hmap进行实现,其中smap支持存储字符串,而sshash则支持存储任意类型的数据。

2023-09-11 22:37:32 718

原创 浅析ARMv8体系结构:异常处理机制

异常处理指的是处理器在运行过程中发生了外部事件,导致处理器需要中断当前执行流程转而去处理异常事件的一种机制。在Intel处理器的术语中,中断与异常被分开来描述,但在ARMv8体系结构中,异常和中断统一被称为异常处理。

2023-09-03 18:26:26 1658

原创 浅析Linux SCSI子系统:错误恢复

IO路径是一个漫长的过程,从SCSI命令请求下发到请求完成返回,中间的任何一个环节出现问题都会导致IO请求的失败。从SCSI子系统到低层驱动,再到实际的物理设备,每一层都应该在出现问题的时候,将错误的原因返回给上一层。SCSI子系统提供了错误恢复机制,对低层上报的错误IO执行可能的恢复策略,包括IO重试、复位设备,严重的还会对整个SCSI主机适配器进行复位等。

2023-09-02 22:14:23 880

原创 浅析Linux系统I/O模型

在操作系统中,I/O类操作是相对慢速的,应用发起一个I/O操作,需要等待I/O资源就绪后,才能继续后面的处理。这种简单的请求-响应的IO模型,很明显是无法满足实际生产环境对高并发、高吞吐的要求,因此,系统通常会提供多种I/O模型,以提高I/O操作的效率。阻塞式I/O;非阻塞式IO;I/O多路复用模型信号驱动式IO;异步IO。同步I/O操作会导致请求进程阻塞,直到I/O操作完成;异步I/O操作不会导致请求进程阻塞。

2023-09-02 20:42:33 214

原创 浅析Linux虚拟网络技术

在传统的网络环境中,一台物理主机包含一张或多张网卡,要实现与其它物理主机之间的通信,需要将自身的网卡通过路由器或者交换机连接到外部的物理网络中。随着虚拟化技术的发展,一台物理主机上会部署多个虚拟机或者容器应用,每个虚拟机都需要与物理机,以及主机或者跨主机上的其它虚拟机进行通信,为了实现与传统物理网络等同的虚拟网络结构,各类虚拟网络设备被加入,其中最为核心的两种网络设备就是NIC网卡与交换机设备。

2023-08-30 20:58:22 577

原创 浅析SAS协议:设备接入与探测

对于启动器直连的设备,在设备链路协商时,通过交换Identify序列,启动器已经获取了对端的设备类型、SAS地址以及协商速率等信息;而对于非直连的设备,这类设备都是连接在Expander下,设备信息由Expander进行维护,启动器需要使用SMP协议向Expander查询连接的设备信息。SAS设备初始化的最后一个步骤是获取连接的设备信息。在完成OOB交互和速率协商之后,SAS设备会发送一个称作IDENTIFY的地址帧来相互交换设备信息,IDENTIFY包含了设备的SAS地址、名称以及Phy编号等信息。

2023-08-28 20:59:12 685

原创 浅析SAS协议:传输层

SAS传输层定义了链路上传输帧的格式以及帧传输的方式。

2023-08-28 20:45:23 328

原创 浅析SAS协议:链路层

SAS链路层用于定义原语、地址帧以及连接相关的内容,提供认证序列、hardreset序列、连接管理以及SSP、STP和SMP帧传输等功能。

2023-08-28 20:39:22 996

原创 浅析Linux SCSI子系统:IO路径

SCSI子系统向上与块层对接,由块层提交的对块设备的IO请求,会由SCSI子系统转换成SCSI协议的标准命令,然后调用Scsi_Host结构的queuecommand回调下发到低层驱动执行;低层驱动会将SCSI命令和数据发送给真实的设备,并在请求完成后,调用scsi_cmd结构中的scsi_done回调,将请求响应信息返回给SCSI中层,SCSI中层完成请求响应的解析后,将结果返回给块层。

2023-08-27 18:49:12 557

原创 浅析Linux SCSI子系统:设备管理

Linux SCSI子系统通过SCSI主机适配器(HBA)接入所有SCSI存储设备,在Linux系统中,可以安装多种主机适配器,SCSI中层会提供主机适配器的统一抽象,这些主机适配器的厂商提供具体的低层驱动实现;主机适配器接入到SCSI子系统后,SCSI会通过扫描或者低层驱动主动上报的方式,接入主机适配器下挂的所有SCSI存储设备。

2023-08-27 14:14:13 1178

原创 浅析Linux追踪技术之kprobe:基于kprobes的Event Tracing

常规的Event Tracing(事件追踪)是通过散落在Linux内核代码各处的Tracepoint来实现的,这些Tracepoint数量有限,在出现问题时,往往不能覆盖到要追踪的函数;而利用kprobes机制,则可以实现对所有支持kprobes插入的代码点进行追踪。这种方式是 kprobe 和 ftrace 结合使用,通过 kprobe 来优化 ftrace 来跟踪函数的调用。

2023-08-23 22:23:33 884

原创 浅析Linux SCSI子系统:调试方法

scsi_logging_level被分成10个3位的字段,每个字段定义为一种日志类型,字段取值范围为0~7,表示了对应日志类型的打印等级。SCSI子系统注册的trace events有限,只能查看位于IO请求下发、返回的一些信息,对于日常问题定位可能帮助不大,但可以辅助用来分析SCSI的运行流程。这些trace events也可以在。SCSI子系统支持内核选项。

2023-08-20 08:41:05 748

原创 浅析DIX与DIF(T10 PI)

DIF(Data Integrity Field),也称T10 PI(T10 Protection Information),主要用来防止和检测静态数据破坏,包括数据通道上的硬件故障和软件bug导致的数据破坏,以及磁盘不可检测和纠正的数据错误等。DIF通过在主机适配器和存储设备之间增加额外的数据保护信息,确保传输过程中数据的完整性。

2023-08-19 23:14:52 2173

原创 iostat工具使用

iostat工具可用于CPU使用统计信息和设备的输入输出统计信息。iostat能支持显示的CPU使用统计信息比较简单,更广泛的用途是用于查看系统中磁盘的使用情况。

2023-07-29 20:52:08 614

原创 top工具使用

top命令是Linux下常用的性能分析工具,可用于实时查看系统运行状态以及各个进程的资源占用情况。通常在系统出现CPU负载异常或者内存占用过高时,可以通过top快速查找到消耗资源高的应用。top命令可以通过快捷键f进入字段显示配置页面自定义要查看的字段。

2023-07-26 07:42:19 595 1

原创 浅析Intel处理器体系结构:分段机制

分段机制的本质是把地址空间的内存组织成一些长度可变的内存块单元。在早期8086处理器时代,Intel为了实现寻址1MB地址空间的能力,提出了分段机制。在后续处理器演进中,为了保持向后兼容,Intel在32位保护模式中继续采用分段机制,但包括Linux在内的各种操作系统实现都只使用了平坦地址模型,并未真正使用到分段机制,至发展到64位架构时,处理器硬件也不再关心段基址信息,分段机制名存实亡。

2023-03-28 23:37:14 604 1

原创 浅析Intel处理器体系结构:CPU运行模式

由于历史原因,Intel处理器的开发和演进一直在保持着向后兼容,即使当下我们已经在使用x86_64的架构,但在PC开机上电时,处理器仍然需要先运行在16位的实地址模式下,然后切换到32位保护模式,最后才能切换到64位模式(IA-32e模式,也称作长模式)下运行。Intel 64位处理器架构下新增了一种新的操作模式,称作IA-32e模式,是64位处理器的主要运行模式。在计算机上电时,A20地址线默认是被禁用的,为了切换到32位寻址,必须要先开启A20地址线。

2023-03-23 21:24:37 1317

原创 Redox bootloader实现分析

Redox bootloader用于引导Redox OS启动,支持传统BIOS以及UEFI两种启动方式。用户可以通过编译选项进行配置,这里需要注意的是,只有x86架构可以选择以传统BIOS或UEFI的方式进行启动;对于Aarch64架构,则只支持UEFI的启动方式,因此在分析代码时,需要根据处理器体系架构进行区分。Redox bootloader的代码路径位于。在分析代码前,可以先梳理下对应的代码结构。

2023-03-22 23:12:32 505

原创 基于Multiboot制作最小OS内核

Multiboot规范里提供了一个例程,演示了如何编写支持Multiboot引导的操作系统。至此,一个支持multiboot引导的启动盘制作完成,后面可以使用虚拟机来加载启动盘运行。接下来,我们将这个内核烧录到启动盘并使用虚拟机运行。上面的命令创建了一个64MB大小的空白磁盘镜像文件。可以看到,系统为我们生成了一个新的loop设备。,并且还有一个分区设备。

2023-03-12 00:54:44 451

原创 探索Rust语言之实现单链表

Rust实现通用的单链表

2023-03-08 22:33:52 195

win7或win8下硬盘安装OS X Mountain Lion 10_8_3

次教程可用于在windows中安装苹果的山狮系统

2013-03-29

bootice.exe

用于修改主引导记录以及分区引导记录,同时支持对主引导记录内容查看的支持

2013-03-29

空空如也

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

TA关注的人

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