自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 [openjdk] Vector API

目录一、SIMD today1.1 x86: MMX, SSE, AVX, AVX2, AVX-5121.2 ARM: NEON, SVE, SVE21.3 POWER: VMX/AltiVec1.4 MIPS: MSA LASX二、JVM and SIMD today2.1 Automatic vectorization of Java code2.2 JVM intrinsics2.3 Vector API一、SIMD today1.1 x86: MM..

2021-04-19 08:51:27 553

原创 [openjdk] 安全点原理

目录安全点(英文Saftpoint)一、原理二、生成的Safepoint具体指令三、 捕获异常并停止线程四、安全点恢复五、 安全点信息统计 -XX:+PrintSafepointStatistics安全点(英文Saftpoint)一、原理JVM的Safepoint充分利用Linux中断机制。即在函数的安全点位置插入1条(mips上是2条)从固定地址的数据加载(读)指令,正常情况下这个地址为可读可写,而当JVM需要暂停用户线程时(比如GC),JVM把这个固定地址设置成.

2021-04-15 08:12:50 367

原创 Linux上编写jni实例

目录Linux上编写jni实例步骤1:编写java 并编译步骤2:生成native接口(HelloWorld.h)文件步骤3:实现接口(HelloWorld.cpp)并编译成动态库so步骤4:执行Linux上编写jni实例注意:一定要注意顺序。先做java文件里面的native接口,然后再使用javah实现c/c++;步骤1:编写java 并编译//HelloWorld.java 1 public class HelloWorld { ..

2021-04-14 15:28:54 489

原创 mips架构下使用perf工具遇到的问题及解决方法

在做程序性能分析时,perf是必不可少的分析工具。它的最简单的使用方式为:$ perf record -e task-clock ./a.out //抓取热点数据 $ perf report //查看热点 这样我们可以精确定位到热点方法,甚至可以进一步定位到热点指令。但是在mips架构的机器上使用perf的过程中,会或多或少存在一些问题,在此记录。问题1:perf不显示so库方法名称(Symbol列 只能显示热点PC)出现这种情况,perf report的结果是: Overh

2021-02-18 12:56:23 2672 2

原创 C语言提供的线程/进程间同步(锁)机制

##C语言提供的线程间同步(锁)机制/usr/include/pthread.h中提供1、互斥体 (Mutex)描述:互斥体是比信号量更为简单是睡眠锁。使用范围:最为常用/* Initialize a mutex. */extern int pthread_mutex_init (pthread_mutex_t *__mutex, const pthread_mutexattr_t *__mutexattr) __THROW __nonnull...

2020-12-31 09:24:41 6072

原创 编解码格式/封装格式/mediainfo工具使用

总是不期有人问我一些音视频问题,在这里就科普一下音视频的基本知识吧。首先要知道,无论是音频、视频还是音视频。都是分编码/解码格式和封装格式的。目前Android设备上常用的音频编/解码格式有mp3、avc等,视频编解码格式有h264、h265、v8等,音频文件封装格式有 ,视频文件(带音频)封装格式有,。我们可以通过mediainfo工具查看音视频文件的详细信息。如果你电脑没有安装此工具,可以通过下面命令安装即可://fedorasudo yum install mediainfo//u

2020-11-30 13:51:12 1779

原创 __attribute__((weak))

强引用:对外部目标文件的符号引用在目标文件被最终链接成可执行文件时,它们必须被正确的决议,如果没有找到该符号的定义,链接器就会报未定义错误,这种被称为强引用。弱引用:对于GCC,使用__attribute__((weak))关键字来声明的函数称为弱引用。对外部目标文件的符号引用在目标文件被最终链接成可执行文件时,如果没有找到该符号的定义,链接器不会认为它是一个错误,程序可以正常编译完成。/*file main.c*/#include <stdio.h> extern void.

2020-08-20 13:23:40 1767

原创 MIPS ABI / AARCH64 ABI:n32 and Native 64-Bit C Parameter Passing

一、参数调用规则如下表:ArgumentList Register and Stack Assignmentsn1,n2,n3,n4$4,$5,$6,$7d1,d2,d3,d4,d5$f12, $f13, $f14, $f15, $f16n1,n2,d1$4, 5,5,5,f14d1,n1,n2$f12, $5,$6d1,d2,d3,d4,d5,s1,s2,s3,s4$f12, $f13, $f14, $f15, $f16, f17,f17,f17,

2020-07-23 13:36:25 667

原创 MSIL语法笔记

.net core的JIT编译分前端和后端。前端负责把IL指令转换到JIT的高级中间表现HIR。后端负责把HIR转换到低级中间表现LIR后,再转换到架构相关的汇编指令。结构如图:.netcore 流程 逆向.net程序(.dll .exe)到IL的工具有ildasm、ILSpy、dnSpy。其中ildasm为官方提供工具,在源码coreclr中生成,可以把.net程序转换到IL代码。与ildasm对应的还有个ilasm工具,可以把IL代码再转换成.net程序集。ILSp...

2020-07-11 15:26:02 768

原创 ARMv8(aarch64)指令集特性

有了之前mips系统架构的基础,再了解arm64就相对轻松多了。所谓体系架构,核心就是寄存器、指令集和abi(即寄存器和指令集的使用规范)。下面就分这3方面展开做的学习笔记。指令编程风格ARM官方风格:官方风格指令一般使用大写,例如:LDR R0,[R1],Windows中常使用这种风格。GUN Linux风格:指令一般使用小写字母,例如:ldr r0,[r1],Linux环境中常用这种风格.一、ARM64寄存器 ARM64寄存器分类:通用寄存器、浮点寄存...

2020-07-11 12:23:36 8568

原创 Docker热迁移工具CRIU原理系列:竞品分析CRIU、DMTCP、BLCR、OPENVZ

  热迁移,又叫动态迁移、实时迁移,即对程序或者虚拟机的保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。整个过程用户不会察觉到程序/虚拟机的变化。实现热迁移的原理就是在用户态或者内核层面实现对进程的Checkpoint/Restore(简称C/R)。能实现程序或者docker容器的热迁移工具很多,比如可以在用户态实现热迁移的工具有CRIU...

2020-05-02 15:43:48 2652

原创 Docker热迁移工具CRIU原理系列:images

  criu 备份进程或者容器后,会生成一系列的镜像文件。这些镜像会被用来进程或者容器在任何其他同体系架构主机上的恢复。本文将描述这些镜像文件的格式、功能。1、镜像文件的类型  criu镜像文件采用google RPC格式,即ProtoBuf 格式。ProtoBuf是和JSON、XML 一样,用作序列化/反序列化结构数据的方法。 ProtoBuf语言中对criu各功能条目的描述位于criu 源...

2020-04-24 09:40:01 2410

原创 MIPS体系架构下的shmat()函数注意事项 和 SHMLBA

在使用criu zdtm单项测试 ./test/zdtm.py run -t zdtm/transition/ipc 失败,ipc测试实例功能是父进程创建了2个子进程,并通过信号量和子进程共享一个内存空间。测试失败点在criu restore过程中,子进程对共享内存的虚拟地址映射无法对应上dump时的地址,也就是调用shmat(shm,oldaddr,0)返回的地址不...

2020-04-16 08:58:53 738

原创 Github进行fork后与原仓库同步方法(命令行方式)

通常我们对开源项目做贡献的时候有两种方式:一是发送 *.patch 文件到相关维护者邮箱。kernel项目就是如此方式。二是fork一份项目代码到自己仓库,修改后提交PR(全称Pull Request),github上大部分项目就是这种方式。 基于开源社区github上工作时总会遇到这样的问题:fork了一个项目到自己的远程仓库,一段时间后如何...

2020-04-15 14:39:32 1318 2

转载 Linux进程间通信:信号、管道、信号量、共享内存、消息队列、socket

本章引自他人blog,用作自己的备忘录Linux进程间通信(一): 信号 signal()、sigaction()https://www.cnblogs.com/52php/p/5813867.htmlLinux进程间通信(二):信号集函数 sigemptyset()、sigprocmask()、sigpending()、sigsuspend()https://www.cnblogs.co...

2020-04-14 15:27:17 241

原创 Docker热迁移工具CRIU原理系列: CLI, RPC and C API

使用C/R功能的三种方式就是 CLI, RPC and C API。下面分别介绍。一、CLI CLI(Command Line Implementation)意思是CRIU的命令行工具,具体的工具名称是criu。比如我们可以执行最简单的命令” criu check“来确认当前系统内核是否提供支持CRIU正常使用的最小要求,如果条件达到,终端会返回成功,如...

2020-04-09 13:59:07 1984

原创 Docker热迁移工具CRIU原理系列:测试集 ZDTM

ZDTM 代表 Zero DownTime Migration,零宕机迁移。ZDTM 测试集本是为OpenVZ 热迁移开发的测试集,CRIU也使用它作为测试集。ZDTM 测试集由许多测试用例组成,目前在CRIU里面包含382个测试用例。本文介绍它的基本使用。一、准备工作 运行ZDTM测试集需要当前主机安装libaio-devel (RPM) 或者 libaio-dev (DE...

2020-04-08 12:14:04 772

原创 Docker热迁移工具CRIU原理系列:Memory changes tracking跟踪内存变化

CRIU 可以检测一个或多个任务从某一时刻开始,哪些内存页发生了改变。本文介绍为什么要有这个功能以及它是如何工作的。为什么我们要追踪进程虚拟内存的改变 怎样追踪进程虚拟内存的改变 在CRIU工具中怎么使用此功能1、为什么我们要追踪进程虚拟内存的改变 我们有理由需要我们追踪进程虚拟内存的改变。下面列举了3个典型优势优势1:增量...

2020-04-02 16:30:17 1330

原创 ELF(Executable and Linking Format)文件结构描述

ELF文件(Executable and Linking Format)是用在Linux系统下的一种目标文件(object file)存储格式。典型的目标文件有如下3类:可重定向文件(relocatable file)可重定向文件里面包含了代码和数据,用于和其他可重定向文件一起链接形成一个可执行文件或者动态库。 可执行文件(executable file) 可执行文件里面...

2020-03-31 14:13:13 1588

原创 MIPS指令集:内嵌汇编asm语法介绍

内嵌汇编(Assembly)是可以直接插入在c/c++语言中汇编程序。它实现了汇编语言和高级语言的混合编程。当在高级语言中要实现一些高级语言没有的功能,或者提高程序局部代码的执行效率时,都可以考虑内嵌汇编的方式。 内嵌汇编标识为asm()。asm是c/c++中的内嵌汇编关键字,或称模板。用于通知编译器,接下来的()内的代码是内嵌汇编程序, 需要特殊处理。()内部...

2020-03-30 11:04:49 13663 7

原创 MIPS指令集:汇编源程序(.S文件)编写

我们学会了MIPS汇编语言后,编写汇编程序还需要一个“框架”,用“框架”的目的是让我们更加容易的编写汇编程序,把更复杂的任务,比如符号解析、地址重定向、对齐等工作交给工具链去完成。这个框架有2种方式,汇编源代码文件(以.S为后缀)和内嵌汇编(在.c文件中嵌入汇编语言的方式)。本篇介绍.S为后缀的汇编源程序的编写格式。 我们可能经常遇到以.S后缀结尾和.s后缀结尾的...

2020-03-29 20:37:47 6492 3

原创 ffmpeg视频处理的常用命令

//录制屏幕:不带声音ffmpeg -f x11grab -video_size 1280*720 -framerate 10 -i :0.0 out2.mp4//录制屏幕:不带声音//截取视频:从第5秒开始,截取长度为13秒ffmpeg -ss 5 -t 13 -i out2.mp4 output.mp4//慢动作:ffmpeg -i output.mp4 -filter:v “se...

2020-03-22 11:26:42 449

原创 mips指令优化:__inline__不起效果

程序实例(lock.h):static __inline__ inttas(volatile slock_t *lock){ register volatile slock_t *_l = lock; register int _res; register int _tmp; __asm__ __volatile__( " .set push \...

2020-03-17 17:47:09 464

原创 MIPS指令集:寄存器

   不同的计算机架构中寄存器的种类和数量也不相同。MIPSmips中用到的寄存器按照功能分为有通用寄存器、协处理器0、浮点寄存器、乘法部件寄存器。通用寄存器共32个,是没有特殊限制,一般程序员可以使用的寄存器。协处理器0寄存器也叫控制寄存器,共32个,用来控制并管理CPU。浮点寄存器和乘法部件寄存器都是专用寄存器。浮点寄存器也叫协处理器1寄存器,共32个,用来存储和浮点计算相关的数据。乘法部件...

2020-03-14 15:04:51 13788 2

原创 MIPS指令集:运算指令、访存指令、分支和跳转、协处理器0指令

计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。通常一条指令包括两方面的内容: [1]操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。在第2章时我们介绍了MIPS所有指令都是32位的,操作码占用高6位(bit31-bit26)表示,低26位按格式划分为R型、I型和J型。本章将按mip...

2020-02-22 16:28:30 36674

原创 nvm(node.js版本管理工具)的使用(mips平台适用)

nvm就是为了解决node各种版本存在不兼容问题的工具。如果你的程序在执行“npm install”时报错。那么你可以尝试使用nvm来切换node版本来试试了。下面介绍nvm工具的下载和使用步骤1:下载nvmgit clone https://github.com/nvm-sh/nvm.git如果你的系统当前没有git工具,那么你可能还需要执行语句“yum install -y ...

2020-02-10 15:02:32 786

原创 linux内核信号处理机制--do_signal函数讲解 (适用mips架构)

    Linux为了允许用户态进程之间的通信而引入signal.此外, 内核使用signal给进程通知系统事件 对于信号signal,你要记住的基本点如下:  信号分实时信号(编码值为[32,64])和非实时信号编码值为[1,31]    ----实时意味着相同信号多次发送都会被加入悬挂信号队列,而不丢失  信号处理方式包括默认处理(eg:SIGKILL,SIGSTO...

2020-01-10 18:51:48 2422

原创 线程本地存储TLS(Thread Local Storage)的获取 (龙芯适用)

提到tls线程本地存储可能很多程序员会比较陌生,因为平时我们很少使用它。但是写C程序的人会经常用到一个errno变量来获取程序的错误码。这个errno在libc库里面的定义形式是/*in glibc-2.20 csu/errno.c*/__thread int errno;这里的__thread 关键字就是GCC内置的线程局部存储设施,每一个线程有一份独立实体,各个线程的值互不干扰。在近...

2020-01-10 10:27:28 472

原创 ptrace的使用流程

参考链接: https://blog.csdn.net/imred/article/details/90141080一、tracer和tracee的跟踪状态建立 两种方式:一种情况是tracer是tracee的父进程,进程tracee主动调用PTRACE_TRACEME.另外一种是进程tracer调用PTRACE_ATTACH或者或PTRACE_SEIZE。处理PTRACE_ATTACH请求...

2019-12-31 17:56:45 2668

原创 制作src.rpm包(龙芯适用)

步骤1:准备源码压缩包$ tar -czf criu-3.6.tar.gz criu-3.6步骤2:创建rpmbuild目录 方法一:使用rpmdev-setuptree命令$ rpmdev-setuptree 如果没有此命令,使用命令“ yum install rpmdevtools -y ”安装。此时会在你的家目录生成rpmbuild目录。里面存在目录BUIL...

2019-12-06 10:14:40 729

原创 git commit --amend踩坑记录

git commit --amend 就是解决一些很小的改动,使得你不想在重现创建一个commit而设定。如果你的commit已经push到了远程仓库,那么使用--amend修改commit后,git push时一定要使用 --force-with-lease 参数。否则就会报错:error: 无法推送一些引用到 'https://github.com/×××/test.git'提示:更新...

2019-12-04 14:08:32 10874 2

原创 如何向linux kernel 提交patch

尽管linux kernel 源码托管在github 上,但是游客(只有read accession permission)想要提交代码并不能向其他开源库那样通过PR(pull request)申请merge,而是要通过git send-email 发送patch文件 的方式。 下面是我第一次提交代码的经历,也算是备忘录。步骤1:确保邮箱配置正确 ...

2019-11-28 15:41:50 2286

原创 R_MIPS_HI16的重定位:一次mips jal跳转指令执行失败的调试经历

  代码中写出的每一个bug,就代表了你的一个知识盲区  近期一直在做criu到mips架构上的移植工作。遇到一个奇怪的问题就是执行jal失败,而且不是每次都出现。 代码指令如下: lw a0, __export_parasite_cmd dla a1, __export_parasite_args jal parasite_service nop .byte 0x0d, 0x0...

2019-11-22 18:49:57 1446

原创 EJTAG工具的常用命令(龙芯适用)

//startsudo ./ejtag_debug_usb -t//sourcesource configs/config.ls3a4000//qiehuan cpucpu 1//read cpu pg regsset//exit ejtag debug node .go oncont//反汇编addr开始count个指令disas addr [count]...

2019-11-22 13:19:56 1358

原创 LINUX内核(之3):内存管理之页page、区Zone、节点node、分配器slab

最近在学内核内存管理方面知识,查看相关书籍后整理了一下笔记。内核中对内存管理的实现涵盖了如下几方面知识:    1、内存中的物理内存页的管理    2、分配连续内存的系统    3、分配较小块内存的slab、slub和slob分配器    4、分配非连续内存块的vmalloc机制    5、进程的地址空间接下来逐个介绍。 一、内存中的物理内存管理 ----页(Page)的概念...

2019-11-16 15:54:00 2090

原创 nvm工具(用于node.js版本管理)的使用(龙芯平台适用)

nvm就是为了解决node各种版本存在不兼容问题的工具。如果你的程序在执行“npm install”时报错。那么你可以尝试使用nvm来切换node版本来试试了。下面介绍nvm工具的下载和使用步骤1:下载nvm# git clone https://github.com/nvm-sh/nvm.git如果你的系统当前没有git工具,那么你可能还需要执行语句yum install -y git...

2019-11-14 09:51:46 631

转载 linux 多线程信号处理总结

别人总结的很好,留着方便自己后期查阅,上链接原创地址:http://blog.chinaunix.net/uid-12274566-id-3050955.htmlhttps://www.cnblogs.com/cobbliu/p/5592659.htmllinux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,...

2019-11-14 08:48:28 286

原创 error while loading shared libraries: libnet.so.1: cannot open shared object file: No such file or

我曾经遇到的bug也许正是你正在遇到的,希望可以帮到你。今天在运行criu程序时候,遇到了题目的问题:$ ./criu/criu ./criu/criu: error while loading shared libraries: libnet.so.1: cannot open shared object file: No such file or directory原因这种运行程序...

2019-11-12 11:33:15 1460

原创 python:未找到命令

今天在虚拟机(centos8)编译CRIU时遇到此问题。出现这个问题基本上由于python安装了过多的版本,导致链接失效首先可以使用下面命令查看相关的python的具体位置$ which python/usr/bin/which : no python in (/usr/lib64/bin:/usr/lib64/sbin:/usr/lib/bin)说明确实没有python,然后可以按具...

2019-11-12 11:15:16 15558 2

原创 MacBook+virtualbox_centos 环境搭建的坎坷经历

由于移植的CRIU工具在mac上无法编译(github上的criu社区给我的回复是criu是linux项目,不能在mac上编译和运行)。我就只能在我的Macbook本上安装虚拟机并运行centos环境来编译criu工具。按照网络给出的虚拟机安装过程https://blog.csdn.net/ytangdigl/article/details/79736562,基本上可以使用,中间还是踩了一些坑,...

2019-11-07 14:59:42 270

空空如也

空空如也

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

TA关注的人

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