原创 golang的heap profile原理

golang中提供了多種profile用於分析golang程序的CPU、內存等使用情況。heap profile是堆內存使用情況的profile信息,用於分析程序當前的堆內存使用情況,在分析內存開銷和內存泄露問題時是一種有效的分析工具。

原创 makefile中.PHONY目標的意義

在makefile文件中,會頻繁的看到許多".PHONY"目標,例如: .PHONY: build_docker_image build_docker_image: # build dockerfile from std

原创 bash中的點(".")命令

在看docker的啓動腳本時,看到其中有一行". /etc/sysconfig/docker"。這"."是什麼意思? 百度得知,"."命令就是"source"命令的另一種寫法,是bash內建的命令。source命令比較常用,就是在當前ba

原创 使用ebpf分析網絡報文傳輸時延

最近需要分析某個鏈路上的單向網絡延遲,數據的發送端使用一個用戶態協議棧,而接收端則使用linux內核協議棧。獲取延遲的方式是在發送端在發送報文的尾部添加一個發送時間戳,在接收端獲取報文後將接收端時間戳與發送時間戳進行對比,從而獲得中間的延

原创 tcpdump與libpcap原理分析

tcpdump是linux上常用的網絡報文抓取分析工具,主要功能是抓取系統中的網絡報文,根據條件過濾出需要的報文,最後將報文打印或保存到文件中。本文將對tcpdump的實現原理進行分析,由於報文解析展示和保存的邏輯比較直觀,本文主要關注報

原创 TCP keepalive機制分析

TCP keepalive是由TCP協議棧提供的連接存活性檢測功能。如果打開這個功能特性,如果一條已建立的TCP連接一段時間沒有收到報文,就會開始發送TCP keepalive報文,如果keepalive報文多次沒有獲得響應,則判定連接的

原创 數據包接收系列 — NAPI的原理和實現

本文主要內容:簡單分析NAPI的原理和實現。內核版本:2.6.37Author:zhangskd @ csdn 概述 NAPI是linux新的網卡數據處理API,據說是由於找不到更好的名字,所以就叫NAPI(New API),在2.5之後引

原创 個人學習筆記---軟中斷(下半部)和軟件中斷(系統調用)的區別

軟中斷是用軟件方式模擬硬件中斷的概念,實現宏觀上的異步執行效果。異步通知所基於的信號也類似於中斷。軟中斷又是和硬中斷相對應的,硬中斷是外部設備對CPU的中斷,軟中斷通常是硬中斷服務程序對內核的中斷,信號則是由內核(或其它進程)對某個進程的中

原创 fuse用戶態文件系統下ls命令的執行過程分析

關於fuse文件系統的基本概念,可以參考https://blog.csdn.net/ty_laurel/article/details/51685193這篇文章。在這篇文章裏,較詳細了介紹了fuse文件系統的代碼結構和原理,以及工作流程。

原创 /proc/self/目錄的意義

我們都知道可以通過/proc/$pid/來獲取指定進程的信息,例如內存映射、CPU綁定信息等等。如果某個進程想要獲取本進程的系統信息,就可以通過進程的pid來訪問/proc/$pid/目錄。但是這個方法還需要獲取進程pid,在fork、d

原创 在Ubuntu中使用8192eu無線網卡的AP功能

前段時間買了一個瑞昱8192芯片的無線網卡,想在Ubuntu系統下作爲AP給手機提供熱點。安裝時卻發現廠家只提供了windows下的驅動和控制端軟件,在Linux下只有一個芯片的官方驅動,作爲普通wifi是可以的,但AP模式卻無法生效。

原创 PCI設備驅動切換方法

在linux系統中,有時會爲同一類設備同時加載多個驅動,用於測試或者不同使用方式。例如做數據報文處理的服務器上可能會同時加載普通的網卡驅動和DPDK的igb_uio驅動來使用通訊網卡和數據處理卡。 在這種情況下,需要一種方式能夠讓指定設備

原创 gcc編譯時使用-include參數添加頭文件引用

編寫C和C++程序時,需要在代碼中使用#include來引用頭文件。除了這個方法外,gcc支持參數-include,可以在編譯時直接向目標代碼中添加頭文件,而不需要在代碼中加入include語句。 通過這個方式可以在不修改代碼的情況下增加

原创 perf常用用法簡介

perf是linux內核自帶的性能分析工具,由於其和對應的內核版本同步發佈,不需要單獨安裝,同時功能又很強大,因此成爲了筆者的主要性能分析工具。本文主要從筆者的實際使用情況出發,介紹一下perf工具的常用命令和使用場景。 perf常用參數

原创 linux系統調用原理及實現

linux系統調用 系統調用是linux內核爲用戶態程序提供的主要功能接口。通過系統調用,用戶態進程能夠臨時切換到內核態,使用內核態才能訪問的硬件和資源完成特定功能。系統調用由linux內核和內核模塊實現,內核在處理系統調用時還會檢查系統