腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
linux驱动个人学习
专栏作者
举报
691
文章
1281080
阅读量
177
订阅数
订阅专栏
申请加入专栏
全部文章
编程算法
linux
其他
kernel
android
缓存
数据结构
内核
内存
c++
node.js
单片机
打包
arm
api
http
存储
进程
系统
java
硬件开发
数据
tcp/ip
host
程序
c 语言
腾讯云测试服务
proc
ide
usb
接口
数据库
容器
struct
函数
git
unix
网站
数据分析
core
driver
编译
指针
shell
二叉树
系统架构
device
sys
性能
c#
xml
汇编语言
文件存储
网络安全
bit
cpu
init
io
磁盘
内存管理
javascript
sql
命令行工具
面向对象编程
gcc
任务调度
clock
max
操作系统
队列
对象
管理
架构
配置
调试
线程
异常
主机
go
makefile
github
容器镜像服务
云函数
云推荐引擎
人工智能
electron
开源
flash
windows
https
nat
迁移
back
count
data
int
interface
monitor
panel
set
state
task
工具
工作
排序
前端
统计
文件系统
硬件
ios
python
bash
css
html
嵌入式
access
jar
搜索引擎
消息队列 CMQ 版
检测工具
serverless
爬虫
opencv
udp
kvm
大数据
安全
kafka
sdk
action
add
buffer
byte
class
config
controller
display
dto
fifo
gpio
input
iso
ld
limit
lock
malloc
overlay
pid
pixel
root
shared
spi
status
trace
video
变量
编码
定时器
服务
后端
基础
连接
设计
事件
数组
索引
同步
效率
协议
优化
字符串
负载均衡
官方文档
php
actionscript
.net
scala
jquery ui
jquery
ajax
android studio
listview
composer
memcached
vba
ubuntu
bash 指令
solaris
深度学习
批量计算
访问管理
NAT 网关
SSL 证书
文字识别
视频处理
图像处理
数据备份
vr 视频解决方案
数据安全
游戏
分布式
黑客
jvm
ssh
正则表达式
gui
asp
ftp
jenkins
iis
socket编程
ntp
小程序
机器人
物联网
虚拟化
小程序·云开发
amp
app
assert
bat
block
bluetooth
bootloader
button
channel
char
children
default
detect
dp
dpi
dt
dynamic
elf
equals
error
expression
file
filter
google
gpt
header
i2c
include
instance
jni
libc
load
loading
local
ls
map
matplotlib
message
migrate
mips
mmap
module
mutex
output
parent
path
point
port
provider
qemu
report
route
samsung
save
screen
selection
self
semaphore
stack
static
stderr
summary
super
swap
target
text
transfer
translation
transparent
trim
txt
widget
width
x86
备份
编程
编译器
测试
程序设计
多线程
二进制
翻译
高性能
加密解密
监控
蓝牙
链表
命令行
内存泄漏
日志
软件
软件架构
软件开发
实践
手机
树莓派
算法
芯片
虚拟机
压缩
异常处理
语法
源码
原型
状态机
嵌入式系统
搜索文章
搜索
搜索
关闭
ARMv8 寄存器
指针
内核
配置
系统
异常
本文主要介绍 Armv8/v9 指令集架构中常用部分,详细的还是要看 Arm architecture reference manual.
233333
2024-03-17
45
0
【ARMv8】异常级别的定义EL0、EL1、EL2、EL3
架构
异常
异常处理
安全
操作系统
Exception levels ARMv8-A系列定义了一系列的异常等级,从EL0到EL3,下面具体说明其含义:
233333
2024-03-15
84
0
Cache和DMA一致性
硬件
变量
程序
内存
数据
DMA应该多多少少知道点吧。DMA(Direct Memory Access)是指在外接可以不用CPU干预,直接把数据传输到内存的技术。这个过程中可以把CPU解放出来,可以很好的提升系统性能。那么DMA和Cache有什么关系呢?这也需要我们关注?
233333
2024-03-13
76
0
BPF BTF 详解
字符串
数据结构
编码
程序
内核
BTF(BPF Type Format)是内嵌在BPF(Berkeley Packet Filter)程序中的数据结构描述信息。BPF原本是用于数据包过滤的编程语言,但随着eBPF(extended BPF)的发展,它的用途已经扩展到多种内核子系统中,包括性能监测、网络安全和配置管理等。 BTF是为了实现更复杂的eBPF程序而设计的。其提供了一种机制,通过它可以将编程时使用的数据结构(如C语言中的结构体、联合体、枚举等)的信息嵌入到eBPF程序中。这样做的主要目的是为了让eBPF程序在运行时能够具有类型安全(Type Safety),同时也便于内核和用户空间的程序理解和操作这些数据结构。 在eBPF程序开发过程中,用户通常会在用户空间编写C代码,然后使用特定的编译器(如clang)编译这些代码为eBPF字节码。由于C程序中定义的复杂数据结构信息在编译为eBPF字节码过程中会丢失,因此BTF被设计来保留这些信息。当eBPF程序加载到内核时,BTF信息可以被内核使用,以确保程序操作的数据结构与内核预期的一致,从而保证程序的正确运行。 举个例子,如果eBPF程序需要访问内核数据结构,BTF就能够提供这些内核数据结构的确切布局,让eBPF程序能够安全而准确地读取或修改这些数据。 总之,BTF使得eBPF程序能更安全且方便地与复杂的数据类型互动,并有助于提高eBPF程序与内核间的兼容性和稳定性。
233333
2024-03-08
52
0
使用BPF之前和之后生成直方图过程的对比
程序
磁盘
内核
事件
数据
1、在内核中:开启磁盘IO事件的插桩观测。 2、在内核中,针对每个事件:向perf缓冲区写入一条记录。如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘IO的几个元数据字段。 3、在用户空间:周期性地将所有事件的缓冲区内容复制到用户空间4。在用户空间:遍历每个事件,解析字节字段的事件元数据字段。其他字段会被忽略。 5。在用户空间:生成字节字段的直方图摘要。
233333
2024-03-08
69
0
内核页表调试
调试
shared
翻译
内存
内核
首先配置内核,使其支持导出内核页表到debugfs下面: Kernel hacking ---> ---> [*] Export kernel pagetable layout to userspace via debugfs 配置完后,重新编译内核,并用新内核启动,就会在/sys/kernel/debug下看到kernel_page_tables文件:
233333
2024-03-04
106
0
ptmalloc、tcmalloc与jemalloc对比分析
内存
内存管理
线程
多线程
管理
在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用自旋锁,在锁冲突严重的时候导致CPU飙升。为了弄清楚tcmalloc到底做了什么,仔细了解各种内存管理库迫在眉睫。
233333
2024-02-23
173
0
一篇文章彻底讲懂malloc的实现(ptmalloc)
链表
内存
线程
指针
malloc
C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用 malloc() 和 free() 函数显式的分配和释放内存. 关于 malloc() 和free() 函数, C语言标准只是规定了它们需要实现的功能, 而没有对实现方式有什么限制, 这多少让那些追根究底的人感到有些许迷茫, 比如对于 free() 函数, 它规定一旦一个内存区域被释放掉, 那么就不应该再对其进行任何引用, 任何对释放区域的引用都会导致不可预知的后果 (unperdictable effects). 那么, 到底是什么样的不可预知后果呢? 这完全取决于内存分配器(memory allocator)使用的算法. 这篇文章试图对 Linux glibc 提供的 allocator 的工作方式进行一些描述, 并希望可以解答上述类似的问题. 虽然这里的描述局限于特定的平台, 但一般的事实是, 相同功能的软件基本上都会采用相似的技术. 这里所描述的原理也许在别的环境下会仍然有效. 另外还要强调的一点是, 本文只是侧重于一般原理的描述, 而不会过分纠缠于细节, 如果需要特定的细节知识, 请参考特定 allocator 的源代码. 最后, 本文描述的硬件平台是 Intel 80x86, 其中涉及的有些原理和数据可能是平台相关的.
233333
2024-02-23
152
0
bpftool使用方法简介
程序
内核
数据
树莓派
系统
看起来,在不同的linux发行版里,bpftool在不同的软件包里,ubuntu 22上,bpftool是linux-tools-generic的一部分,而树莓派里bpftool是一个单独的软件包。
233333
2024-01-02
281
0
aarch64 和 ARMV8 的区别
操作系统
架构
设计
效率
性能
aarch64 和 ARMv8 是紧密相关但涵义不同的术语,在解释他们的区别之前,让我们先简单理解它们各自的含义: ARMv8: ARMv8 是指 ARM 架构的第八个版本,这是由 ARM Holdings 设计的一种处理器架构(也称为 ARMv8-A)。这个版本首次引入了对 64 位处理器的支持,它被设计来提供增强的性能,更好的电能效率,以及对现代计算需求的支持,比如高级多媒体和安全性能等。ARMv8 架构同时支持 64 位(AArch64)和 32 位(AArch32)指令集。 AArch64: AArch64 是 ARMv8 架构中用来描述 64 位的处理器状态和对应的指令集的术语。当处理器运行在这个状态下时,它可以执行 64 位的指令集并访问 64 位的寄存器。AArch64通常被用来指代64位的ARM处理器和操作系统。 总而言之,ARMv8 指的是处理器架构的一个版本,这个版本包括了 64 位处理能力。而 aarch64 指的是 ARMv8 架构中的 64 位指令集。也就是说,aarch64 是 ARMv8 的一部分。所有运行在 aarch64 模式下的ARM处理器都基于 ARMv8 架构,但 ARMv8 架构也包括对之前架构如 ARMv7 的兼容支持(例如,在 32 位模式下运行)。
233333
2023-12-12
282
0
进程优先级详解
max
static
函数
进程
内核
Linux 中采用了两种不同的优先级范围,一种是 nice 值,一种是实时优先级。在上一篇粗略的说了一下 nice 值和实时优先级,仍有不少疑问,本文来详细说明一下进程优先级。linux 内核版本为 linux 2.6.34 。
233333
2023-12-03
178
0
eBPF 概述:第 4 部分:在嵌入式系统运行
嵌入式
编译
程序
内核
嵌入式系统
在本系列的第 1 部分和第 2 部分,我们介绍了 eBPF 虚拟机内部工作原理,在第 3 部分我们研究了基于底层虚拟机机制之上开发和使用 eBPF 程序的主流方式。
233333
2023-11-30
217
0
eBPF 概述:第 3 部分:软件开发生态
程序
后端
内核
前端
软件开发
在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究。阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别的工具。为了理解这些工具是如何工作的,我们先定义一下 eBPF 程序的高层次组件:
233333
2023-11-27
187
0
linux中透明巨页与巨页的区别
linux
内存
内存管理
配置
性能
在Linux中,透明巨页(Transparent HugePage)和巨页(HugePage)是两种不同的内存管理技术。 透明巨页是Linux内核中的一项特性,旨在提高内存的利用率和性能。它通过将内存分配为更大的巨页(通常为2MB或1GB),减少了对内存页表的访问次数,从而提高了内存访问的效率。透明巨页是透明的,应用程序无需进行任何修改即可受益于这种内存管理技术。 而巨页是指一种更大尺寸的内存页,在Linux中可以使用不同的页面大小,常见的巨页大小是2MB或1GB。巨页可以提供更高的内存访问性能,因为它减少了页表的数量,降低了TLB(Translation Lookaside Buffer)缓存的压力,从而减少了内存访问的开销。巨页需要应用程序进行适当的修改和配置才能使用。 因此,透明巨页和巨页都是通过增加内存页的尺寸来提高内存访问性能,但透明巨页不需要应用程序的修改,而巨页需要应用程序的支持和配置。
233333
2023-11-24
188
0
eBPF 概述:第 2 部分:机器和字节码
存储
程序
内核
协议
指针
我们在第 1 篇文章中介绍了 eBPF 虚拟机,包括其有意的设计限制以及如何从用户空间进程中进行交互。如果你还没有读过这篇文章,建议你在继续之前读一下,因为没有适当的介绍,直接开始接触机器和字节码的细节是比较困难的。如果有疑问,请看第 1 部分开头的流程图。
233333
2023-11-24
143
0
/proc/sys/vm 使用
proc
sys
内存
内核
系统
这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM)。 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到。 目前,/proc/sys/vm目录下有下面这些节点:
233333
2023-11-14
262
0
linux内核 快速分片,技术|Linux slabtop命令——显示内核片缓存信息
linux
缓存
对象
内核
排序
Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存。现代Linux内核部署了该缓存分配器以持有缓存,称之为片。不同类型的片缓存由片分配器维护。本文集中讨论slabtop命令,该命令显示了实时内核片缓存信息。
233333
2023-11-11
274
0
/proc/pids/maps
proc
进程
内存
内存泄漏
系统
本实例中的用户空间地址从 0x00000000 到 0x80000000,从地址空间划分可知,从低到高依次是:
233333
2023-11-10
95
0
/proc/pids/status
proc
status
进程
内存
数据
/proc/279/status是一个Linux内核中的文件,其中包含了当前进程的状态信息。每行的含义如下:
233333
2023-11-10
118
0
/proc/pagetypeinfo
block
count
migrate
proc
内存
这个文件是将buddyinfo的内容进一步细分: Free pages count per migrate type at order -- 不同order 按照migrate type的空闲page数量 Number of blocks -- 连续内存块数量
233333
2023-11-10
147
0
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
点击查看
热点技术征文第五期
新风口Sora来袭,普通人该如何把握机会?
立即参加
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档