自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(284)
  • 资源 (9)
  • 收藏
  • 关注

原创 (一文了解)linux性能分析之CPU篇

目录前言一、CPU 性能指标1、CPU使用率2、负载均衡3、上下文切换4、CPU缓存命中率二、常用工具1、uptime2、vmstat3、mpstat4、top5、sar6、pidstat7、cat /proc/sotfirqs三、分析CPU性能瓶颈方法分析举例四、性能调优1,编译器选项2、进程绑定3,独占CPU组前言本文介绍linux性能优化CPU相关的知识点,首先介绍了CPU相...

2022-04-10 14:51:55 6340 5

原创 linux内核源码分析系列文章汇总

进程,驱动、中断、文件系统、优化、网络、内存专题

2022-04-09 11:53:45 5685 1

原创 linux内核源码之设备驱动系列文章汇总

1、linux 字符设备驱动实战2、linux LED设备驱动文件3、linux 设备树(.dts)实战解析4、linux 使用设备树点亮LED 实战5、linux 驱动中并发与竞争6、linux 内核定时器7、linux 内核中断理解8、linux驱动阻塞和非阻塞9、 linux 内核异步通知10、linux platform设备驱动11、Linux 内核自带的 LED 灯驱动12、linux MISC设备驱动13、linux input子系...

2022-04-09 11:39:31 2408

原创 视频编解码 — SVC可伸缩性

在一对多的情况下,根据每个客户端网络资源的不同,灵活调整发送码率

2022-12-01 09:28:20 244

原创 视频编解码 — 码控算法

当前帧的复杂度和目标帧大小,加上前面已经编码完成的帧的复杂度和编码使用的Qstep值。使用同一个QP值,画面复杂的时候,残差比较大,画面简单的时候,残差很小,一般用来衡量编码算法的性能,在实际工程中不会使用。能够表示I帧复杂度的值,方差越大,表示帧内变化程度越剧烈,用周围像素去预测当前编码块的像素,可能有较大的残差。: SAD值,使用当前帧的宏块,减去参考帧对应位置的宏块,并将所有宏块的SAD值加起来作为P帧的复杂度。,帧的实际剩余大小就是用帧的目标大小减去帧中已编码的GOM的实际大小。

2022-12-01 09:27:14 92

原创 视频编解码 — 卡顿与花屏

使用CBR的码控来编码可以使得一段时间内的编码输出码率尽量接近预估带宽,但有时候编码画面很大的帧或者需要编码IDR帧的时候,还是会使得变化后的一帧会比较大。3、如果接收端等待一个RTT时间后还没有收到对应的RTP包,再次将该序号加入到重传请求中,如果连续多次没收到,那就不再将该包加入到NACK报文中了。,从网络预估出来的带宽很小,但实际播放的画面复杂,且需要的编码码率又比较高,容易出现发送码率大于实际带宽的问题。之后再按照预估带宽大小,对应的发送速度,将缓冲区中的数据发送到网络中。如果重传没有收到包。

2022-11-30 19:35:39 410

原创 视频编解码 — 带宽预测

基于延时的带宽预测算法。维护一个状态机,状态机主要用来根据过载检测器得到网络状态和状态机目前所处的状态,来更新状态机的状态。为了避免网络抖动引起的噪声,需要通过当前延时和历史延时数据来判断延时的变化趋势,来平滑掉网络噪声引起的单个延时抖动。2、没有缓存或缓存很小:在发送数据过多的时候,会直接将超过带宽承受能力的数据丢掉,出现高丢包的现象。接收时长发送时长,网络承受不了当前数据量,产生了缓存,从而产生延时。

2022-11-30 10:00:12 218

原创 视频编解码 — RTP 与 RTCP

每一种报告的有效负荷都是不同的,通过这些报告在接收端和发送端传递当前统计的RTP包的传输情况。接收端要正确地使用这些音视频编码数据,不仅仅需要原始的数据码流,还需要一些额外的信息当前编码标准,H264 H65等。适合单个RTP包小于1500字节的时候,P帧和BZ帧编码比较小,还有SPS,PPS适合采用这种方式。其报文有多种,发送端报告(SR),接收端报告(RR),RTP反馈报告(RTPFB)等。RTP传输的协议UDP,不具有丢包重传和拥塞控制,需要另外实现,这就需要用到RTCP工具。按照什么速度播放视频?

2022-11-29 17:36:13 356

原创 视频编解码 — DCT变换和量化

变换之后将4个小块的DC系数拿出来,组成2x2的DC块,再对这个2x2的DC块进行hadamard变换。H264为了减少这种浮点运算带来的误差,将DCT变换成整数变化,DCT变换中的浮点运算和量化过程合并,这样就只有一次浮点运算过程。将图像块变换到频域后,AC系数比较多,一般幅值比较小,通过去除一些AC系数,达到压缩的目的。对于图像来说,空域是平时看到的图像,频率是图像做完DCT变换之后的数据。DCT变换是对残差块做的,通常情况下是在4X4的子块上进行变换的。,首先被划分成16个4x4的小块做整数变化。

2022-11-29 17:35:16 2318

原创 视频编解码 — 帧内预测

3,DC模式:当前编码亮度块的每一个像素值,是上边已经编码块的最下面那一行和左边已编码块右边最后一列的所有像素值的平均值。1、先对每一种预测的残差块的像素值求绝对值再求和,成为cost,然后取其中残差块绝对值之和最小的预测模式成为最优预测模式;2,Horizontal 模式:当前编码块的每一列的像素值,都是复制左边已经编码块最右边的行对应的值。1,Vertical模式:当前编码块的每一列的像素值,都是复制上边已经编码块最下面的行对应的值。帧内预测是利用已经编码的像素值来预测待编码的像素值,达到减少。

2022-11-23 15:52:58 145

原创 视频编解码 — 帧间预测

2、宏块大小16x16,先不划分宏块,直接使用16X16大小的块,在参考帧中进行运动搜索,得到运动矢量和预测块,通过MVP求得MVD,通过预测块得到残差块,并求得残差块的SATD值(残差块经过Hadamard变换之后求得绝对值再求和),估计MVD的编码后占用的字节数,将两个值加起来作为cost16x16。当前编码块的左边块,右边块,左上角块,右上角块的的运动矢量。搜索起始点作为六边形中心点,求得中心点左上角像素的预测块的SAD,之后对六边形角上的点做同样的操作求得SAD,得到最小的SAD,为最佳匹配点。

2022-11-23 15:52:39 186

原创 视频编解码 — H264结构

IDR帧是特殊的I帧。普通的I帧就是指当前帧只使用帧内预测编码,但是后面的P帧和B帧还是可以参考普通的I帧之前的帧。Slice header 中有 first_mb_in_slice字段,表示当前Slice的第一个宏块MB在当前编码图像中的序号。为了并行编码设计的,一帧图像可以划分几个Slice,之间相互独立,互不依赖,独立编码。GOP越大,编码的I帧就会越少,相对而言P帧,B帧压缩率就越高。00 00 00 修改为 00 00 03 00。IDR帧之后的帧不参考IDR帧之前的帧,避免错误帧传递。

2022-11-22 08:01:02 130

原创 音视频 — 视频编码原理

一部电影1080P,帧率25fps,时长2小时,文件大小 1920x1080x1.5x25x2x360 = 521.4G 数据量非常大,对存储和网络传输都有很大压力。因此视频压缩很有必要。

2022-11-22 07:23:07 88

原创 YUV与RGB 以及之间的转换

在视频技术中,通常碰到的两种颜色空间RGB和YUV。

2022-11-21 19:49:41 1089

原创 音视频 — 图像基础

用压缩工具压缩同一个原始视频时,码率越高,图像的失帧就会越小,视频画面就会越清晰。一般码率越高,视频清晰度越高,存储时占用的空间越大,传输时使用流量越多,需结合算法和压缩速度综合考虑。如RGB图像,分辨率是1278 x 720。为了能够快速读取一行像素,我们一般会对内存中的图像实现对齐,比如16字节对齐。存储每位像素需要的二进制位数,位深越大,能够表示的颜色值越多,色彩丰富真实。帧率越大,需要的流量越多,带宽要求越高,需要的设备性能越高。图像的大小或尺寸,用像素个数表示,原始图像分辨率越高,图像越清晰。

2022-11-21 16:14:19 251

原创 linux内核中watchdog、lockup、stall、hung等检测

系统(在一个或多个CPU核上)保持在长时间无反应状态。检测类型有watchdog、soft lockup、hard lockup、 hung task、workqueue stall 等。3、CONFIG_RCU_CPU_STALL_TIMEOUT 值的范围 (3~300)在此时间内一定能检测到。在内核模式下运行的CPU内核仍处于紧密循环状态,不允许其他硬件中断运行;1、硬锁定只能由NMI,在本机x86_64上检测到;内核处于紧密的循环中,长时间不让其他任务得到调度。检测系统的健康状态,有能力重启系统。

2022-11-04 07:42:10 460

原创 linux内核调试工具之kprobe(二)

前一章使用kprobe编程,需要编码手动编译。本章使用trace追踪技术,在任何函数上设置动态kprobe(通过kprobe事件)。

2022-10-27 09:14:53 373

原创 linux内核调试工具之kprobe

kprobe 可以在系统运行期间,自定义回调函数,动态插入探测点。2005年使用的典型CPU,kprobe命中需要0.5到1.0微秒来处理,返回探测命中的时间通常比kprobe命中的时间长50-75%在运行过程中想看某个函数的变量,需要重新编译内核。将内核输出都写到log.txt中(dmesg只能写部分),使用grep检索所需要查询的信息。测试程序打开/home/kprobe.c 测试在kprobe探测能否探测到。在输出信息中可以看到函数的地址、打开的文件名、函数执行的时间40ns等信息。

2022-10-24 22:26:18 1333

原创 内核追踪技术之 ftrace

N 表示设置了TIF_NEED_RESCHED和PREEMPT_NEED_RESCHED标志位,需要被调度。首先需要在include/trace/events/sched.h 的头文件中添加一个名为sched_stat_minvruntime的跟踪点。set_ftrace_filter和set_ftrace_notrace选项配对使用。前者设置要跟踪的函数,后者设置不要跟踪的函数。trace_sched_stat_runtime 是使用了sched_stat_runtime跟踪点,在命令行下也可以查询到。

2022-10-17 21:47:17 1514

原创 ss524v100 调试cvbs输出

启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。

2022-10-12 09:19:55 224 2

原创 linux内核中的睡眠函数*delay、*sleep

内核中的睡眠、延时函数。

2022-10-12 07:51:00 765

原创 Linux用户与内核空间交互—ioctl

用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习ioctlprocfssysfsdebugfsnetlinkioctl容易开发容易开发与使用相对容易学习与使用非常容易学习与使用困难,必须用户空间和内核空间同步编程相对困难,必须写用户空间程序适合场景仅仅内核,旧内核使用,避免驱动使用。

2022-10-10 19:52:16 522 1

原创 Linux用户与内核空间交互—netlink

用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习netlink。

2022-10-10 19:49:48 228 1

原创 Linux用户与内核空间交互—debugfs

用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习debugfs。

2022-10-07 16:04:18 665

原创 Linux用户与内核空间交互—sysfs

用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习sysfs。

2022-10-03 23:16:25 1098

原创 Linux用户与内核空间交互—procfs

用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习procfs。

2022-10-03 22:27:49 2019

原创 Linux内核中mutex,spinlock的使用

并发性的,在CPU1线程B获取锁B,同时想获取锁A,导致AB-BA死锁。锁的粒度:在大项目中,使用太少的锁是个问题。锁A发生在中断上下文中:如果中断发生,中断处理函数尝试获取锁A,导致死锁。因此,在中断上下文中获取的锁必须始终在禁用中断的情况下使用。mutex lock 是睡眠锁,在等待锁时将睡眠,再锁被释放后,内核唤醒等待的进程运行;此外,不可中断状态的睡眠更多一些,必须无限期阻塞等待,任务不能打断阻塞的等待。在人机交互应用程序中,一般的经验,通常应该将进程置于可中断的睡眠状态。

2022-09-29 16:23:48 962

原创 Linux内核变量中per-CPU的使用

lock-free技术:per-CPU与lock-free数据结构RCU。get_cpu_var()会引用preempt_disable(),禁止内核竞争。或者per_cpu(var,cpu) 如遍历每个CPU核的pcpa的变量。//源码文件arch/x86/kernel/process_64.c。put_cpu_var()会引用preempt_enable()两个线程使用共享变量,使用per-CPU,最后各自的输出是正确的。有两种申请方式:动态申请和静态申请。增加per-CPU的变量。

2022-09-27 10:50:36 910

原创 Linux内核中Lockdep死锁检测

死锁的检测以及使用锁存在的问题。通过两个实例分析循环锁和AB-BA锁异常的检测。

2022-09-27 10:35:07 941

原创 Linux内核中KCSAN 数据竞争检测

共享可写数据,并行执行时需要用锁来保护,或用lock-free。

2022-09-22 13:47:56 1004

原创 Linux内核中oops 错误解析以及问题定位

文档最后有完整的oops输出文件,此处将输出分成多个小块进行分析。

2022-09-21 10:20:46 1598

原创 Linux内核中使用内存检测

在内核中提供了内存检测的工具slub与kasan,在开发时可以将检测的功能打开。

2022-09-20 09:08:35 1195

原创 eBPF理解 (四)

bpftrace用在快速排除和定位系统上,简单的脚本开发并执行;BCC用在复杂的eBPF开发,使用最广泛;libbpf从内核中抽离出来的标准库,不在需要每台机器安装LLVM和内核头文件。

2022-08-27 12:31:07 436

原创 eBPF理解(三)

使用例子第一条如:用户态 setsockopt(sock,SOL_SOCKET,SO_ATTACH_BPF,...)绑定BPF到具体的socket上。在网络驱动程序刚收到数据包时触发,无需通过网络协议栈,可用来实现高性能网络处理方案,常用于DDos防御,防火墙,4层负载均衡等场景。类型:BPF_PROG_TYPE_SCHED_CLS 和 BPF_PROG_TYPE_SCHED_ACT。这些类型的BPF程序都可以通过BPF系统调用的BPF_PROG_ATTACH进行挂载。用于过滤,观测或重定向套接字网络包。

2022-08-20 17:50:57 2214

原创 eBPF理解(二)

eBPF运行时在内核中有五个模块组成。

2022-08-20 15:38:06 2092

原创 eBPF理解 (一)

eBPF 是从 BPF (Berkeley Packet Filter) 技术扩展而来的eBPF 系统启动后就一直运行在那里,它需要事件触发后才会执行。借助kprobe和uprobe,eBPF 程序几乎可以在内核和应用的任意位置进行插桩。eBPF 的诞生成为内核的一个顶级子系统最典型的就是 iovisor 带来的 BCC、bpftrace 等工具。图片来源BPF开发过程过程使用C语言开发eBPF程序借助LLVM把eBPF程序编译成BPF字节码通过bpf系统调用,把BPF字节码提交给内核。

2022-08-20 12:33:36 2867

原创 linux性能分析之内存篇

目录一、常用命令二、内存一般分析思路三、内存优化思路1、vmstat vmstat报告有关进程、内存、分页、块IO、陷阱、磁盘和cpu活动的信息。2、sar 这条命令非常强大,全面的分析系统性能 包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存的使用情况、进行活动以及IPC有关的活动等参数,3、pidstatThe pidstat command is used for monitoring individual tasks currently being mana

2022-08-08 21:27:02 1924

原创 内存中的swap机制

内存资源紧张时,linux会通过Swap,把不常用的匿名页换出到磁盘,访问时再从磁盘换入到内存;系统定期回收的阈值通过/proc/sys/vm/min_free_kbytes 调整;页回收的倾向通过 /proc/sys/vm/wappiness 调整;监控策略sar,/proc/zoneinfo查看。参考链接。......

2022-08-08 14:36:52 3344 2

原创 内存中的buffer与cache

目录buffer与cache1、free命令2、proc系统中参数说明试验一 文件与磁盘的写入1、文件写入2、磁盘写入试验二 :文件和磁盘的读1、文件读取2、读磁盘 总结从命令行中查看内存中的buffer与cache,并跟踪理解其含义free命令输出的结果有总内存,已用内存,空闲内存,缓存,可用内存。缓存是buffer与cache的总和。从字面意思上理解,buffer是缓冲区,cache是缓存,都是内存中的临时存储区,两者的区别是什么呢?在free的使用说明中有以下说明buffer 是内核缓冲区

2022-08-06 21:17:37 1086

原创 linux内存页回收

目录一、页回收概述二、物理页根据是否有存储设备支持分为两类2.1 回收策略2.2 回收原则2.3 回收的方法2.4 页的活动程度判断2.5 反向映射三、发起回收3.1 异步回收3.2 直接回收四、页交换1)磁盘作为交换分区2)文件作为交换分区 申请分配页的时候,页分配器首先尝试使用低水位线分配页。如果分配失败,说明内存轻微不足,页分配器将会唤醒内存节点的页回收内核线程,异步回收页,然后尝试使用最低水线分配页。如果使用最低水线分配失败,说明内存严重不足,页分配器将会直接回收页。1)交换支持的页(

2022-08-01 22:05:55 933

lora理论值计算,包括通信距离,待机时间等

lora理论值计算,包括通信距离,待机时间等

2021-12-08

lora_8.txt数据

源数据

2021-06-10

realtek.rar

realtek.rar

2021-06-08

openssl+libnl.rar

openssl+libnl.rar

2021-06-08

wpa_supplicant-2.7.tar.gz

wpa_supplicant-2.7.tar.gz

2021-06-08

iwlist_for_visteon-master.tar.bz2

iwlist_for_visteon-master.tar.bz2

2021-06-08

vixie-cron-4.1.rar

linux下 crond crontab 定时文件,源码

2021-03-03

mobilenet_ssd.zip

MobileNetSSD_deploy.prototxt,MobileNetSSD_deploy.caffemodel

2020-06-08

89C51单片机控制的1602液晶显示时间汇编程序

89C51单片机控制的1602液晶显示时间汇编程序

2014-04-13

空空如也

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

TA关注的人

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