- 博客(30)
- 资源 (7)
- 收藏
- 关注
原创 性能观测系列 方法概述
用户随机选择或者从网上查到的观测工具去分析性能,可能命中问题,也可能忽视很多问题,但是同时当工程师熟悉的工具和问题相关性不大时,会进展缓慢,浪费很多时间。首先介绍三个anti-methodologies,翻译成反方法,不能叫做方法,但是人们通常下意识的使用的非常规方法,街灯法、鸵鸟法、甩锅法;延时分析检查完成一次操作所用的时间,然后将时间分成小的时间段,接着对有着最大延时的时间段做再次划分,最后定位并量化问题的根本原因;列出可用的性能工具,明确每个工具提供的有用的指标,对每个指标,阐释指标可能的规则;
2022-12-12 21:17:22
266
1
原创 linux的I2C总线框架
IIC的全称是Inter-Integrated Circuit,由Philips公司推出,是近年来在微电子通信控制制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,仅需两根线(SLC、SDA)即可完成信息传输,并且通信速率较高。在主从通信中,可以有多个IIC设备同时接到IIC总线上,通过地址来识别通信对象。Linux的IIC体系结构分为3个组成部分,分别是IIC核心、IIC总线驱动和IIC设备驱动!
2022-11-23 20:18:36
1077
原创 PCIe 总线基础 驱动接口 和 BAR空间详解
在一个系统中的每一个设备(device)在地址空间的大小和类型是不同的,对应不同的访问需求。例如,某一个设备在内部寄存器或者存储空间有256Byte,可以通过IO地址空间访问,另个一设备有16K大小的空间则需要通过MMIO的方式进行访问;哪些地址应该使用哪种方式(IO或Memory)来访问设备的内部位置,这是系统软件(即BIOS和OS内核)的工作,PCI设备无法自己决定,但是需要提供一个方法让系统软件去决定以何种方式去访问设备内部地址空间。
2022-10-19 14:39:10
9738
原创 linux 红黑树原理和实现
红黑树的英文是“Red-Black Tree”,简称 R-B Tree。它是一种不严格的平衡二叉查找树.红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是
2022-06-17 20:25:23
297
原创 linux I/O 复用实现机制和驱动数据结构(select)
使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll,select 和 epoll 本质上有相同的功能: 使用一个进程来决定它是否可读或写一个或多个文件而不阻塞. 也可阻塞进程直到给定集合的任何一个文件描述符可用来读或写.在阅读源码以及相关书籍过程中,有很多描述和源码实现对不上,原因是对部分机制和内核实现没有一个整体的认识,这里梳理一下相关数据结构和内核实现机制,旨在阅读源码或者书籍的过程中能够领会其中的深意。poll和select实现基本一致。...
2022-06-15 18:26:27
302
转载 linux设备 kobject,kset,ktype数据结构分析
Linux内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的UML类图来分析Linux设备管理的"类"之间的关系。这里以4.8.5内核为例从kobject,kset,ktype的分析入手,进而一探内核对于设备的管理方式container_of宏这个宏几乎是linux数据结构的基础,Linux中的链表与传统的链表不同,其链表的节点本身并不包含任何数据,任何想要插入到链表的数据只需要包含一个事先写好的节点//include/linux/types.h184 struct
2021-04-27 14:46:03
216
1
转载 Linux内核 sgDMA 之 scatterlist API
Linux内核scatterlist API介绍1. 前言我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist可翻译为“散列表”。“散列表”又是什么?太抽象了!之所以抽象,是因为这个词省略了主语----物理内存(Physical memory),加上后,就好理解了多了,
2021-04-21 13:42:24
621
转载 Linux内核调试方法总结
https://www.cnblogs.com/cslunatic/p/3639099.html【转】Linux内核调试方法总结目录[-]一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_stack() 五 printk() 1 printk函数的健壮性 2 printk函数脆弱之处 3 LOG等级 4 记录缓冲区 5 sysl...
2021-02-05 16:11:55
1259
原创 使用SSH完成linux和windows之间的文件互传(linux端)
使用SSH完成linux和windows之间的文件互传(linux端)参考链接通过OpenSSH完成linux和Win10文件互传最近项目需求,需要linux和windows端进行文件互传,local是基于windows下的文件系统。linux的版本是centos7.7,windows端为win10,通常通过ftp或者samba服务的形式可以完成,但是基于安全性和稳定性的考虑,决定使用基于SSH协议的sftp服务完成。现在win10已经支持openSSH了,所以windows下启动ssh服务,同lin
2020-10-17 18:11:39
2777
1
原创 浅谈double dispatch (双分派) 之 vistor pattern
double dispatch(双分派) 是 multi-dispatch(多分派)的特例,由于 Visitor 模式涉及的是 double dispatch(双分派),因此这里仅仅讨论 double dispatch(双分派)的内容。实际上double dispatch(双分派)是一种很经典的技术,但是当前的主流的面向对象程序设计语言(例如 C++/Java/C#等)都并不支持多分派,仅仅...
2020-02-05 22:25:37
429
原创 设计模式 之 Template,Strategy,State,Observer,Memento,Mediator,Command,Visitor,Chain of Responsibility
Template Pattern开放-封闭原则: 软件实体应该是可以扩展但是不可以修改的(对扩展开放,对更改封闭)。开闭原则希望用抽象来应对变化,开发人员应该对程序中呈现出频繁变化的部分作出抽象;里氏替换原则: 子类对象必须能够替换掉父类对象,即在代码中将父类替换成子类,对程序本身没有影响。里氏替换原则是为了让父类真正的被复用,子类也能子父类基础上进行扩展;依赖倒转原则: 即针对接口编程...
2020-02-05 21:42:28
892
原创 设计模式 之 Bridge,Adapter,Decorator,Composite,Proxy
Bridge Pattern问题:在面向对象中,代码结构设计的目标就是“松耦合,高内聚”,尽可能提高系统模块的内部的内聚,尽可能降低模块之间的耦合;有一个对应的原则是 “Favor Composition Over Inheritance”;方案:Bridge模式可以实现固定工作流和具体实现解耦,一般有两个类,一个Abstraction,含有一个似有指针成员指向AbstractionImp...
2020-01-30 20:45:41
357
原创 设计模式 之singleton,Builer,Prototype
Singleton问题:创建一个唯一的对象方案:Code:经典方案//single.h#ifndef SINGLE_H_#define SINGLE_H_#include<iostream>#include<memory>#include<mutex>using namespace std;class Single{public...
2020-01-27 22:25:20
141
原创 设计模式之工厂和抽象工厂
问题:由于多态的设计,使用基类指针指向子类对象,但是子类的名称会很难控制,另外在客户端可能会不知道去实例化具体哪一个子类对象。方案:工厂模式 封装了对象的创建,并将实例化的工作延迟到子类中。Code:结语:...
2020-01-26 00:25:27
121
转载 Linux网络接口操作 ioctl 接口参数
ioctl interfaceLinux提供了一系列网络接口操作相关的命令集,其中,一些传统的工具,如net-tools软件包中的ifconfig(8),arp(8),route(8)都是通过ioctl(2)系统调用实现;本篇介绍使用ioctl(2)进行网络接口参数的获取与设置函数原型#include <sys/ioctl.h>int ioctl(int d, int req...
2020-01-20 16:43:04
1498
原创 Linux 下的文件系统
Linux的文件系统可以支持多人多任务进行合作开发,文件访问者的身份分为owner/group/others,且对文件的操作分为read/write/excute,可以对文件进行非常细致的权限管理,所以系统地学习Linux下的文件系统,对于linux系统下的开发工作是非常必要的。文件的访问者:owner是文件的拥有者,可以设定文件的访问权限,控制其他用户的访问;group是群组,用于团队开发...
2020-01-01 16:41:26
284
原创 C++编码规范系列八 (模板编程)
C++编码规范八 (模板编程)预编译头文件浅层实例化:底层模板往往是在实例化上层模板的过程中被实例化的。因此,一旦因为底层模板的错误而导致上层模板不能被正确的实例化,编译器所给出的诊断信息通常会包含对产生这个问题的所有层次的完整跟踪。程序员往往很难从这么多信息中快速找到症结所在.在程序中增加一些不可能执行的哑代码,只是为了在实例化上层模板时,提前验证一下所用模板实参能否满足底层模板所需要的操...
2019-12-15 13:25:17
176
原创 C++编码规范系列 七(模板编程)
C++编码规范(模板编程)C++2011标准允许函数模板带有缺省的类型参数,如果类型参数的缺省值与隐式推断的类型不一致,以隐式推断为准。双引号下的字符串类型是指针 作为形参如果是传引用&则会将字符串作为一个整体来使用 如果直接传则被视为指针。类模板的两步实例化从类模板到对象实际上经历了两个实例化的过程:编译期:编译器将类模板实例化为类并生成对象创建指令运行期:处理器执行对象创...
2019-12-14 19:28:25
247
原创 C++编码规范系列 五
C++编码规范系列 四C++编码规范(实现)将提供函数定义式的义务交给调用该函数的客户端,而不是函数声明所在的头文件中,便可以实现“并非必要的类型定义”和客户端之间的编译依存性去除掉。程序库的头文件应该以“完全且仅有声明式”的形式存在。制作handle class: “可以将对象实现细节隐藏在一个指针背后”,一个提供接口,一个负责实现接口。implementation class,在ma...
2019-12-07 22:51:10
103
原创 C++编码规范系列 四
C++编码规范系列 三C++编码规范(实现)尽可能延后变量定义的出现时机因为变量的定义需要承担构造和析构的成本。应该延后到能够给变量赋初值的时候,不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为(因为default构造后再赋值,让default构造失去意义,不如直接调用赋值拷贝构造)。尽量避免转型操作const_cast将对象的常量性去除;dynamic_ca...
2019-12-06 15:45:41
379
原创 C++编码规范系列 三
C++编码规范系列 三C++编码规范(资源)C++的资源包括内存,文件描述器,互斥锁,数据库连接,网络sockets,需要确保所有的资源得到正确的申请和释放是一件不容易的事情,但是如果能够合理的利用规则避免资源的错误管理,对于程序的正确运行是意义重大的。利用对象来管理资源(RAII)将资源装载进对象中,就可以依赖C++的构造函数和析构函数的调用机制来管理资源的申请和释放。这一观念同样被称为...
2019-12-01 22:02:16
105
原创 C++ 编码规范系列 二
C++编码规范系列 三C++编码规范(资源)C++的资源包括内存,文件描述器,互斥锁,数据库连接,网络sockets,需要确保所有的资源得到正确的申请和释放是一件不容易的事情,但是如果能够合理的利用规则避免资源的错误管理,对于程序的正确运行是意义重大的。利用对象来管理资源(RAII)将资源装载进对象中,就可以依赖C++的构造函数和析构函数的调用机制来管理资源的申请和释放。这一观念同样被称为...
2019-11-28 23:24:35
115
原创 C++编码规范系列 一
6.Declare destruction virtual in polymophic base classes.c++中明确指出,如果derived class对象被一个base class指针持有,通过这个base class指针去删除对象,并且这个base class带有一个non-virtual析构函数,结果是未定义的,实际情况下,通常是对象的derived 部分没有被销毁。所以任何c...
2019-11-24 21:08:37
112
原创 C++编码规范系列 开篇
C++编码规范系列 一开篇C++是一种在设计之初,便兼顾性能和设计,拥有罕见的威力和丰富的表达能力,只要运用得当,可以表现出巨大而变化多端的设计和优秀的性能体现,然而没有良好的规范,可能导致代码难以理解,难以维护,可扩展性低而又性能拙略。所以系统的在工作和学习中进行归纳总结是非常必要的。此系列文章是参考书本的基础上,旨在结合自己的理解对C++和软件架构进行系统的学习笔记。从软件系统和操作系统...
2019-11-19 22:44:30
394
转载 C# 理解lock - 闯.漠北 - 博客园
C# 理解lock一. 为什么要lock,lock了什么?当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被一个线程操作,以确保每个操作都是有效即时的,也即保证其操作的原子性。lock是C#中最常用的同步方式,
2017-10-18 16:01:18
704
嵌入式实时操作系统的设计技术
2024-07-02
监控和管理系统状态和性能 优化系统吞吐量、延迟和电源消耗
2022-12-12
xdma-doc xilinx XDMA 开发的教程和用户手册
2022-07-14
a top-down method for performance analysisi and counters archite
2022-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人