技术沉淀分享

Thinking will not overcome fear but action will.

RDT技术初探之使用cpuid指令获取MBA信息

RDT技术初探之使用cpuid指令获取MBA信息

MBA即Memory Bandwidth Allocation的缩写,即内存带宽分配,是针对LLC隔离的一项技术,也是RDT(Resource Director Technology)的一项指标。 关于RDT技术可参考https://github.com/intel/intel-cmt-cat/wiki/Useful-links 其中,RDT技术需要除了需要硬件支持之外,还需要linux...

通过libvirt代码分析GHashTable

通过libvirt代码分析GHashTable

本文通过阅读libvirt源码作为入口,分析了GHashTable数据结构以及初始化和插入过程。 在阅读libvirt代码的define一个domain的时候发现有下面一段代码: static virDomainObjPtr virDomainObjListFindByUUIDLocked(virDomainObjListPtr doms, ...

一次centos8上ethtool显示问题

一次centos8上ethtool显示问题

在新机房发现虚拟机的宿主机获取网卡基础信息时显示的是无效数据,如下图所示: 新机房虚拟机的宿主机使用的镜像版本是CentOS Linux release 8.4.2105,kernel是5.10.26-2,经IDC团队排查,和内核版本无关系,但和ethtool版本有关系,centos8的默认带的是5.8版本,使用低版本的ethtool就没问题。 我下载了ethtool的源码包,分别有...

一次ssh命令通道执行任务失败的原因分析

一次ssh命令通道执行任务失败的原因分析

最近业务使用ssh命令通道对K8S的机器执行命令时出现失败,从失败内容看是io timeout,应该是访问超时。具体错误如下: 因此,通过抓包分析发现: 三次握手竟然是成功的,但握手成功之后,没有传输数据,而是大约5秒之后执行四次挥手,但是在server端发送了RST报文给client,导致出现了i/o timeout。 随之产生了疑问:为什么K8S的机器执行ssh通道会失败 ...

记一次dns网络不通排查过程

记一次dns网络不通排查过程

今天在测试机安装yum源,发现一直报错 从错误信息来看是解析一个域名失败,查看了这个域名,对应是公司内部域名,通过dig发现确实没有任何响应,难道是dns服务器有问题?不太可能,只有这一台机器有问题,因此初步可以断定是这台机器有问题导致的。 我们strace看下到底是哪里有问题 从strace结果可以看出在访问172...:53时timeout了,172...:53是dns服务端地...

linux下proc文件系统写过程

linux下proc文件系统写过程

在之前文件系统系列文章中,阐述过vfs相关知识点,这篇文章通过工具展示虚拟文件系统-proc的读写过程(主要以写为例进行阐述),从而了解proc文件系统和其他文件系统的不同之处。同样,以测试代码为主展开讲解。 测试代码 #include <stdio.h> #include <unistd.h> #include<stdlib.h> #include&...

聊聊linux内存的watermark

聊聊linux内存的watermark

linux内存的watermark又称为水位,是linux内存管理的一个知识点,水位决定了内存的使用情况,以及系统是否进行内存回收以及如何回收的策略问题。 内存水位源码位于mm/memory_hotplug.c的init_per_zone_wmark_min()函数以及mm/page_alloc.c的min_free_kbytes_sysctl_handler()函数中。其中min_fre...

linux下程序的虚拟地址由来

linux下程序的虚拟地址由来

日常编写程序之后,在运行的时候都有对应的虚拟地址空间,例如在程序crash或调试的时候都能看到一串十六进制的数字,这些十六进制的数字通常都是程序对应的虚拟地址,那虚拟地址是怎么来的呢? 首先我们编写一个简单的程序 #include <stdio.h> int func1(int a, int b) { return a+b; } void func() { in...

linux内存管理之buddy算法

linux内存管理之buddy算法

这次主要分析linux内核内存管理的buddy算法,中文名叫伙伴系统。 在之前的文章网卡收包软中断下内核内存分配逻辑以及聊聊kmalloc机制都有阐述内存分配逻辑,即alloc_pages。其中buddy算法就是alloc_pages的一部分: //rmqueue函数主要实现了伙伴系统算法逻辑 page = rmqueue(ac->preferred_zoner...

linux下执行一个程序,内核发生了哪些事情

linux下执行一个程序,内核发生了哪些事情

当我们登陆到linux控制台下,执行一个命令或启动一个程序时,系统会生成对应的进程,如果是非常驻进程,则可能执行完命令或程序之后进程就退出了;如果是常驻进程,我们可以通过ps能看到对应的进程信息(例如pid、ppid、status等)。那么系统是如何启动一个程序的呢?我们编译好的二进制文件是如何被启动的呢?启动的时候发生了哪些事情?今天将详细阐述这些未知内容。 首先我们编译一个简单的二进制...