c
文章平均质量分 62
序冢--磊
这个作者很懒,什么都没留下…
展开
-
使用ebpf 监控mysqld 内核
我们使用ebpf 监控mysql的话有两个思路去做这件事情1、kprobe -> hook 掉tcp_sendmsg 和 tcp_recvmsg 一类的内核函数去分析网络协议2、uprobe -> hook 掉 mysqld 的api函数,然后在此基础上进行统计。原创 2023-01-24 13:51:00 · 1883 阅读 · 3 评论 -
ebpf 网络过滤器实践
ebpf 网络过滤器的实践原创 2022-12-18 23:13:21 · 990 阅读 · 0 评论 -
关于ebpf 的co-re
底层库依靠的是libbpfkernel代码include/uapi/linux/bpf.h解释了`CO-RE`的原理。clang有内置标记`__attribute__((preserve_access_index))`(等效于`__builtin_preserve_access_index`)。ebpf.c代码这样标记所有它需要访问的结构体。clang在对象ELF文件ebpf.o中为每个这样的访问生成一个`bpf_core_relo`。原创 2022-11-21 19:36:41 · 1291 阅读 · 2 评论 -
datadog ebpf模块 offset-guess.o 问题排查解决
offset-guess.o 模块是偏移量猜想的一个模块,我估计datadog这么做的原因是处于linux内核兼容性的原因,但是这种兼容性的代码为什么会在这里出现问题呢?定位到出问题的文件是/opt/datadog-agent/embedded/share/system-probe/ebpf/offset-guess.o。我安装的是clang-14,所以我需要把/usr/bin下面的clang 替换为和我的主机兼容的。我是ubuntu系统,所以我只需要安装和我主机兼容的clang 和llvm版本就行了。原创 2022-11-04 16:09:31 · 581 阅读 · 0 评论 -
如何使用c语言开发ebpf程序
最近开始陆续负责ebpf相关的项目,于是对ebpf相关知识内容进行复习。ebpf的优势是避免了痛苦的kernel开发工作,如果没有ebpf之前,我们如果想做内核可视化,必须要开发kernel的驱动,但是如果我们有了ebpf,开发的程序就可以很好的和kernel隔离开,避免了kernel的崩坏。开发ebpf程序你需要掌握哪些知识1、linux 内核相关的知识2、掌握常用的ebpf 工具3、熟悉libbpf4、有一定c语言开发功底。原创 2022-10-28 01:04:17 · 1543 阅读 · 2 评论 -
shutdown 和close的区别
1、shutdown 不会关闭掉fd,但是会忽略fd的计数器,直接关闭掉链接。2、close 会减少fd计数器,当为0的时候会close掉链接和fd。3、close调用后会直接从epoll中删除,不会触发epoll事件。4、shutdown后会触发epoll事件。5、shutdown是会冲刷缓冲区的。5、close会直接丢弃缓冲区。原创 2022-09-29 15:02:31 · 395 阅读 · 0 评论 -
汇编常用的开发工具
汇编常用工具原创 2022-06-19 16:28:24 · 4108 阅读 · 0 评论 -
关于cgroup 学习
cgroup,cgroupv2,如何使用cgroupv2,c++使用cgroup原创 2022-08-14 19:08:02 · 1366 阅读 · 0 评论 -
dex 文件实践分析前篇---drizzleDumper知识储备
想写这系列的文章起源还是看到了linux内核之旅里的dex文件格式介绍,所以打算写一篇回顾笔记,回顾一下这块内容。后续会通过项目https://github.com/DrizzleRisk/drizzleDumper分析一下dex的实践应用。一、dex文件格式...原创 2022-05-17 23:52:34 · 334 阅读 · 0 评论 -
从linux 源码角度去解决一个hard link 问题
比较晚了,大概2个月没写c++了吧,最近一直又在写golang了,但是如果你要问我最喜欢的语言排行,那这个顺序肯定是c++ > php > golang > pythonphp尽管经常被黑,但是自己每个周吧,都会用php写写网站后台;毕竟工作久了,你会发现语言根本无所谓的,只是一个工具。技术也许真的只是个青春饭,但是当下还是在做;再就是兴趣,我从初中就讨厌语文,英语,喜欢数学;数学就是这样1+1 = 2;结果总是固定的,不像语文黑的说成白的,白的也可以说成黑的这就是我讨厌语文的原创 2022-05-12 23:33:18 · 442 阅读 · 0 评论 -
当cpu分析遇上bpf(上)
cpu很多时候承担着运行指令码的重要作用,在linux内核中承担着cpu调度、暴露系统调用、处理中断等功能。cpu调度器系统内核需要在不同程序之间共享cpu资源。cpu调度器,可以 通过多个状态展示出队列的运行状态。...原创 2022-04-17 21:58:58 · 712 阅读 · 0 评论 -
深入理解linux内核的中断和信号
linux中断原创 2022-03-29 16:23:19 · 1319 阅读 · 0 评论 -
bpftrace 组件
bpftrace原创 2022-03-24 19:08:31 · 2393 阅读 · 0 评论 -
c++完成mysql 异步客户端
如何用c++完成一个mysql 的客户端?代码还需完善,但是核心代码在这里了注意几个点:异步接口:mysql_real_connect_nonblockingmysql_real_query_nonblockingmysql_store_result_nonblockingmysql_fetch_row_nonblocking配合异步io,epoll 可以很轻松完成,异步返回结果/* state of an asynchronous operation */enum原创 2022-02-12 22:11:45 · 2179 阅读 · 0 评论 -
数据结构和算法分析--c语言描述堆
一、二叉堆优先队列至少有两个数据模型 DeleteMin以及Insert优先队列的实现是一个二叉堆,是一个数组,左子元素是 2n,又子元素是2n+1,树的高度是O(logN),插入元素遵循上滤,弹出元素遵循下滤上滤:下滤:代码实现:#include <cstdlib>#include <iostream>#include <cstring>#include <memory>#de...原创 2022-01-31 12:40:40 · 1653 阅读 · 0 评论 -
第十二章---内存管理 学习和总结
今年其实看了很多这方面的书了,已经对面上的东西很熟了,一年也快过去了,发现有点像大学时候看的高数吧,那些高数书中的内容都是那么的像,这篇笔记来自《linux内核的设计和实现》,当然这第十二章讲的和《linux设备驱动》第八章的内存分配我觉得其实是完全一样的,既然两个章节是完全一样的内容,两位作者都花了一个章节来介绍这块内容我认为还是有必要取学习和思考的。1.页页基本是linux内存管理最基本的单元了32位系统页的大小一般是4k,64位系统页的大小一般是8k...原创 2021-12-25 17:05:44 · 971 阅读 · 0 评论 -
linux内核设计核实现第四章---进程调度笔记
参考网址:Linux CFS调度器之队列操作--Linux进程的管理与调度(二十七) - 云+社区 - 腾讯云4.1多任务多任务处理器上,能让多个进程处于阻塞或者睡眠状态,实际上不被调度,直到被唤醒多任务操作系统分为抢占和非抢占两种多任务方式,linux是公平调度。非抢占模式除非进程主动让出(yeild)否则会一直被执行,不会让出,但是绝大多操作系统是抢占式的。4.2 linux进程的调度时间片调度,通过alrm 闹钟信号/***************原创 2021-11-27 20:31:46 · 891 阅读 · 0 评论 -
istio-proxy性能洞察之路---性能调研的终点、调优之路的出发点
最近配合公司落地 service mesh,整体架构采用了istio 的部署架构,但是最近对envoy的sidecar做了压力测试,sidecar的性能是十分的差说下istio-proxy是istio社区对envoy做了插件,包装成了istio-proxy,git目录是https://github.com/istio/proxy落地istio之后我们对istio-proxy性能进行了压测,每年技术大会演讲的envoy做sidecar在我们压测下,是那么单薄,显得差强人意,下面公布我们架构组原创 2021-11-18 21:07:25 · 2914 阅读 · 1 评论 -
linux内核设计和实现第三章节-----进程管理
前言:为什么要学习linux内核,随着ebpf的深入,对linux内核的熟悉程度,将会直接决定我们的kprobe的使用情况,尽管linux内核已经帮我们通过map定义了钩子参考文献:<<linux内核设计和实现>>参考网址:linux内核线程_huangweiqing80的博客-CSDN博客_内核线程3.1 进程进程一般包括:可执行程序的代码,像打开的文件、挂起的信号,内核内部处理数据,处理器状态,一个或者多个具有内存映射的内存地址空间以及一个或者多个原创 2021-11-14 23:51:11 · 1315 阅读 · 0 评论 -
ebpf c 学习
前段时间开始学习ebpf,今晚上整理下来吧,马上12点了,整理晚睡觉,写下笔记感觉整个人都平静下来做笔记的视频是linux内核社区的那群大学生的视频真的不错:BPF C编程入门_哔哩哔哩_bilibiliebpf的官网:eBPF - Introduction, Tutorials & Community Resourcesebpf 的demo 其实在linux 内核源码里有很多例子,对我们学习内核知识是非常好的,遇到不会的知识点可以去看linux 内核的设计核实现^_^。原创 2021-11-13 19:52:59 · 3020 阅读 · 3 评论 -
算法基础知识回顾--排序概览
一、数据结构回顾数据的逻辑结构可以分为线性结构、非线性结构线性结构又可以分为:线性表、栈、队列、广义表、字符串、数组非线性结构:数和图数据存储结构:顺序存储和链式存储数据的运算方法:增删改查排序二、排序概述二分排序必须要有顺序排序方法的分类按存储介质:内部排序、外部排序比较器个数:并行排序和串行排序主要操作:比较排序和基数排序辅助空间:原地排序和非原地排序稳定性:稳定排序和非稳定排序自然性:自然排序和非自然排原创 2021-10-19 00:23:00 · 171 阅读 · 0 评论 -
envoy网络模型源码解析
一、envoy主入口的运行envoy 源码运行的主入口的运行流程我们看到envoy运行的主要核心入口在InstanceImpl::initialize,InstanceImpl::initialize到底做了什么呢?在源码里有了明确注释(很多功能工作中还没接触,所以也不知道是做什么用的)1.加载静态配置 解析yaml配置文件到bootstrap。注意envoy的bootstrap都对应的都是protobuf文件// Handle configuration that need.原创 2021-10-09 00:06:47 · 1094 阅读 · 0 评论 -
优先队列学习
#include <stdio.h>#include <stdlib.h>#include <iostream>typedef struct key_value_struct KeyValue;struct key_value_struct { int _key; void *value; void (*freevalue)(void *);};#define PRIORITY_MAX 1#define PRIORIT.原创 2021-10-03 09:20:49 · 114 阅读 · 0 评论 -
cmake + vscode + docker 远程调试linux程序
1.安装docker首先下载dockerhttps://www.docker.com/get-started2.编写dockerfileFROM ubuntu:20.04ENV DEBIAN_FRONTEND noninteractive## Update cache and upgrade imageRUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade#原创 2021-08-08 13:55:47 · 1002 阅读 · 0 评论 -
linux驱动中的中断
中断定时器中断原理定时器再硬件上也可以用作中断,定时器接收一个时钟输入,当时钟脉冲来时,当前计数加1,并和预先设置的计数比较,如果相等,证明计数周期满,产生定时器中断,并复位计数值中断是一个信号,当硬件需要产生处理器对它的关注就会产生中断如果想看到中断,我们需要注册中断处理程序,用request_irqfree_irq释放中断处理程序int request_irq(unsigned int irq, irq_handler_t handler, unsigned long ..原创 2021-07-11 17:13:57 · 369 阅读 · 0 评论 -
linux内核中的延迟和定时器
内核中的延迟和定时器1. 关于延时忙等待while(time_before(jiffies, j1)) cpu_relax();这种代码会占用大量内核cpu运行时间,是不好的方式超时等待有两个重要的api#include <linux/wait.h>long wait_event_timeout(wait_queue_head_t q, condition, long timeout);long wait_event_interrupt_timeou原创 2021-06-30 20:02:35 · 554 阅读 · 1 评论 -
jiffies 的使用
jiffies 的使用每一个技术点都是要靠自己对着书来一步步实践#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/cdev.h>#include <linux/fs.h>#include <linux/uaccess.h> /*原创 2021-06-25 15:10:46 · 794 阅读 · 0 评论 -
初识linux内核中的jiffies计数器
1.度量时间差赫兹是什么意思赫兹是国际的频率单位,是电磁波的性质,是德国物理学家‘海因里希·鲁道夫·赫兹’,是他首先证实了电磁波的存在。已经发布的linux系统一般是50~1200,常见的HZ值默认是1000,软件仿真器默认是24jiff是瞬间的意思使用jiffies计数器获取当前时间#include <linux/jiffies.h>unsigned long j, stamp_1, stamp_half, stamp_n; j = jiff..原创 2021-06-22 22:48:02 · 616 阅读 · 2 评论 -
tcp网络编程如何避免time wait
做一个简单的服务器程序,accept后立刻关闭套接字extern "C" {#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>}#include <iostream>#include <algorithm>#include <cstrin原创 2021-06-16 20:34:50 · 234 阅读 · 2 评论 -
提取不重复的整数
描述输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是0。输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数...原创 2021-06-10 18:30:37 · 128 阅读 · 0 评论 -
合并表记录
描述数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述:先输入键值对的个数然后输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)#include <map>#include <iostream>using namespace std;int main(){ int number; std::map<原创 2021-06-10 17:42:47 · 84 阅读 · 0 评论 -
获取近似值
描述写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。输入描述:输入一个正浮点数值输出描述:输出该数值的近似整数值#include <iostream>using namespace std;int main(){ double number; while(cin >> number) { number += 0.5; std::co.原创 2021-06-10 16:46:38 · 127 阅读 · 0 评论 -
刷题质数因子
描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为22335)最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入:180复制输出:2 2 3 3 5结题:...原创 2021-06-10 16:37:53 · 65 阅读 · 0 评论 -
字符串分隔
描述•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入多次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组示例1输入:abc123456789复制输出:abc000001234567890000000复制...原创 2021-06-10 13:48:07 · 274 阅读 · 0 评论 -
明明的随机数
描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。.原创 2021-06-10 13:03:16 · 107 阅读 · 0 评论 -
计算某字母出现次数
描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写,字符串长度小于500。输入描述:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。输出描述:输出输入字符串中含有该字符的个数。...原创 2021-06-10 10:03:37 · 132 阅读 · 0 评论 -
字符串最后一个单词的长度
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。...原创 2021-06-10 09:45:53 · 112 阅读 · 0 评论 -
IO多路复用的技术内幕
前言多路复用的场景自始至终都是为了最大限度减少用户和内核态之间的切换,充分利用多核时代下的cpu,是对于编写高性能网络编程0阻塞IO的唯一途经,是IO阻塞的克星,我们的php和java底层都大量使用了该技术。借鉴书籍《linux设备驱动程序》《unix高级环境编程第三版》《unix网络编程卷1》《linux系统编程》《c++多线程服务端编程》《linux内核设计和实现》一、休眠是高性能网络编程的绊脚石1.驱动编程中,重要的可中断简单休眠函数//初始化等待队列init_waitqueu原创 2021-05-20 01:12:53 · 479 阅读 · 0 评论 -
深入理解linux内核的阻塞和非阻塞
深入理解linux内核的阻塞和非阻塞感悟这里还是要写下笔记,再次复习知识点,一遍遍的复习,一遍遍的加深,可能工作中用不到,精力有限也很难再去换一门语言去学习了,但是工作问题不大,这几天通过学习这个再巩固加深知识点吧!!linux 内核的阻塞和非阻塞操作在<linux/fs.h>中,记载着非阻塞标志位filp->f_flags的O_NONBLOCK,这个标志位还有一个别的名字叫做O_NDELAY标志位阻塞操作出现的场景1.调用read时候套接字缓冲区里没有数据可以读,或者小于co原创 2021-04-02 00:42:32 · 1082 阅读 · 0 评论 -
linux内核的休眠
linux内核的简单休眠本次学习资料,来自linux设备驱动程序第七章节高级字符串设备驱动第149页什么时候会发生睡眠当我们去对linux中一个不可读的描述符进行read调用,或者对一个缓冲区已经满了的套接字进行write的时候都会发生睡眠,也就是我们说的IO阻塞,linux进程会陷入休眠状态。关于休眠的简单介绍一个进程发生休眠会发生什么操作系统会把这个进程标记为休眠状态,从调度器的运行队列移走,只有发生一些情况,进程状态不再是休眠状态,才会被cpu调度。如何让一个进程安全的进入休眠?1.第原创 2021-03-18 00:33:08 · 884 阅读 · 0 评论