Tom's Blog


  • 首页

  • 分类

  • 归档

  • 搜索

protobuf for c

发表于 2021-03-08 | 分类于 Libs

protobuf是google提供的一种数据序列化、反序列化工具,支持变长编码(数据压缩)、向后兼容(方便升级)、平台无关(方便移植)、语言无关(前后台解耦)等优秀特性。可用于数据存储、网络数据交互等场景。本文主要介绍protobuf在c语言编程中的安装步骤。

protobuf安装包主要包括两部分:代码生成器(处理.proto) + 运行时库。
c: 由于官方主代码库不提供c库,需要安装第三方库(插件形式)。
c++/java/go/c#/python/js/object-c/ruby/php/dart: 均可使用官方库安装。

阅读全文 »

交换机bgp配置

发表于 2021-03-07 | 分类于 Tools

BGP(Border Gateway Protocol),即边际网关协议,主要用于AS(autonomous system)之间的路由信息交换(EBGP),也可用于大型的AS内部(IBGP)。提供BGP服务的实体叫做BGP router,而与BGP router连接的对端叫做BGP peer。推荐阅读BGP漫谈。本文主要讲解基于华为三层交换机[H3C S5830V2]的配置方法。

阅读全文 »

交换机端口聚合配置

发表于 2021-03-06 | 分类于 Tools

端口聚合,又称为链路聚合,就是将物理上的多个端口配置到一起,形成逻辑上的一个端口,使之具有:增大带宽、负载均衡、冗余链路的优点。下面以华为三层交换机[H3C S5830V2]为例,说明端口聚合的配置过程。

阅读全文 »

dpdk checksum

发表于 2021-03-05 | 分类于 DPDK

版本:16.11.2,当解析或组装ip/icmp/icmpv6/igmp/udp/tcp/sctp报文时,会发现都存在两个字节(16位)的checksum字段,其生成及校验算法相同。实现方式有两种:1,软件方式计算;2,offload到网卡计算。本文主要介绍软件计算方法及dpdk中的实现。
注意:当代码中设置了offload标志后,就不能使用软件方法计算,否则校验和重复计算会导致错误,因为硬件计算时校验和字段不为0。

阅读全文 »

kvm

发表于 2021-03-04 | 分类于 Linux

kvm是linux内核提供的基于硬件辅助的虚拟化实现方案,主要组件包括:内核态(kvm.ko/kvm_inter.ko/kvm_amd.ko)及用户态(qemu)。关于kvm原理,推荐阅读KVM 虚拟化详解。本文主要提供kvm+centos7.2的安装过程。

阅读全文 »

Docker

发表于 2021-03-03 | 分类于 Linux

docker是一种轻量级的虚拟化技术,用go语言实现,充分利用了linux的cgroups/namespaces/UnionFS三大技术,解决了开发环境和生产环境环境不一致和资源共享的问题。

阅读全文 »

Windows VirtualBox

发表于 2021-03-02 | 分类于 Tools

VirtualBox是一款开源的虚拟机软件,支持windows/linux/mac等多个系统。

阅读全文 »

ip

发表于 2021-03-01 | 分类于 Linux

ip命令是用于显示和配置网络设备、路由、策略路由及隧道。
语法:ip [ OPTIONS ] OBJECT { COMMAND | help }

与ifconfig区别:
1.安装方式不同
  ifconfig:yum install net-tools
  ip:yum install iproute
2.实现原理不同
  ifconfig:通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置;
  ip:通过netlink套接字接口与内核通讯,完成增删改查;
3.使用方式不同
  net-tools:通过ifconfig/arp/route/netstat等多个命令操作地址、路由等信息;
  iproute2:通过单个ip命令及统一的格式即可完成ip、路由等的操作;

阅读全文 »

tshark

发表于 2021-02-28 | 分类于 Linux

tshark是wireshark的命令行工具,同tcpdump一样,可通过libpcap抓取/过滤/保存网卡报文,处理速度低于tcpdump,但支持的协议更加丰富。

重点参数:
-f : 抓包过滤(capture filter) https://tshark.dev/capture/capture_filters/
-Y/-R : 显示过滤(display filter) https://tshark.dev/analyze/packet_hunting/packet_hunting/

阅读全文 »

journalctl

发表于 2021-02-27 | 分类于 Linux

journalctl用于读取systemd-journalctld.service服务抓取的系统及应用的日志,默认日志只存储于内存中/run/log/journal中,服务器重启后丢失;如果需要持久化到硬盘,需要手工创建/var/log/journal文件夹。
journald及syslogd都是用于收集系统日志的后台进程,linux系统都会默认安装,syslogd起源于init.d,而journald是随systemd的流行开始的。

主要区别如下:
1.journald的日志文件格式为二进制,不能直接读取(使用journalctl),而syslogd是纯文本的,方便阅读;
2.journald的日志文件存在索引、结构化、访问控制等特点,访问速度更快;
3.journald默认日志路径/run/log/journal(内存),而syslogd默认/var/log/(硬盘);
相同点如下:
1.都能用于收集系统及应用日志;
2.都能将日志传输到远端的独立日志服务器方便处理;
两者的关系如下:
1.journald提供了一个syslog api可以将日志发送给syslogd;
2.syslogd同样也提供了插件可以读取和写入journald;
推荐阅读:Tutorial: Logging with journald

阅读全文 »

vscode gdb

发表于 2021-02-26 | 分类于 Tools

当使用gdb调试应用时,如果需要执行vscode不支持的一些gdb命令,需要用到-exec命令,如查看内存。先决条件:代码编译时增加-g或-ggdb选项,如果要包含宏定义,需要-g3/-ggdb3级别。

-g: 该选项可以利用操作系统的“原生格式(native format)”生成调试信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息。
-ggdb: 使 GCC为GDB 生成专用的更为丰富的调试信息,但是,此时就不能用其他的调试器来进行调试了 (如 ddx)。

阅读全文 »

vscode远程调试

发表于 2021-02-25 | 分类于 Tools

当开发linux应用时,一般的开发环境配置为:windows上完成编码,linux上完成编译加调试。但此种配置时,需要频繁的windows<=====>linux之间切换,对工作效率影响极大。vscode的debug特性完美的解决了这个问题,同时支持launch(启动调试)和attach(挂载调试)。

阅读全文 »

dpdk大页内存

发表于 2021-02-24 | 分类于 DPDK

DPDK使用大页内存技术来提高系统性能,因为大页内存有以下两个特点:

  1. hugepage 这种页面不受虚拟内存管理影响,不会被替换出内存。
  2. 同样的内存大小,hugepage产生的页表项数目远少于4kpage,这样就有效的增加了TLB的命中率。
阅读全文 »

awk

发表于 2021-02-23 | 分类于 Linux

awk是一个基于行的解释型的编程语言,主要用于文本分析及格式化输出。建议阅读文档AWK工作原理,AWK官方手册。
基本语法如下:

1
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' files

其中:
单引号(‘’):避免shell对命令行转义,建议阅读shell引号问题;
BEGIN{commands} : 读输入文件之前执行的代码段,可选;
END{ commands }:读输入文件之后的代码段,可选;
pattern{ commands }:针对每一行的匹配pattern(支持正则),成功则执行commands;可以配置多组pattern{commands};

阅读全文 »

Joplin

发表于 2021-02-22 | 分类于 Tools

Joplin是一款开源的笔记类软件,支持Windows, macOS, Linux, Android and iOS等多种客户端。本文提供一套自有且完全开源的笔记系统的搭建过程,基于wsgidav作为服务端,提供同步功能;joplin作为客户端,提供编辑及浏览功能。

阅读全文 »

git 基础命令

发表于 2021-02-21 | 分类于 Tools

git是2005年linus花了2周时间,用c语言开发的一款分布式版本控制系统,推荐参考https://www.liaoxuefeng.com/wiki/896043488029600。

阅读全文 »

git lfs

发表于 2021-02-20 | 分类于 Tools

git-lfs(Large File Storage),简化了git对于大文件的管理。

阅读全文 »

git rebase

发表于 2021-02-19 | 分类于 Tools

当一个功能分支开发完毕后,一般会有若干次的编译问题,优化问题及代码调整问题的提交,而这些提交没有必要体现在主干分支的log里面,为了保持主干分支log的简洁性,有必要提前合并一下,然后再merge到主干。

阅读全文 »

git debug

发表于 2021-02-18 | 分类于 Tools

git传输协议支持http(如:https://github.com/zhaotao19860/mem-monitor.git)和ssh(如:git@github.com:zhaotao19860/mem-monitor.git)两种方式,因为我开发过程中主要使用ssh传输协议,所以下面以ssh协议为例分析如何调试。git运行包括两部分ssh连接+git命令运行(本机部分+远端部分),所以调试也分两部分。

阅读全文 »

dpdk 16.11.2 upgrade to 19.11.5

发表于 2021-02-17 | 分类于 DPDK

刚开始开发时使用的是dpdk16.11.2,后面开发过程中需要用到新版本的特性,比如flow director、新版本Mellanox驱动、更好的性能(无锁hash表)等,所以需要升级dpdk,选择比较新的版本dpdk19.11.5。

阅读全文 »

dpdk 19.11.5 install

发表于 2021-02-16 | 分类于 DPDK

dpdk的安装基本使用dpdk-setup.sh一个脚本就搞定了。如果需要1G的大页内存,需要事先手动调用脚本hugepage_set.sh。如果需要隔离cpu,也需要事先手动调用脚本cpu_isolation.sh。

阅读全文 »

dpdk debug

发表于 2021-02-15 | 分类于 DPDK

版本:19.11.5,当引用dpdk相关功能出错时,需要dpdk提供详细的出错信息或gdb调试的能力,以librte_ip_frag库为例。

阅读全文 »

pclint

发表于 2021-02-14 | 分类于 Tools

pclint提供c/c++的静态代码检查功能,不需要编译,检查变量定义问题及代码逻辑问题,是一款优秀的商业软件。

阅读全文 »

kswapd0

发表于 2021-02-13 | 分类于 Linux

线上某台服务器频繁告警,调用python->dircmp获取变化的文件时,返回超过20秒,增加打印日志发现是cmp函数返回慢。 因为cmp函数需要比较文件内容,需要大量内存,同时top发现kswap0一直运行且cpu占用100%,但通过free命令查看内存, swap分区基本没有使用,初步判定是系统内核自动使用了swap,需要调整系统参数。

阅读全文 »

AddressSanitizer

发表于 2021-02-12 | 分类于 Tools

AddressSanitizer(地址杀菌剂,简称 ASan) 是谷歌出品的内存检查工具,可以诊断内存越界, 非法访问,内存泄漏,内存double free等常见内存问题,并且效率比valgrind高好几倍,可以克服valgrind的一些问题,比如占用内存高的问题。
    gcc 4.8 开始,AddressSanitizer 成为 gcc 的一部分,但不支持符号信息,无法显示出问题的函数和行数。 从 4.9 开始,gcc 支持 AddressSanitizer 的所有功能。
Github 地址:https://github.com/google/sanitizers。
Wiki 地址:https://github.com/google/sanitizers/wiki/AddressSanitizer。

阅读全文 »

scan-build

发表于 2021-02-11 | 分类于 Tools

用于编译时静态代码调用链检测,属于clang工具箱,需要注意的是没有编译的文件是不会检查的。

阅读全文 »

dpdk-as-lib

发表于 2021-02-10 | 分类于 DPDK

当把dpdk作为第三方库使用时,makefile该怎么写呢?当自己的代码是c++的时候该怎么改呢? 以下使用dpdk-stable-16.11.2/examples/ip_reassembly为例。

阅读全文 »

soa

发表于 2021-02-09 | 分类于 DNS

Start Of Authortive Record(缩写soa)属于DNS的一种记录类型,包含本zone的控制及管理信息, 主要用于主授权与辅授权之间的zone同步,soa记录格式说明参见 RFC 1035。

阅读全文 »

social icons

发表于 2021-02-08 | 分类于 Tools

博客中社交图标(social icons)通常用来表示链接一些网站的logo,使界面简洁好看,比如github/qq/email等,下面从获取到配置到使用给出了基于jeckll的详细配置,并提供了将svg图标缩小和竖排改为横排的方法。

阅读全文 »

jekyll

发表于 2021-02-07 | 分类于 Tools

jekyll作为一个优秀的静态网站生成工具,再加上与github的无缝集成,可方便且免费的架设自己的技术博客,赶快用起来吧。

阅读全文 »
1 2 3
ZhaoTao

ZhaoTao

博客

63 日志
5 分类
RSS
GitHub
© 2021 - 2026 ZhaoTao
由 Jekyll 强力驱动
主题 - NexT.Muse