![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux/Unix
文章平均质量分 66
造夢先森
一定要努力努力,永不放弃,才可以改变世界,改变自己~
展开
-
LVS FULLNAT模式
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux标准内核的一部分。LVS是一种叫基于TCP/IP的负载均衡技术,转发效率极高,具有处理百万计并发连接请求的能力。使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.很好的可伸缩性(Scalability)很好的可靠性(Reliability)很好的可管理性(Manageability)。原创 2022-10-16 10:53:51 · 1475 阅读 · 0 评论 -
【端口复用】修改Linux内核参数,解决TCP连接中的TIME-WAIT socket
如果能够在客户端程序主动关闭socket之前,让该socket的接收队列中仍保留一些数据(至少要有多余的一个字节的数据),然后调用close关闭,那么上述的无法向服务端创建新的socket连接的情况将不会出现。这是因为当socket的接收队列中仍有数据未被应用程序读走就被强行关闭时,操作系统(至少在笔者验证过的操作系统上的确如此)的TCP/IP协议栈驱动程序会在底层主动向服务端发送一个要求结束TCP连接的控制包,并将该TCP包头的flag控制字段中的RESET位置位,从而迅速结束了此TCP连接。原创 2022-09-14 14:36:16 · 2272 阅读 · 0 评论 -
【dpdk专题】
DPDK实践一:技术介绍 + 编译运行DPDK实践二:用TestPMD测试DPDK性能和功能原创 2022-06-04 19:41:36 · 933 阅读 · 0 评论 -
【性能专题】
性能调优 – 系统篇性能调优 – 语言篇性能调优 – 工具篇(testpmd、ftrace、perf)网络测试工具–Iperf、Netperf 、MZ用户态协议栈f-stack原创 2022-06-04 19:33:45 · 189 阅读 · 0 评论 -
基于dpdk的用户态协议栈f-stack
fstack是腾讯基于dpdk开发的一套用户态协议栈框架。基本介绍:https://cloud.tencent.com/developer/article/1005179代码仓库:https://github.com/F-Stack/f-stack其他资料:https://cloud.tencent.com/developer/column/1275https://cloud.tencent.com/developer/article/1005179...............原创 2022-06-02 14:02:27 · 706 阅读 · 0 评论 -
cache和内存
1)cache预取2)cache一致性3)TLB问题和大页4)DDIO原创 2022-06-02 10:17:36 · 4254 阅读 · 0 评论 -
Linux函数调用劫持方法
Ring3函数调用劫持:基于环境变量LD_PRELOAD的动态库劫持 在Linux中,动态库加载的时候,会按照以下顺序进行搜索:LD_PRELOAD >LD_LIBRARY_PATH >/etc/ld.so.cache>/lib>/usr/lib方法原理:通过LD_PERELOAD设置编写自己的so库函数在原正常函数前执行例子:劫持fputs()函数:#include<stdio.h>#include<dlfcn.h> //用于搜索原函数/*原创 2022-05-18 10:59:41 · 507 阅读 · 0 评论 -
性能调优 -- 系统篇
BIOS原创 2021-09-17 14:51:07 · 751 阅读 · 0 评论 -
性能调优 -- 语言篇(C)
switch-case和if-else的效率比较https://blog.csdn.net/wyk19950704/article/details/50983903在for循环体内定义变量的效率分析https://www.cnblogs.com/avin/p/7458063.html原创 2021-07-01 20:09:59 · 261 阅读 · 0 评论 -
性能调优 -- 工具篇(testpmd、ftrace、perf)
一、perf获取数据1)对整体CPU分析: perf top2)对指定进程分析cpu占用: perf top -p pid3)对指定进程设置采样时间和采样频率:perf record -g -F 99 -p “pid” – sleep 60 //持续采样时间60s,采样频率99次/s二、数据获取./perf report //查看生产的数据三、如果觉得可视化效果不好,可以用火焰图进一步展示1)perf script -i perf.data >perf.unfold //将生成数据解析原创 2021-06-11 18:03:41 · 3343 阅读 · 0 评论 -
TCP DUP ACK抓包分析
vm client:172.18.21.57vm server:172.18.42.13在 vm client 执行 wget 从 server 下载文件 并进行抓包:分析:1,No.50 为server发送的数据,收到了Seq=113587,Ack=660, Len=2576。那么client回复的Ack=113587+2576=116163. 即No.51, Seq=660,Ack=116163, Len=02,同时116163也是期望的下一个数据的Seq. 即收到了No.52, Se原创 2021-05-09 17:35:17 · 28472 阅读 · 2 评论 -
virtio设备中断分析
1.中断两任务:1).当设备的配置信息发生改变(config changed),会产生一个中断(称为change中断),中断处理程序需要调用相应的处理函数(需要驱动定义)。2).当设备向队列中写入信息时,会产生一个中断(称为vq中断),中断处理函数需要调用相应的队列的回调函数(需要驱动定义)。2.三种中断处理方式:1).不用msix中断,则change中断和所有vq中断共用一个中断irq。中断处理函数:vp_interrupt。( vp_interrupt函数中包含了对change中断和vq中断原创 2021-04-28 11:59:25 · 2126 阅读 · 0 评论 -
Centos7下载linux内核源码
最近碰到cenos7.4虚拟机多队列收包时中断都跑到到一个cpu上的问题。ls -l /sys/class/net 查看对应virtio号, 然后cat /proc/interrupts,发现只有一个virtio3-virtqueues。该问题可能是后端触发,但是需要从前端入手,所以需要下载虚拟机源码分析下:1.查看centos7的版本2.下载对应版本的rpm包到官方网站 https://vault.centos.org/这里选择目录 7.4.1708接着进入目录 os然后 Source原创 2021-04-28 09:46:51 · 4100 阅读 · 0 评论 -
内存错误检测工具-AddressSanitizer(ASAN)
ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持。因此GCC 4.8以上版本使用ASAN时不需要安装第三方库,通过在编译时指定编译CFLAGS即可打开开关。之前介绍过一款传统的内存问题检测工具Valgrind :https://blog.csdn.net/qq_15437629/article/details/79264600用过 Valgrind 的朋友应该都清楚,其会极大的降低程序运行速度,大约降低10倍,而原创 2021-03-06 14:39:51 · 14269 阅读 · 4 评论 -
Valgrind使用说明
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试,分析,或测试等。Valgrind可以检测内存泄漏和内存越界,还可以分析cache的使用等,灵活轻巧而又强大。 一 Valgrind概观Valgrind的最新版是3.2.3,该版本包...原创 2018-02-05 21:19:39 · 906 阅读 · 0 评论 -
gdb进阶操作
gdb入门操作:https://blog.csdn.net/qq_15437629/article/details/77587652最近遇到一些奇怪的core,可能是踩内存或是use after free,这种问题不太好定位,但是可以通过core的内存信息进行分析。首先介绍 info thread...原创 2021-02-28 17:27:05 · 1728 阅读 · 0 评论 -
nm命令中符号类型详解
符号类型说明A该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。B该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中C该符号为common。common symbol是未初...原创 2021-01-07 17:14:37 · 2481 阅读 · 1 评论 -
Linux errno详解
查看系统中所有的errno所代表的含义,可以采用如下的代码:/* Function: obtain the errno string* char *strerror(int errno)*/#include <stdio.h>#include <string.h> //for strerror()//#include <errno.h>int main(){ int tmp = 0; for(tmp = 0; tmp <原创 2020-08-20 14:36:06 · 1512 阅读 · 0 评论 -
怎么查看头文件、so库里和函数的对应关系
1,查看某个so在Linux(Ubuntu)系统下的路径ldconfig -p | grep xxx.so2,查看某个 so库里有什么函数nm -D xxx.so或objdump -tT xxx.so如果输出符号T,则函数正常导出 如果输出符号U,则函数为定义 3,怎么查看头文件和库的对应关系?rpm -qf /usr/include/pthre...原创 2018-08-25 21:20:17 · 5898 阅读 · 0 评论 -
linux系统进程状态查看命令
使用系统命令top即可看到如下类似信息:说明如下:top后按3即可选择相应的numa查看对应的cpu信息:cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st意义如下:us: is meaning of &amp;amp;amp;amp;amp;amp;quot;user CPU time&amp;amp;amp;amp;amp;amp;qu原创 2019-01-06 21:06:51 · 11377 阅读 · 0 评论 -
Linux系统挂载windows共享目录报错mount error(121):remote error I/O error
经查,这是由于NFS(Network File System)即网络文件系统服务器有多个版本,V2、V3、V4。而且各版本同时运行,因此挂载时需要说明版本号mount -o username='pkpk8',vers=2.1 //9.2.65.120/test /mnt/windows...原创 2018-03-15 23:00:45 · 4374 阅读 · 0 评论 -
apache无法解析php解决方法
在配置文件http.conf(也有可能是apache2.conf)中加入php的设置,添加如下语句: LoadModule php5_module /usr/lib/apache2/modules/libphp5.so AddType application/x-httpd-php .php AddType application/x-httpd-php-source .php原创 2015-07-23 22:15:09 · 2130 阅读 · 1 评论 -
SCP传送文件时提示No ECDSA host key is known forx.x.x.x and you have requested strict checking.问题的解决办法
在使用SCP向其他设备传送文件时,打印如下错误:No ECDSA host key is known for x.x.x.x and you have requested strict checking.Host key verification failed.lost connection方案一是将/root/.ssh/known_hosts对应ip的那一行删除,但是有一种可能是...原创 2018-08-25 19:29:27 · 6851 阅读 · 1 评论 -
Linux进程状态解析 之 R、S、D、T、Z、X
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。Linux进程状态:R (TASK_RUNNING),可执行状态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行...原创 2018-08-18 19:53:18 · 1284 阅读 · 0 评论 -
Linux磁盘操作
df命令可以展示任何“mounted”文件系统的磁盘利用率。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。df 参数: 示例:$ df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/ubuntu-root 909G 565G 299G 66% /none原创 2017-10-21 12:16:20 · 940 阅读 · 0 评论 -
linux 如何查看硬盘大小,内存大小等系统信息及硬件信息
一、linux CPU大小 [root@idc ~]# cat /proc/cpuinfo |grep “model name” && cat /proc/cpuinfo |grep “physical id” model name: Intel(R) Xeon(TM) CPU 2.80GHz model name: Intel(R) Xeon(TM) CPU 2.80GHz model n原创 2016-06-07 09:38:34 · 34392 阅读 · 0 评论 -
OPenWrt挂载U盘
1,在Ubutun机器上插上u盘: fdisk -l #显示为 /dev/sdb1 umount /dev/sdb1 sudo mkfs.ext4 /dev/sdb1 对应挂在media目录下2,将u盘插上OpenrWrt交换机fdisk -l #显示为 /dev/sda1 mount -t ext4 /dev/sda1 /mnt/sda1/ #将其挂载到/mnt/sda1/目录下原创 2016-05-13 18:46:14 · 1352 阅读 · 0 评论 -
在Ubuntu上U盘文件只读且无法删除怎么办
我们在用ubuntu系统时,经常使用u盘来传送文件,却不知道为什么,你的优盘在window可以正常使用,但是到linux下文件就变成只读的方式了,没法进行复制、粘贴等常规操作。针对这样的问题,如何解决呢? 最好在root用户下执行如下命令: (1) 先执行此命令 tail -f /var/log/syslog (2) 再插上 u盘 (只读文件权限的u盘) (3) cd /mnt原创 2016-03-11 10:45:01 · 3212 阅读 · 1 评论 -
Linux下搭建Apache+php+MongoDB开发环境
一.下载php5+apache2:sudo apt-get install php5sudo apt-get install apache2默认的index.html页面在 /var/www/ 目录下。使用如下代码查看php相关信息: <html><head></head><body><?phpphpinfo();?></body></html>二.mongodb下载安装 为mo原创 2015-07-15 17:43:37 · 1633 阅读 · 0 评论 -
Linux常用操作
常用操作:切换工作区: Ctrl+Alt+方向键截屏: (1)整个屏幕:Prtc (2)选择部分截屏:Shift+Prtc查看并杀死6633端口占用进程:netstat -anp|grep 6633kill 2345文件操作:ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前原创 2015-06-02 16:50:35 · 453 阅读 · 0 评论 -
sudo: must be setuid root 错误解决方法
首先,进入recovery模式。启动时按ESC键,有的是启动时按shift键,说法不一,都可以试试。注意,可能一次不能成功进入recovery模式,可以多尝试几次;按enter键进入recovery模式后,在出现的界面中选择root选项,enter后进入root用户系统;在该系统中执行:ls -l /usr/bin/sudochown root:root /usr/bin/sudochmod原创 2015-07-15 10:16:53 · 1741 阅读 · 0 评论 -
vim配置及插件安装管理
配置文件Vim存在多个配置文件vimrc,比如/etc/vimrc,此文件影响整个系统的Vim。还有~/.vimrc,此文件只影响本用户的Vim。而且~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置。这里我们只修改~/.vimrc文件。如果没有,在用戶主目录下建一个文件.vimrc。插件安装在用戶主目录下的~/.vim目录下,解压后会有~/.vim/plugin 和 ~/.vim/do原创 2015-05-31 00:56:18 · 3694 阅读 · 0 评论 -
进程、线程、协程和队列
1.简述进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,通俗讲就是自定义一段程序的执行过程,即一个正在运行的程序。线程是进程的基本单位,又称为轻量级进程。 不同的进程在内存中会开辟独立的地址空间,默认进程之间的数据是不共享,线程是由进程创建,所以处在同一个进程中的所有线程都可以访问该进程所包含的地址空间,当然也包含存储在该空间中的所有资源。原创 2018-01-21 13:28:17 · 453 阅读 · 0 评论 -
高级bash/shell脚本编程指南
简介Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell。shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。它可以通过将系统调用、公共程序、工具和编译过的二进制程序”粘合“在一起来建立应用,这是大多数脚本语言的共同原创 2017-10-21 10:30:45 · 820 阅读 · 0 评论 -
gdb调试指南
gdb常用命令gcc -g hello.cgdb ./a.outl // list,显示函数start // 开始逮捕调试,显示即将运行的行n // next,运行到下一行,到函数时不会进入函数s // step,运行到下一行,到函数时进入函数p a // 显示函数内a的值bt原创 2017-08-25 22:54:13 · 897 阅读 · 0 评论 -
shell 进阶
比较参数个数: $#整数比较 -eq 等于,如:if [ &amp;quot;$a&amp;quot; -eq &amp;quot;$b&amp;quot; ] -ne 不等于,如:if [ &amp;quot;$a&amp;quot; -ne &amp;quot;$b&amp;quot; ] -gt 大于,如:if [ &amp;quot;$a&am原创 2018-07-15 08:28:02 · 215 阅读 · 0 评论 -
tcpdump及wireshark介绍
一,tcpdumptcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上。 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包1.1, tcpdump选项它的命令格式为:tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -...原创 2018-06-18 18:18:39 · 675 阅读 · 0 评论 -
Linux命令大全(手册)
http://man.linuxde.net/原创 2018-05-06 18:02:44 · 4233 阅读 · 3 评论 -
rpmbuild及 ./configure && make && gcc学习笔记
rpm简介常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这里我们是以其软件包的格式来划分的,这两类系统分别提供了自己的软件包管理系统和相应的工具。类RedHat系统中软件包的后缀是rpm;类Debian系统中软件包的后缀是deb。另一方面,类RedHat系统提供了同名的rpm命令来安装、卸载、升级rpm软件包;类Debian系统同样提供了dpkg命令...原创 2018-04-21 22:42:04 · 2062 阅读 · 0 评论 -
互斥锁 、 自旋锁、读写锁和RCU锁
互斥锁 mutex:在访问共享资源之前对进行加锁操作,在访问完成之后进行解锁操作。 加锁后,任何其他试图再次加锁的线程会被阻塞,直到当前进程解锁。 如果解锁时有一个以上的线程阻塞,那么所有该锁上的线程都被编程就绪状态, 第一个变为就绪状态的线程又执行加锁操作,那么其他的线程又会进入等待。 在这种方式下,只有一个线程能够访问被互斥锁保护的资源。自旋锁spinlock:...原创 2018-01-20 20:40:46 · 4591 阅读 · 1 评论