自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 资源 (12)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux内核内存检测工具KASan

一、简介KASan,全称Kernel Address Sanitizer,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。KASan 集成在 Linux 内核中,随 Linux 内核代码一起发布,并由内核社区维护和发展。本文简要介绍 KASan 的原理及使用方法。二、原理与使用2.1 KASan原理KASan利用额外的内存标记可用内存的状态,这部分额外的内存被称作shadow memory(影子区)。在我们Linux内核中有page结构体(页描述符),用来标识物理

2020-12-01 09:48:36 5292 3

原创 NOVA文件系统——inode初始化与管理

1、NOVA inode简介在NOVA论文中对Inode Table进行了一下描述:NOVA将每个inode table初始化为2MB的inode块数组。 每个NOVA inode都以128字节边界对齐,因此给定的inode number NOVA可以轻松地定位目标inode。 NOVA按循环顺序将新的inode分配给每个inode table,以便inode在inode table之间均匀分布。 如果inode table已满,则NOVA通过构建2MB sub-tables的链表来扩展它。 为了减小i

2020-06-04 20:40:04 983

原创 NOVA文件系统——空间管理之初始化free-list

NOVA为了让NVMM空间分配与回收更快,它将NVMM分为持久性内存池(pools),每个CPU一个内存池(pool),并将空闲的NVMM页面lists放置在DRAM中。如果当前的CPU pool中没有足够的页面可用,那么NOVA就从最大的那个池(pool)中进行分配,同时使用per-pool locks进行保护。为了减少分配器的大小,NOVA使用一棵红黑树来维护空闲列表按地址排序,从而实现有效的合并并提供O(logn)回收。为了提高性能,NOVA在运行期间不将分配器状态存储在NVMM中。 正常关闭时

2020-06-03 15:37:21 1004

原创 X86_64 CR3控制寄存器详解

CR3寄存器目前博客主要能查找到的内容都比较简单,例如《控制寄存器 cr0,cr2,cr3》等博客,只对CR3寄存器进行了简单的介绍:状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。CR3含有存放页目录表页面的物理地址,因此CR3也被称为PDBR。因为页目录表页面是页对齐的,所以该寄存器只有高20位是有效的。而低12位保留供更高级处理器使用,因此在往CR3中加载一个新值时低12位必须设置为0。使用MOV指令加载CR3时具有让页高

2020-05-18 14:18:39 15152 2

原创 进程与MMU、TLB之间的疑问

background在Linux中,进程操作的都是虚拟地址,而MMU是进行虚拟地址与物理地址的转化,TLB用于加快虚拟地址(线性地址)的转换~ 每个进程都有自己对应的页表,不同进程相同的虚拟地址映射的大概率不是相同的物理地址,同时不同进程不同的虚拟地址可能映射到相同的物理地址上。本文的疑问就是针对进程有不同的页表,那么MMU与TLB到底是怎么根据虚拟地址找到物理地址的呢,是不是MMU和TLB需要知道进程的信息呢,带着这些疑问来进行探究~疑问1 MMU、TLB是否需要知道进程信息?转换后援缓冲器T

2020-05-17 10:49:27 1792

原创 linux perf工具测试程序cpu cache刷回实验

一、perf安装进入自己编译的内核,一般目录是:/usr/src/linux-x.x.x/tools/perf编译安装之后,即可使用makemake installperf的使用可以查看本文参考文献1,下面介绍一下perf工具中与cache相关的内容sudo perf list cache可以看到与刷回有关的事件是:LLC-stores下面结合一个程序,来了解perf对于应用程序cacheline刷回事件的追踪~二、测试程序测试程序结合参考文献2、3进行.

2020-05-15 20:32:55 989

原创 fread带缓冲测试与验证

一、FILE结构fread操作的是FILE结构,FILE结构中包含了一个缓存buf的定义:typedef struct _IO_FILE FILE;struct _IO_FILEstruct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */#defin...

2019-12-12 21:28:00 739

转载 缓冲文件系统——fopen、fread、fwrite、fclose详解

一 介绍1、《缓冲文件系统和非缓冲文件系统》https://nocbtm.github.io/2018/11/05/%E7%BC%93%E5%86%B2%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%92%8C%E9%9D%9E%E7%BC%93%E5%86%B2%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/二、加深印象看...

2019-12-11 10:43:05 1252

原创 MySQL数据库自带基准压力测试工具MySQLSlap使用探索

一、介绍mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具,可以生成schema,装载数据,执行benckmark和查询数据,语法简单,灵活,容易使用。该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。mysqlslap通过模拟MySQL服务器的客户端负载,并报告每个阶段的时间,它的工作方式就好像多个客...

2019-11-26 16:27:52 792 1

转载 root权限下修改文件权限遇到 chmod: changing permissions of '***': Operation not permitted

转自:https://www.cnblogs.com/cpl9412290130/p/11592803.html一、问题描述众所周知,在linux系统中,权限最大的是root,但凡修改涉及到系统本身的重大权限的操作,都需要root的权限才能操作。但是有些时候也有root干不了的事情。比如:chmod: changing permissions of 'authorized_key...

2019-11-25 14:31:42 64942 18

原创 Linux C语言根据文件描述符fd获得文件绝对路径(文件名)

一、代码示例示例代码首先根据文件名获取文件描述符,然后根据文件描述符获得文件绝对路径(文件名),如果已知文件描述符fd,可直接通过下面两条代码获得文件绝对路径(文件名):snprintf(buf,sizeof(buf), "/proc/self/fd/%d", abs_fd);readlink(buf,obj_file,SIZE);obj_file 就为文件绝对路径,完整代码示...

2019-11-21 19:52:18 8181

转载 Ubuntu18.04编译内核后开机报错:Couldn't find suitable memory target

解决方案:在编译内核安装模块时使用如下命令:sudo make INSTALL_MOD_STRIP=1 modules_install其他一切照旧,编译安装完后,重启切换到新编译的内核后就不会遇到上述问题了~解决方案及可能原因来自:https://blog.csdn.net/ogl_90kg/article/details/82595999...

2019-09-19 14:09:50 1188

原创 LaTeX入门学习博客资料

最近想要学习使用LaTex,安装了一下Ctex,然后准备开始使用练习~持续更新~一、入门学习资料1、《LaTeX新人教程,30分钟从完全陌生到基本入门》地址:https://blog.csdn.net/perfumekristy/article/details/8515272备注:这个博客算是比较基础,里面的案例也都能运行通过,文中主要讲解了如何开始第一个文档,然后逐步加入标题...

2019-09-05 20:20:50 349

原创 Linux内核printk宏开关

在内核开发时经常使用printk打印调试信息,但是printk又对性能有一定的影响,比如写了一个驱动调试完毕要发布或者做内核实验调试完毕正式测试时将这些printk删除又很麻烦,之后再想调试又要重新添加。在内核中可以使用printk宏开关来控制这些信息的显示:#define DEBUG_A#ifdef DEBUG_A#define DEBUG(fmt, args...) printk...

2019-08-16 17:17:10 1495 2

转载 Linux模块编程使用内核未导出的函数

转自:https://blog.csdn.net/jasonLee_lijiaqi/article/details/83089569作者:jasonLee_lijiaqi一般我们在编写内核模块时,可以直接使用内核中使用EXPORT_SYMBOL或者EXPORT_SYMBOL_GPL导出的函数,没有导出的内核函数不能直接使用。否则会报错未定义:WARNING:"do_sys_open"...

2019-08-13 21:04:00 1362

翻译 英特尔Optane DC Persistent Memory操作模式说明

前面介绍了Optane DC Persistent Memory有两种模式:Memory Mode App Direct Mode服务器将使用DRAM和英特尔Optan DC Persistent Memory的组合。 DRAM具有最低的内存延迟。 英特尔Optane DC Persistent Memory具有稍高的延迟,但提供了可承受的容量和数据持久性。一、Memory Mode:...

2019-08-05 14:51:37 3133 1

原创 Linux中vdbench的安装与使用

vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。可以使用vdbench测试磁盘和文件系统的读写性能。环境:Ubuntu 16.04一、安装Javavdbench的运行需要依赖于java,先查看主机是否装有java:java -version在当前主机中,没有...

2019-07-10 16:21:53 13605 2

原创 Linux中jemalloc的安装与使用

一、安装下载地址:https://github.com/jemalloc/jemalloc/releases目前最新版本为jemalloc-5.2.0下载之后解压文件:下面正式开始安装~step 1:./autogen.shstep 2:makestep 3:sudo make install如果这一步没有超级权限的话会有如下问...

2019-07-04 20:46:15 19357

转载 Ubuntu下F2FS文件系统的安装与挂载

安装f2fs-toolsapt-get install -y f2fs-tools如果上一步出错,则执行:dpkg --configure -a再重新apt-get install -y f2fs-tools如果直接apt-get不成功,还可以通过下载源码包的方式来安装f2fs-tools:git clone git://git.kernel.org/pub/scm/...

2019-06-13 21:24:44 4758

转载 Linux上安装memkind库

memkind:https://github.com/memkind/memkindjemalloc:https://github.com/jemalloc/jemalloc/releasesmemkind简介memkind库是一个构建在jemalloc之上的用户可扩展堆管理器,它可以控制内存特性和各种内存之间的堆分区。这类内存由已应用于虚拟地址范围的操作系统内存策略定义。me...

2019-05-28 20:19:00 940

原创 持久性内存编程——内存分配使用举例

前面有了两篇讲解内存分配的博文:持久性内存编程——事务性动态内存分配:https://blog.csdn.net/SweeNeil/article/details/90547136持久性内存编程——原子分配动态内存:https://blog.csdn.net/SweeNeil/article/details/90444432其实写得都有点简单,没有一个比较简单具体的案例,下面就把具体的...

2019-05-25 19:39:11 760

翻译 持久性内存编程——事务性动态内存分配

pmemobj库包含一个从头开始实现的内存分配器,它在设计时考虑了持久性内存。它有两套独立的API:非事务和事务。本文讲解持久化内存的事务性的动态内存分配,原文来自:http://pmem.io/2015/06/17/tx-alloc.html目录事务分配事务分配看下面一段现在的易失性内存分配:struct rectangle { int a; int b;};...

2019-05-25 15:30:34 772

翻译 持久性内存编程——原子分配动态内存

pmemobj库提供了非事务原子API可以实现更优化的内存管理。防故障原子分配这个API与大多数程序员在处理内存时使用的API不同。首先,函数要么分配给指针,要么释放指针。目标指针的修改是以原子方式完成的,这样它总是有效的——它要么指向一个有效的初始化内存块,要么指向一个OID_NULL。函数/宏还强制开发者在已知状态下创建对象,方法是将它们归零(pobj_znew,pobj_zalloc...

2019-05-22 16:25:34 568

翻译 持久性内存编程——类型

在之前的所有关于持久化内存编程的文章中,代码片段和示例都有持久指针(pmemoid),没有任何类型信息——它们是简单的C结构。在pmem库开发的早期,开发者发现使用类似的东西非常容易出错,而且通常很困难。他们在用类型安全容器封装pmemoids时付出了相当大的努力,最终结果可以与C++11中的SydDypTr等进行比较,之后的所有内容将只使用类型安全特性。目录布局声明类型化持久指针...

2019-05-22 14:36:56 741

翻译 持久性内存编程——事务

在之前一直用的持久化内存,现在感觉有一种说不出的怪怪的感觉,之后都改为持久性内存。前面介绍了访问持久性内存的方式,其中抛出了一些在持久性内存上编程的要点,接下来就翻译pmem.io上的第二个编程指导——事务。原文来自:http://pmem.io/2015/06/15/transactions.html目录生命周期事务操作条件事务块示例通过前一部分的介绍(https...

2019-05-18 15:28:06 847

翻译 持久化内存编程——使用pmemobj库访问持久化内存

前面提到了持久化内存编程的启程资料:https://blog.csdn.net/SweeNeil/article/details/90293313在持久化内存开发工具中,提供了各种各样的库,这些在pmem的github介绍以及pmem.io中都有提到,下面就直接把github上面的直接拿出来:上面描述了各个库的说明,在其中,看到libpmemobj提供的功能还算全面,所以就使用li...

2019-05-17 19:32:07 2931

原创 持久化内存编程——启程资料

前面介绍了持久化内存的基本概念,然后在内存中模拟出了持久化内存,接下来就是使用持久化内存了。持久化内存简介:https://blog.csdn.net/SweeNeil/article/details/90257029Ubuntu使用内存DRAM模拟持久化内存Persistent Memory:https://blog.csdn.net/SweeNeil/article/detai...

2019-05-17 15:43:56 1404

原创 Ubuntu使用内存DRAM模拟持久化内存Persistent Memory

现在真实的持久化内存对于我们普通人来说还不可用,在进行实验和测试的时候可能需要我们模拟持久化内存来进行使用。现在在一台主机(没有服务器o(╥﹏╥)o)上测试划分一块内存区域来进行持久化内存的模拟。环境:Ubuntu 18.04,一台普通的Dell台式机,运行内存 8 G。从Linux 4.0以来,Linux内核就具备了对持久性内存设备和仿真的支持,但是,为了便于配置,建议使用比4.2更...

2019-05-16 16:18:02 4819 7

翻译 持久化内存简介

本文来自持久化内存文档,该文档上一次更新来自两个月前,也就是2019年3月,但是感觉内容应该还是比较老了,可能初版有两三年的历史了~一、持久化内存概述在过去的几十年中,计算机系统已经实现了图1所示的存储器存储层次结构。存储器存储层次结构利用了局部性原理,它使频繁访问的数据保持在最接近CPU的位置。连续几代技术分别从缓存的数量,大小和速度进行了改进,以此来确保CPU在缓存中可以访问到最常...

2019-05-16 10:33:52 8141

转载 Linux使用 ftrace 来跟踪内核函数调用

本文参考了一些博客,然后在自己的主机(Ubuntu 18.04)上进行了测试在Linux内核文档中有关于ftrace的介绍:https://www.kernel.org/doc/Documentation/trace/ftrace.txtftrace是一个Linux内部跟踪器,主要是帮助系统的开发人员和设计人员了解到内核中发生了的事情。它可用于调试或分析在用户空间之外发生的延迟和性...

2019-05-09 16:45:51 6911 1

转载 理解Linux的进程,线程相关的各类ID:PID,LWP,TID,TGID

最近实验室遇到了一个关于PID的问题,让我也跟着学习一下,查看了一下相关资料,找到一篇关于Linux进程和线程的各种ID的介绍,所以转载了过来。作者:wipan来源:cnblogs地址:https://www.cnblogs.com/wipan/p/9488318.html在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thr...

2019-05-09 10:07:52 3075

原创 Ubuntu 18.04安装持久化内存配置工具ndctl

方法一sudo apt-get install libndctl-dev这玩意有点玄学,说实话不太明白到底怎么回事,如果不能用建议使用第二种方式进行安装~方法二如果不行的话,在github上下载源码进行安装:GitHub source在github页面有一个简单的介绍,如下托所示,里面有ndctl的文档介绍,同时也简略给出了安装方法: ...

2019-05-08 19:38:56 4162

原创 Ubuntu 18.04安装英特尔Optane DC Persistent Memory Module配置工具ipmctl

《Intel Optane DC Persistent Memory Module (PMM)详解》地址:https://blog.csdn.net/SweeNeil/article/details/89673992《Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用》地址:https://blog.csdn.net/SweeNe...

2019-05-08 15:09:43 5609 2

转载 NUMA的Linux工具:numactl

作者:qccz123456来源:CSDN原文:https://blog.csdn.net/qccz123456/article/details/81979819一、NUMA简介NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于Linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多CPU为潮流的X86平台来说确实会有不...

2019-05-08 14:07:13 10424

转载 NUMA架构下的CPU拓扑结构

黑色部分为转载内容,蓝色部分为本人的一台主机实测,在文中使用分割线进行区别“——————”作者:weijitao来源:CSDN原文:https://blog.csdn.net/weijitao/article/details/52884422目前多核已经越来越普遍的使用,Linux对NUMA架构的支持也越来越完善。对于内存管理、多处理的负载均衡调度等进行了大量的优化工作。NUM...

2019-05-07 21:20:47 2349

翻译 Intel Optane DC Persistent Memory Module (PMM)详解

英特尔对外公开提出Optane DC Persistent Memory Module已经快一年的时间了,这个介于SSD和DRAM之间的新层级对于数据中心有很大的好处。持久内存的目标始终是将更多数据移近CPU,提供类似DRAM的延迟,同时也具有类似存储设备的持久性和容量。 经过一年的时间听取硬件和软件合作伙伴谈论持久内存的好处,现在,随着第二代英特尔至强可扩展处理器的发布,Optane DC ...

2019-04-29 15:52:11 9737 2

翻译 Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用

翻译得不好还请见谅,原文见末尾链接~一、简介英特尔的Optane DC Persistent Memory(Optane DC PMM、DCPMM)是一种颠覆性的技术,它在内存和存储器之间创建了一个新的层级。 英特尔Optane DC PMM支持两种模式:①Memory Mode:内存模式,与DRAM类似,同时在该模式下,数据易失②App Direct Mode:应用直接访问模式,...

2019-04-28 18:52:33 11742 2

原创 WinMIPS64工具进行MIPS指令集实验(二)

在上一篇中,运行了一个测试程序,但是对于运行的结果以及那么多窗口每个窗口表示的含义还并不明确,所以本篇就来分析一下这些内容。上一篇:WinMIPS64工具进行MIPS指令集实验(一)地址:https://blog.csdn.net/SweeNeil/article/details/89466463在上一篇我们最后得出了如下的运行结果,可以看到winmips64是以六个窗口来进行展示的,...

2019-04-23 19:09:39 5972

原创 WinMIPS64工具进行MIPS指令集实验(一)

一、安装WinMIPS641、下载WinMIPS64本来是想传到CSDN上的,传上去之后发现默认需要五个下载积分,找不到更改积分的接口所以链接就不贴上来了。(1)自行网络下载(2)百度网盘下载链接:https://pan.baidu.com/s/1CiYcZfGHOmx1J3cl-q1yrw提取码:wkmv2、下载后将WinMIPS64解压到自己习惯的软件目录下...

2019-04-23 10:25:52 8739 4

原创 闪存文件系统(Flash File System)

最近调研了一下闪存文件系统,部分结果展示如下,如有错误欢迎评论指正~一、背景闪存(flash memory),是一种电子式可清除程序化存储器的形式,允许在操作中被多次擦或写的存储器。随着现在闪存价格的降低,闪存越来越普及,闪存是一种非易失性存储器,断电数据并不会丢失,同时它的读写速度比机械硬盘(HDD)要快很多。无论是手机还是一些小型的嵌入式设备,闪存都是作为存储器的方式存在,现在手机...

2019-04-18 10:24:16 3511

WinMIPS64模拟器

WinMIPS64是一款指令集模拟器,它是基于WinDLX设计的,WinMIPS64模拟器能够演示MIPS64流水线是如何工作的。

2019-04-23

linux下ipfs安装包

ipfs的linux安装包,具体安装与使用方法可以参考博客https://blog.csdn.net/SweeNeil/article/details/82762553

2018-09-18

Java服务器端接收图片

Java服务器端套接字,用于进行图片数据的接收,并将图片放置到tomcat应用目录下

2018-07-15

通过JSP将数据库中的数据显示到网页上

通过JSP将数据库中的数据显示到网页上,数据库为Mysql数据库。

2018-07-15

神经网络、遗传算法、粒子群优化算法等C语言基础编程

遗传算法、神经网络、模拟退火、蚁群算法、模糊逻辑、粒子群优化算法的C语言编程

2018-07-15

OpenCV Haar分类器交通红绿灯训练样本与模型

包含红绿信号灯的训练样本,以及opencv_traincascade.exe、opencv_createsamples.exe以及训练出的模型xml文件

2018-07-15

OpenCV Haar分类器车辆识别模型训练样本和训练结果

包含车辆正负样本,以及opencv_createsamples.exe、opencv_traincascade.exe以及训练样本结果

2018-07-15

GPS模块的数据解析

文件中包括多个GPS数据解析的文件,将解析结果放到一个文件中或者通过串口传递出去等。

2018-07-15

Linux下C语言套接字进行图片传输

Linux下使用C语言套接字进行图片的传输,先运行服务器端,再运行客户端

2018-07-15

STM32温湿度传感器DHT11代码,通过串口上传

STM32F103单片机的温湿度传感器DHT11代码,通过串口上传

2018-01-23

JAVA串口助手接收数据并解析数据存入MySQL数据库中

JAVA串口助手接收串口来的数据,并将数据解析存储入MySQL数据库中,在使用前串口需要有设备,同时自己创建数据库与数据表,见README

2018-01-23

JAVA串口助手

JAVA串口助手,接收串口收到的数据,在打开串口时需要串口有相应的设备。

2018-01-23

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

TA关注的人

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