中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站做銷售是斤么工作google開戶

網(wǎng)站做銷售是斤么工作,google開戶,asp漂亮的辦公家具公司網(wǎng)站源碼,浙江建設(shè)廳網(wǎng)站怎么進(jìn)不去基于eBPF的嵌入式應(yīng)用調(diào)試 筆者之前寫過幾篇有關(guān)于使用eBPF調(diào)試Linux內(nèi)核和應(yīng)用的博客,其中提到,在嵌入式設(shè)備上使用BCC或bpftrace是不可行的;主要原因在于嵌入式設(shè)備的資源有限,而這兩個(gè)調(diào)試工具依賴python/clang/llvm等庫(kù)&…

基于eBPF的嵌入式應(yīng)用調(diào)試

筆者之前寫過幾篇有關(guān)于使用eBPF調(diào)試Linux內(nèi)核和應(yīng)用的博客,其中提到,在嵌入式設(shè)備上使用BCC或bpftrace是不可行的;主要原因在于嵌入式設(shè)備的資源有限,而這兩個(gè)調(diào)試工具依賴python/clang/llvm等庫(kù),需要將腳本編譯為eBPF字節(jié)碼加載入Linux內(nèi)核來執(zhí)行。然而,隨著嵌入式設(shè)備的性能越來越強(qiáng),板載資源越來越多,在嵌入式設(shè)備上運(yùn)行bpftrace工具已成為可能。本文整理了筆者為raspberrypi 4設(shè)備編譯bpftrace工具的過程,按照這些操作,筆者為工作中的嵌入式設(shè)備也制作了可用的bpftrace調(diào)試工具。

另外,22.04版本的Ubuntu系統(tǒng)自帶的bpftrace已經(jīng)不能用了,主要的原因是它不帶符號(hào)表(strip -s);本文的內(nèi)容也可用于PC端的bpftrace工具編譯構(gòu)建:

root@ubuntu:/usr/sbin# uname -a
Linux ubuntu 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:/usr/sbin# ./execsnoop.bt
Attaching 3 probes...
ERROR: Could not resolve symbol: /proc/self/exe:BEGIN_trigger

編譯使用的設(shè)備

首先,筆者使用的raspberrypi 4可插入兩張TF卡,兩張卡分別安裝了debian系統(tǒng)和筆者編譯的openwrt系統(tǒng),二者的Linux內(nèi)核版本大致相同,均為6.1版本。其次,樹莓派設(shè)備的內(nèi)存大小為2GB,這一點(diǎn)非常重要;因?yàn)?code>bcc/bpftrace是由C++編寫的,編譯過程非常耗內(nèi)存(筆者使用clang編譯器構(gòu)建)。最后,筆者是為了在openwrt系統(tǒng)中使用bpftrace,因此要求在構(gòu)建openwrt系統(tǒng)時(shí),選擇glibc庫(kù)。

零,安裝clang編譯器

編譯在是樹莓派的debian系統(tǒng)上完成的。需要按照apt.llvm.org的說明操作來安裝,筆者選擇了安裝clang-10編譯器:

wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
./llvm.sh 10

之后,我們需要在debian安裝其他依賴庫(kù)(而不編譯所有的依賴庫(kù),否則耗時(shí)太久了)。以下需要安裝的庫(kù),是在raspberrypi/openwrt系統(tǒng)上缺少的,后面會(huì)直接復(fù)制到安裝有openwrt系統(tǒng)的TF卡上:

sudo apt install flex bison zlib1g-dev liblzma-dev libbz2-dev cmake \libzstd-dev dwarves build-essential python3-setuptools libpython3-dev

一,編譯elfutils

筆者下載了最新版本的elfutils,它提供了libelf依賴庫(kù),該軟件包的配置、編譯操作如下:

../configure --prefix=/opt/bpftrace CC=clang-10 CXX=clang++-10 \CFLAGS='-Wall -fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -Wno-unused-parameter' \CXXFLAGS='-Wall -fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -Wno-unused-parameter' \--disable-nls --enable-libdebuginfod=dummy --disable-debuginfod --with-zlib --with-lzma \--with-bzlib --with-zstd LDFLAGS='-Wl,-rpath=/opt/bpftrace/lib'
make && sudo make install

以上配置完成后,再執(zhí)行make && sudo make install即可安裝。

二,編譯libbpf庫(kù)

這里需要強(qiáng)調(diào)的是,依筆者的經(jīng)驗(yàn),libbpf庫(kù)以及bcc、bpftrace版本的選擇,不能任意;一定要根據(jù)Linux內(nèi)核版本來選擇。例如,樹苺派的Linux內(nèi)核版本為6.1,那么確認(rèn)該版本內(nèi)核的(初始)發(fā)布日期(是2023年初發(fā)布的),然后選擇時(shí)間上相近的libbpf庫(kù)。這里筆者選擇的版本為libbpf-1.2.2。然而工作中,筆者因使用的嵌入式設(shè)備比較老,使用的版本為0.1.1。

該庫(kù)的編譯操作如下:

cd $HOME ; tar -zxf libbpf-1.2.2.tar.gz
cd libbpf-1.2.2/src
make V=1 PREFIX=/opt/bpftrace CC=clang-10 CFLAGS='-fPIC -O2 -ggdb -Wall -fno-omit-frame-pointer -I/opt/bpftrace/include' LDFLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib'
sudo make V=1 PREFIX=/opt/bpftrace CC=clang-10 CFLAGS='-fPIC -O2 -ggdb -Wall -fno-omit-frame-pointer -I/opt/bpftrace/include' LDFLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' install

注意,以上編譯的庫(kù)在debian/arm64系統(tǒng)下會(huì)被安裝到/opt/bpftrace/lib64路徑下,需要移到/opt/bpftrace/lib路徑下,并修改/opt/bpftrace/lib/pkgconfig/libbpf.pc文件。

三,安裝cereal頭文件

早期的bpftrace工具不依賴該庫(kù),但現(xiàn)在是需要了,筆者選擇了cereal-1.3.2.tar.gz版本:

mkdir -p build_aarch64 && cd build_aarch64
cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/opt/bpftrace \-DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 \-DCMAKE_C_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer' \-DCMAKE_CXX_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer' \-DBUILD_DOC=OFF -DBUILD_SANDBOX=OFF -DSKIP_PERFORMANCE_COMPARISON=ON -DBUILD_TESTS=OFF ..
sudo make install

注意,該庫(kù)以頭文件的形式提供,以上不會(huì)有動(dòng)態(tài)庫(kù)編譯生成。

四,編譯bcc

bcc的版本為v0.27.0,筆者已驗(yàn)證最新版本的bcc編譯得到的bpftrace存在異常。需要注意的是,筆者下載的源代碼文件名為bcc-src-with-submodule.tar.gz。以下是配置、編譯安裝的操作:

mkdir -p build_aarch64 && cd build_aarch64
cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/opt/bpftrace \-DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 \-DCMAKE_C_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -I/opt/bpftrace/include' \-DCMAKE_CXX_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -I/opt/bpftrace/include' \-DCMAKE_EXE_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DCMAKE_MODULE_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DCMAKE_SHARED_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DENABLE_LLVM_SHARED=ON -DENABLE_TESTS=OFF -DRUN_LUA_TESTS=OFF -DENABLE_LIBDEBUGINFOD=OFF ..
make && sudo make install

編譯完成后,筆者刪除了所有的靜態(tài)庫(kù)(因?yàn)楣P者希望所有的庫(kù)是動(dòng)態(tài)鏈接的):sudo rm -rf /opt/bpftrace/lib/*.a。注意,這個(gè)編譯過程比較耗時(shí),大約持繼在一小時(shí)以上。因rasbperrypi 4內(nèi)存有2GB,上面可以make -j2來編譯加速。

五,編譯bpftrace

筆者選擇的bpftrace版本為v0.17.1(正如上面提到的,筆者驗(yàn)證最新版本的bpftracearm64/linux-6.1系統(tǒng)下運(yùn)行不正常。配置、編譯安裝的操作如下:

mkdir -p build_aarch64 && cd build_aarch64
cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/opt/bpftrace \-DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 \-DCMAKE_C_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -I/opt/bpftrace/include -I${HOME}/libbpf-1.2.2/include -I${HOME}/libbpf-1.2.2/include/uapi' \-DCMAKE_CXX_FLAGS='-fPIC -O2 -D_GNU_SOURCE -ggdb -fno-omit-frame-pointer -I/opt/bpftrace/include -I${HOME}/libbpf-1.2.2/include -I${HOME}/libbpf-1.2.2/include/uapi' \-DCMAKE_EXE_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DCMAKE_MODULE_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DCMAKE_SHARED_LINKER_FLAGS='-L/opt/bpftrace/lib -Wl,-rpath=/opt/bpftrace/lib' \-DUSE_SYSTEM_BPF_BCC=ON -DSTATIC_LINKING=OFF -DALLOW_UNSAFE_PROBE=ON -DBUILD_TESTING=OFF ..
make && sudo make install

需要注意的是,上面的編譯選項(xiàng),直接指定了libbpf-1.2.2頭文件包含的路徑。至此,筆者的編譯就結(jié)束了,接下來將編譯結(jié)果復(fù)制到安裝有openwrt系統(tǒng)的TF卡中。

在raspberrypi/openwrt系統(tǒng)下使用bpftrace

首先,除了/opt/bpftrace外,筆者從樹莓派的debian系統(tǒng)中復(fù)制了以下庫(kù)到openwrt系統(tǒng):

root@OpenWrt:/lib/aarch64-linux-gnu# ls -lh -t | head -n 8
-rw-r--r--    1 root     root       64.8M Sep  9 22:40 libLLVM-10.so.1
-rw-r--r--    1 root     root       65.0K Sep  9 22:42 libbz2.so.1.0
-rw-r--r--    1 root     root       27.7M Sep  9 22:41 libclang-10.so.1
-rw-r--r--    1 root     root      179.1K Sep  9 22:43 libedit.so.2
-rw-r--r--    1 root     root       30.2K Sep  9 22:42 libffi.so.6
-rw-r--r--    1 root     root      130.2K Sep  9 22:41 liblzma.so.5
-rw-r--r--    1 root     root      158.6K Sep  9 22:43 libtinfo.so.5
-rw-r--r--    1 root     root      405.8K Sep  9 22:41 libzstd.so.1

然后,筆者為樹莓派的內(nèi)核使能了相關(guān)的內(nèi)核選項(xiàng),詳見此處的詳細(xì)說明。還有,bpftrace的正常運(yùn)行,可能還需要訪問內(nèi)核的頭文件,這就需要使能CONFIG_IKHEADERS=m,在樹莓派啟動(dòng)后,手動(dòng)加載該內(nèi)核模塊:insmod kheaders.ko。最后,筆者在樹莓派的openwrt系統(tǒng)下使用bpftrace的結(jié)果如下:

root@OpenWrt:~# insmod kheaders.ko
module is already loaded - kheaders
root@OpenWrt:~# uname -a
Linux OpenWrt 6.1.50 #0 SMP Fri Sep  1 21:45:47 2023 aarch64 GNU/Linux
root@OpenWrt:~# /opt/bpftrace/bin/bpftrace --info
SystemOS: Linux 6.1.50 #0 SMP Fri Sep  1 21:45:47 2023Arch: aarch64Buildversion: v0.17.1LLVM: 10.0.1unsafe uprobe: nobfd: nolibdw (DWARF support): yeslibbpf: failed to find valid kernel BTF
Kernel helpersprobe_read: yesprobe_read_str: yesprobe_read_user: yesprobe_read_user_str: yesprobe_read_kernel: yesprobe_read_kernel_str: yesget_current_cgroup_id: yessend_signal: yesoverride_return: noget_boot_ns: yesdpath: noskboutput: noKernel featuresInstruction limit: 1000000Loop support: yesbtf: nomap batch: yesuprobe refcount (depends on Build:bcc bpf_attach_uprobe refcount): yesMap typeshash: yespercpu hash: yesarray: yespercpu array: yesstack_trace: yesperf_event_array: yesProbe typeskprobe: yestracepoint: yesperf_event: yeskfunc: noiter:task: noiter:task_file: nokprobe_multi: noraw_tp_special: yesroot@OpenWrt:~# cd /opt/bpftrace/share/bpftrace/tools/
root@OpenWrt:/opt/bpftrace/share/bpftrace/tools# ls
bashreadline.bt    gethostlatency.bt  runqlen.bt         tcpdrop.bt
biolatency.bt      killsnoop.bt       setuids.bt         tcplife.bt
biosnoop.bt        loads.bt           ssllatency.bt      tcpretrans.bt
biostacks.bt       mdflush.bt         sslsnoop.bt        tcpsynbl.bt
bitesize.bt        naptime.bt         statsnoop.bt       threadsnoop.bt
capable.bt         old                swapin.bt          undump.bt
cpuwalk.bt         oomkill.bt         syncsnoop.bt       vfscount.bt
dcsnoop.bt         opensnoop.bt       syscount.bt        vfsstat.bt
doc                pidpersec.bt       tcpaccept.bt       writeback.bt
execsnoop.bt       runqlat.bt         tcpconnect.bt      xfsdist.bt
root@OpenWrt:/opt/bpftrace/share/bpftrace/tools# /opt/bpftrace/bin/bpftrace ./execsnoop.bt
libbpf: failed to find valid kernel BTF
libbpf: failed to find valid kernel BTF
Attaching 3 probes...
TIME(ms)   PID   ARGS
26138      2490  /etc/init.d/firewall reload
26168      2502  readlink /etc/init.d/firewall
26170      2503  basename /etc/init.d/firewall
26172      2504  flock -n 1000
26174      2505  flock 1000
26178      2506  readlink /etc/init.d/firewall
26181      2507  readlink /etc/init.d/firewall
26183      2508  basename /etc/init.d/firewall
26186      2509  flock -n 1000
26188      2510  fw4 reload
26191      2511  flock -x 1000
26193      2512  rm -f /var/run/fw4.state
26195      2513  utpl -S /usr/share/firewall4/main.uc
26195      2514  nft -f /dev/stdin
26303      2515  sh -c /usr/sbin/nft --terse --json list flowtables inet
26305      2515  /usr/sbin/nft --terse --json list flowtables inet
26393      2516  utpl -S /usr/share/firewall4/main.uc
29341      2517  /etc/init.d/firewall status
29371      2529  readlink /etc/init.d/firewall
29373      2530  basename /etc/init.d/firewall
29375      2531  flock -n 1000
29377      2532  flock 1000
29381      2533  readlink /etc/init.d/firewall
29384      2534  basename /etc/init.d/firewall
29387      2537  jsonfilter -e @["firewall"]
29388      2539  jshn -w
29391      2540  ubus call service list { "name": "firewall" }
29397      2543  jsonfilter -e $.instances
63078      2544  /etc/init.d/network status
63108      2556  readlink /etc/init.d/network
63110      2557  basename /etc/init.d/network
63112      2558  flock -n 1000
63114      2559  flock 1000
63118      2560  readlink /etc/init.d/network
63121      2561  basename /etc/init.d/network
63124      2564  jsonfilter -e @["network"]
63125      2566  jshn -w
63128      2567  ubus call service list { "name": "network" }
63134      2570  jsonfilter -e $.instances
63137      2571  jsonfilter -s { "instance1": { "running": true, "pid": 769, "command": [ "\/sbin\/netifd" ], "term_timeout": 5,
"limits": { "core": "unlimited" }, "respawn": { "threshold": 3600, "timeout": 5, "retry": 5 } } } -e $[*].running
^C
root@OpenWrt:/opt/bpftrace/share/bpftrace/tools#

至此,可以說明我們編譯的bpftrace工具可以正常工作了。

http://www.risenshineclean.com/news/51147.html

相關(guān)文章:

  • 住房和城鄉(xiāng)建設(shè)部網(wǎng)站建筑合同網(wǎng)站模板搭建
  • 網(wǎng)站建設(shè)公司官方網(wǎng)站怎么做品牌推廣和宣傳
  • 鑫三科技網(wǎng)站設(shè)計(jì)百度關(guān)鍵詞推廣費(fèi)用
  • 網(wǎng)頁模板免費(fèi)下載html深圳網(wǎng)站關(guān)鍵詞優(yōu)化公司
  • 軟件工程做項(xiàng)目網(wǎng)站工程建設(shè)數(shù)字化管理平臺(tái)
  • 西寧seo網(wǎng)站優(yōu)化用戶體驗(yàn)
  • php做網(wǎng)站為什么比java快企業(yè)策劃咨詢公司
  • 成都廣告制作廠家深圳優(yōu)化seo
  • 做網(wǎng)站打廣告圖片素材app推廣方法
  • 程序界面設(shè)計(jì)seo查詢百科
  • 網(wǎng)站建設(shè)平臺(tái)源碼提供seo優(yōu)化seo外包
  • 做網(wǎng)站顏色如何搭配一個(gè)產(chǎn)品的網(wǎng)絡(luò)營(yíng)銷方案
  • 網(wǎng)站建設(shè)銷售銷售流程花關(guān)鍵詞排名系統(tǒng)
  • 手機(jī)版微網(wǎng)站百度關(guān)鍵詞排名十大排名
  • 應(yīng)用商店網(wǎng)站源碼媒體代發(fā)網(wǎng)站
  • 網(wǎng)站域名備案注銷灰色關(guān)鍵詞排名方法
  • 同城做鴨網(wǎng)站百度手機(jī)版
  • 如何找回網(wǎng)站備案密碼微軟優(yōu)化大師
  • php網(wǎng)站怎么做集群正規(guī)教育培訓(xùn)機(jī)構(gòu)
  • python做網(wǎng)站怎么樣網(wǎng)站建設(shè)全網(wǎng)營(yíng)銷
  • 網(wǎng)站建設(shè)費(fèi)應(yīng)怎樣做會(huì)計(jì)分錄上海網(wǎng)站搜索引擎優(yōu)化
  • 做外貿(mào)應(yīng)該去什么網(wǎng)站騰訊新聞發(fā)布平臺(tái)
  • 做網(wǎng)站該去哪找客戶免費(fèi)發(fā)布廣告信息的網(wǎng)站
  • 專門找建筑案例的網(wǎng)站如何查看網(wǎng)站權(quán)重
  • 設(shè)計(jì)一個(gè)電子商務(wù)網(wǎng)站建設(shè)方案小程序制作
  • 用帝國(guó)軟件做網(wǎng)站的心得成品網(wǎng)站seo
  • 建設(shè)工程評(píng)標(biāo)專家在哪個(gè)網(wǎng)站登錄百度指數(shù)怎么用
  • 下做圖軟件在哪個(gè)網(wǎng)站下載網(wǎng)站域名注冊(cè)查詢
  • 河南建設(shè)網(wǎng)站官網(wǎng)山東疫情最新消息
  • 桂陽網(wǎng)站建設(shè)津seo快速排名