![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c
文章平均质量分 81
Andrew Yang
这个作者很懒,什么都没留下…
展开
-
DPDK19.05 rte_flow 的 rss 支持情况
DPDK19.05 rte_flow 的 rss 支持情况:结论实验和查看源码得出:driversupportssupportsigbrssntuple + queueixgberssntuple + queuei40eeth + rss, vlan + rssntuple + queue证据igb, ixgbe 都没有看到 ntuple 和 rss 组合使用:static intigb_parse_rss_filter(struct rte_原创 2021-07-01 14:33:08 · 919 阅读 · 2 评论 -
dpdk 不完全笔记: rte_rdtsc()
dpdk 不完全笔记: rte_rdtsc()rte_rdtsc() 返回的是自开机始CPU的周期数。rte_rdtsc() 只是获得tsc寄存器的值。每经过一个时钟周期,tsc寄存器就自动加1。如果 CPU MHz为1600,那么tsc的1就是1/1600/1000/1000的时间。rte_get_tsc_cycles() 与 rte_rdtsc() 功能相同。rte_get_tsc_cycles() 内部就是调用 rte_rdtsc()。rte_rdtsc_precise() 返.原创 2020-06-29 09:43:24 · 6897 阅读 · 1 评论 -
centos7 应用笔记: 使用 sparse 作静态检测
centos7 应用笔记: 使用 sparse 作静态检测sparse 是用于 C 语言的语法分析器,用以对 C 代码进行静态检查,它不但能够检查 ANSI C 并且还能检查具有 gcc 扩展的 C 。安装yum -y install sparse用于检测内核代码只需要在内核代码的 make 后加入 C=2 就可以了。sparse: make C=2 -C /lib/modules...原创 2020-02-19 22:28:42 · 258 阅读 · 0 评论 -
防火墙的桥和端口聚合
防火墙的桥和端口聚合防火墙有的时候,会放置到 两个 做了端口聚合的交换机之中。以下的测试,是比较 防火墙做成多桥,和聚合之后再做桥的区别。测试 1 防火墙单桥拓扑 +--------+ a1 b1 +--------+ c1 d1 +--------+ | |-----------...原创 2019-11-06 17:27:26 · 3100 阅读 · 0 评论 -
DPDK offload应用笔记
查看网卡 offload 功能使用 ethtool使用 ethtool 可以看一般的 网卡。ethtool -k <link_name>dpdk 的做法在 dpdk 中可以使用以下函数来查看是否支持 offload 功能。ixgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev...原创 2019-11-05 17:47:25 · 3153 阅读 · 0 评论 -
82599ES 光口无法通过大包的问题记录
问题参考 DPDK 例子程序 ip_fragment.c 来实现分片。无论 I350 电口 还是 82599ES 光口,小包都是可以通过的。但是在大包的时候,82599ES 光口就有问题。场景I350 电口82599ES 光口启用 tx checksum offload小包可以通过小包可以通过启用 tx checksum offload小包可以通过小包可...原创 2019-11-05 15:21:29 · 2029 阅读 · 0 评论 -
Real-time signal
Real-time signal信号为 34 或者以上的信号。为 Real-time signal。他们默认的动作也是退出程序。如果你用 gdb 来捕捉的话,会看到Program received signal SIG34, Real-time event 34. 如果你的程序是用 systemd 来管理的。那么 使用 journalctl -u ${service_name} 就可...原创 2019-10-22 11:19:22 · 1240 阅读 · 0 评论 -
linux 信号处理函数的初始化
问题很多时候,进程之间会使用信号,来进行进程间通信。但是一般信号处理函数的默认动作,就是退出进程。如果进程,在初始化信号处理函数的过程中就接收到了信号,就会退出。因此正确的初始化信号处理函数,就显得很重要。一般的方法一般将初始化信号处理函数 real_time_signal_setup() 作为 main() 的第一个调用函数。就可以减少很多的问题。staticvoid signa...原创 2019-10-21 13:48:34 · 323 阅读 · 0 评论 -
linux 信号跟踪模块
linux 信号跟踪模块如果进程因为接收到信号被杀死,一般使用 gdb 可以捕捉到是什么信号。但是 gdb 却无法得知信号是谁发出的。这个时候,使用以下的 linux 信号跟踪模块,就可以在 dmesg 中,打印出是谁发送的信号。以下的代码。是在linux下信号跟踪:jprobe_signal的基础上修改过来的。其中添加了 name 参数,按照进程名称,过滤出信号接收进程。name 参...原创 2019-10-21 13:18:44 · 603 阅读 · 0 评论 -
Linux NAT 应用基础
Linux NAT 应用基础展示了 Linux NAT 应用基础 的三个例子SNAT 基础DANT 基础DANT + SNAT 混合SNAT 基础拓扑: LAN . WAN ...原创 2019-05-23 09:36:29 · 577 阅读 · 0 评论 -
systemtap 应用笔记
安装 systemtapyum -y install systemtap编译开关的设置用户态程序的编译并不是每个函数都可以探测的。只有使用了 -g 的调试开关。才可以支持探测。而且 -O 的优化开关,也会令到探测点减少。所以最好在编译的时候使用 -O0 -g3,关闭优化,还有使用高一点的调试级别。内核的编译要想编译一个支持Systemtap的内核,必须配置这些内核选项: ...原创 2019-06-06 09:37:54 · 496 阅读 · 0 评论 -
system call number 的定义文件
linux system call原创 2019-07-16 18:26:37 · 725 阅读 · 0 评论 -
strtok_r 分割字符串
strtok_r 的简单例子。注意, while 内部的 strtok_r 的第一个参数是 NULL.#include <stdio.h>#include <string.h>#include <stdlib.h>int main(int argc, char **argv) { int error_code = 0; if (argc <...原创 2019-07-29 15:01:13 · 219 阅读 · 0 评论 -
用于打印 malloc, free 调试信息的宏函数
用于打印 malloc, free 调试信息的宏函数。#include <stdlib.h>#include <stdio.h>void *__my_malloc(unsigned long size) { return malloc(size);}void __my_free(void *ptr) { free(ptr);}#define my_...原创 2019-07-30 17:51:50 · 584 阅读 · 0 评论 -
OSTEP第29章的问题解答
问题:QuestionsWe’ll start by redoing the measurements within this chapter. Usethe call gettimeofday() to measure time within your program.How accurate is this timer? What is the smallest interval i...原创 2019-08-13 13:50:35 · 440 阅读 · 0 评论 -
代码混淆工具 Stunnix-CXX-Obfus 的使用
代码混淆工具 Stunnix-CXX-Obfus 的使用下载和安装工具mkdir -p /home/cxx_obfus/wget http://stunnix.com/pad/trial-nomail/cxxo/Stunnix-CXX-Obfus-4.7-Linux-trial.zipunzip Stunnix-CXX-Obfus-4.7-Linux-trial.zip经过解压后:/...原创 2019-08-13 17:53:39 · 3796 阅读 · 2 评论 -
llvm, clang 和 scan-build 的安装和使用
使用 clang 编译简单使用 clang 编译clang 的 选项是 和 gcc 兼容的。所以最简单的用法就是:clang main.c在 Makefile 中使用 clang 编译。使用 $(CC) 或者 $(CXX) 可以通过 环境变量来选择 编译器。这样可以方便的指定编译器。main.c 内容:用于测试 的 C 程序。#include <stdio.h>...原创 2019-08-17 16:52:13 · 5303 阅读 · 0 评论 -
DPDK RSS 基础
1 rss 的作用rss 是网卡提供的分流机制。用来将报表分流到不同的收包队列,以提高收包性能。引用 Intel 82599 10 GbE Controller Datasheet 其中的 Section 7.1.2.8.1, RSS Hash Function 一节。The receive packet is parsed into the header fields used by ...原创 2019-09-24 15:04:14 · 5279 阅读 · 2 评论 -
显示出dpdk所有的编译选项
使用以下指令:make V=1可以显示出dpdk所有的编译选项。原创 2019-10-11 11:23:24 · 399 阅读 · 0 评论 -
Makefile 的打印。
方法一$(info your_text) : Information. This doesn’t stop the execution.$(warning your_text) : Warning. This shows the text as a warning.$(error your_text) : Fatal Error. This will stop the execution...原创 2019-10-11 11:32:22 · 157 阅读 · 0 评论 -
how_to_build_iptables_target_如何创建iptables_target
这是 如何创建 iptables(1.4.21) target 的笔记1. 如何得知当前的 iptables 的信息1.1. 查询当前的 iptables 的版本使用以下的指令可有查询当前的 iptables 的版本 iptables -V > iptables v1.4.21我的当前的 iptables 的版本为 iptables v1.4.21。1.2. 查找当前的 ip...原创 2019-02-17 17:39:06 · 1100 阅读 · 0 评论 -
Linux NAT 应用进阶(多链路输出+原路返回)
多供应商 + SNAT + 固定子网选路输出拓扑: LAN . WAN ...原创 2019-05-23 09:21:56 · 1998 阅读 · 0 评论 -
iptables cheat sheet
iptables四表五链及其支持的targettablePREROUTINGINPUTFORWARDOUTPUTPOSTROUTINGrawNOTRACK<NA><NA>NOTRACK<NA>mangle<all targets><all targets><all target...原创 2019-05-19 17:30:20 · 258 阅读 · 0 评论 -
dpdk_18_05 的例程使用
dpdk_18_05 的 helloworld 例程编译方法1: 编译并安装到 ./build/ (使用,后续都是以这个为例子) cd ${RTE_SDK}/examples/helloworld make方法2: 编译并安装到 ${dpdk_example} 路径 (暂不使用) cd ${RTE_SDK}/examples/helloworld make O=${dpdk_exa...原创 2019-03-24 22:54:08 · 1976 阅读 · 0 评论 -
dpdk_18_05 环境搭建
dpdk_18_05 环境搭建dpdk 下载 mkdir -p /home/dpdk_18_05 cd /home/dpdk_18_05 wget http://fast.dpdk.org/rel/dpdk-18.05.1.tar.xz tar xvf dpdk-18.05.1.tar.xz cd /home/dpdk_18_05/dpdk-stable-18.05.1添加环境变量...原创 2019-03-24 22:51:37 · 1400 阅读 · 0 评论 -
hugepage_note_大页内存笔记
1. HugePages内核支持内核需要打开以下编译开关。重新编译。 CONFIG_HUGETLBFS = y CONFIG_HUGETLB_PAGE = y2. HugePages内核启动参数HugePages内存页是不会被系统交换出去(swapped out)的。由于HugePages需要更大的连续物理内存,所以在系统启动时更容易获得更多的HugePages内存,并且...原创 2019-03-02 19:58:35 · 3588 阅读 · 0 评论 -
gcc_pack_and_align_内存对齐
gcc c 内存对齐的笔记和实验1. 数据类型&lt;数据类型&gt; 包括&lt;基础类型&gt;&lt;自定义类型&gt;&lt;基础类型&gt; 包括(unsigned) byte(unsigned) short(unsigned) int(unsigned) long(unsigned) lon原创 2019-02-17 17:01:03 · 963 阅读 · 0 评论 -
dpdk_lcore_note_DPDK_lcore_学习笔记
DPDK 16.07 lcore学习笔记文档保留了 markdown 格式。可以转为纯文本格式,方便在其他编辑器中使用语法高亮阅读代码。文档行文主要是提纲式的。如果阅读过程发现缺少了方向。请立刻回到章节的开首处,查询总体的函数调用图。1. DPDK核绑定的全局概览DPDK核绑定的相关函数,都集中在rte_eal_init()函数中调用:其中主要分为六部分:检测所有的cpu。解释...原创 2019-02-16 22:15:08 · 2658 阅读 · 1 评论 -
const and pointer in c
const in c原创 2015-01-08 14:14:11 · 255 阅读 · 0 评论 -
array and pointer in c
array and pointer in c原创 2015-01-08 14:49:44 · 335 阅读 · 0 评论 -
l2fwd + pdump 的 例程 和 `--base-virtaddr` 选项
l2fwd + pdump 的 例程修改 l2fwd 的 例程在 l2fwd 的 例程上添加 pdump 的功能:头文件引用 <rte_pdump.h>。signal_handler() 中添加 rte_pdump_uninit()。main() 中添加 rte_pdump_init()。差分结果:左边 是修改前。右边 是修改后。添加了 pdump 的 功能。...原创 2019-03-24 22:57:50 · 2991 阅读 · 2 评论 -
DPDK 1805 日志学习笔记
修改默认的日志等级文件: ${RTE_SDK}/config/common_base差分: - CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO + CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_DEBUG修改应用中的日志类别的等级修改应用中的日志类别的等级 main() { rte_log_set_level(RTE_LOGTYP...原创 2019-04-04 16:17:52 · 400 阅读 · 0 评论 -
编译和连接笔记
链接查看 程序的依赖库当运行可执行文件出现找不到动态链接库错误的时候。检查库的路径是很重要的。方法:查看可执行文件和动态链接库所依赖的库。 # 可执行文件 ldd <executable_file> # 动态链接库 ldd <shared_library>查看 已登记的库仔细检查其中的库的路径。可以帮助了解动态链接库是否正确登记。方法:打印系统...原创 2019-04-10 17:35:58 · 3110 阅读 · 0 评论 -
lintcode:买卖股票的最佳时机 I
int gain_max(int *prices, int len){ int price_min = prices[0]; int gain_max = 0; int gain_new; int i; for (i = 0; i < len; ++i) { gain_n...原创 2019-05-01 16:15:20 · 124 阅读 · 0 评论 -
LintCode 697: 判断是否为平方数之和 -- O(n) 解法
问题LintCode 697: 判断是否为平方数之和给一个整数 c, 你需要判断是否存在两个整数 a 和 b 使得 a^2 + b^2 = c.样例给出 n = 5返回 true // 1 * 1 + 2 * 2 = 5给出 n = -5返回 false一般的解法,时间复杂度为 O(n2n^2n2)。下面的展示一种 时间复杂度为 O(n) 的算法。其中加速的原理,主要是使用了 ...原创 2019-05-08 15:28:01 · 791 阅读 · 0 评论 -
pahole安装及使用(centos7)
pahole安装及使用(centos7)下载paholeurl: https://github.com/jmesmon/pahole.git安装依赖库centos7: yum -y install cmake yum -y install libdwarf-debuginfo.x86_64 libdwarf-devel.x86_64 libdwarf-tools.x86_64...原创 2019-04-03 15:19:11 · 2493 阅读 · 0 评论 -
读取硬件的 ID
读取硬件的 ID当需要读取硬件的 ID 来作为认证用。可以使用以下指令。cpu iddmidecode -t processor | grep "ID" | cut -d ":" -f 2memory iddmidecode -t memory | grep "Serial Number" | cut -d ":" -f 2 | grep -w "[0-9a-fA-F]\+" ...原创 2019-04-09 09:15:36 · 516 阅读 · 0 评论 -
DPDK 16.07 驱动初始化和收发包函数学习笔记
DPDK 16.07 驱动初始化和收发包函数学习笔记文档保留了 markdown 格式。可以转为纯文本格式,方便在其他编辑器中使用语法高亮阅读代码。文档行文主要是提纲式的。如果阅读过程发现缺少了方向。请立刻回到章节的开首处,查询总体的函数调用图。文档只讨论了千兆(I350 Gigabit)和 万兆(82599ES 10-Gigabit SFI/SFP+)的驱动做为例子。分析代码的过程中,...原创 2019-04-02 21:27:37 · 2285 阅读 · 2 评论 -
GDB 学习笔记
GDB 反向调试功能GDB从7.0版本开始支持反向调试功能,也就是允许你倒退着运行程序,或者说撤销程序执行的步骤从而会到以前的状态。可以用以下几条命令来调试程序:commanddescriptionrecord开始记录record stop停止记录record save保存记录到文件record restore从文件读入记录reverse-...原创 2019-04-06 21:08:58 · 161 阅读 · 0 评论 -
code::block 安装
code::block 安装安装 gtk 开发库yum install gtk+-devel.x86_64安装 wxWidgets注意:一定要用wxWidgets v2.8.12unzip wxWidgets-2.8.12.zipcd wxWidgets-2.8.12./configure --enable-xrc --enable-monolithic --enable-uni...原创 2019-04-06 21:06:15 · 229 阅读 · 0 评论