diff --git a/Linux_Lifecycle/doc/Linux schedule.md b/Linux_Lifecycle/doc/Linux schedule.md index a181f5ec13ccb201aacbba0a54e26f02ba94c80a..85a2258fdfd6490b030c2b8978cff49cda040a56 100644 --- a/Linux_Lifecycle/doc/Linux schedule.md +++ b/Linux_Lifecycle/doc/Linux schedule.md @@ -221,7 +221,7 @@ Linuxæ“ä½œç³»ç»Ÿçš„è°ƒåº¦å™¨æ˜¯å…¶æ ¸å¿ƒç»„ä»¶ä¹‹ä¸€ï¼Œè´Ÿè´£ç®¡ç†å’Œåˆ†é…CPU ### 5.5. BPF程åºå¤„ç†æµç¨‹ -综上,我们å¯ä»¥å¾—到进程状æ€è½¬æ¢çš„建模图,能够å分清楚的得到进程在调度过程ä¸çš„行为状æ€ã€‚ +ç»¼ä¸Šï¼Œé‡æ–°è®¾è®¡è¿›ç¨‹è°ƒåº¦æ‰§è¡Œè¿‡ç¨‹ï¼Œå¾—到进程状æ€è½¬æ¢çš„建模图,能够å分清楚地得到进程在调度过程ä¸çš„行为状æ€ã€‚ <center class ='img'> <img title="进程状æ€è½¬æ¢å‘¨æœŸ" src="./pictures/进程状æ€è½¬æ¢å‘¨æœŸ.drawio.png" width="70%"> </center> @@ -235,4 +235,12 @@ Linuxæ“ä½œç³»ç»Ÿçš„è°ƒåº¦å™¨æ˜¯å…¶æ ¸å¿ƒç»„ä»¶ä¹‹ä¸€ï¼Œè´Ÿè´£ç®¡ç†å’Œåˆ†é…CPU BPF程åºå¤„ç†é€»è¾‘如下所示: -<center class ='img'> <img title="schedule-BPFç¨‹åºæ‰§è¡Œæµç¨‹" src="./pictures/schedule-BPFç¨‹åºæ‰§è¡Œæµç¨‹.drawio.png" width="80%"> </center> \ No newline at end of file +<center class ='img'> <img title="schedule-BPFç¨‹åºæ‰§è¡Œæµç¨‹" src="./pictures/schedule-BPFç¨‹åºæ‰§è¡Œæµç¨‹.drawio.png" width="80%"> </center> + +## 6. 创新点 +### 6.1. åœ¨å¤æ‚的调度器ä¸ä¼˜åŒ–挂载点选择 +在Linux schedule模å—ä¸ï¼Œéš¾ç‚¹åœ¨äºŽæŒ‚载哪些函数和tracepoint +由于Linuxä¸è°ƒåº¦å™¨ååˆ†å¤æ‚ï¼Œè€Œä¸”å¾ˆå¤šå…³é”®å†…æ ¸å‡½æ•°ä½œä¸ºè°ƒåº¦å™¨çš„é‡è¦æ“ä½œï¼Œæ‰€ä»¥æ— æ³•è¿›è¡ŒæŒ‚è½½ï¼Œéœ€è¦æ›´åŠ è¯¦ç»†çš„åˆ†æžè°ƒåº¦é€»è¾‘é€‰æ‹©æœ€ä½³ã€æœ€æ°å½“的挂载点获å–ä¿¡æ¯ã€‚所以在编写BPFå‰å¯¹Linux调度器æºç è¿›è¡Œè¯¦ç»†é˜…è¯»ï¼Œé€‰æ‹©äº†ç›¸åº”çš„å†…æ ¸å‡½æ•°å’Œtracepoint,达到了挂载较少获得最多最有效信æ¯çš„目的。 +### 6.2. 解决进程状æ€é‡å 导致的时间统计错误 +在5.5å°èŠ‚BPF程åºå¤„ç†æµç¨‹ä¸æåˆ°äº†è¿›ç¨‹çжæ€ä¼šæœ‰é‡å çš„æƒ…å†µï¼Œå¦‚æžœæŒ‰ç…§å†…æ ¸é€»è¾‘è¿›è¡Œæ—¶é—´ç»Ÿè®¡ï¼Œä¸€å®šä¼šå‡ºçŽ°æ—¶é—´ç»Ÿè®¡é”™è¯¯çš„æƒ…å†µï¼Œä¼šå¯¼è‡´åŽç»çš„æ—¶é—´åŽå¤„ç†æ“作输出错误的结果。 +我们改进ä¸ä»…ç¡®ä¿äº†æ—¶é—´ç»Ÿè®¡çš„å‡†ç¡®æ€§ï¼Œè¿˜ä½¿å¾—æ•´ä¸ªåˆ†æžæµç¨‹çš„逻辑自洽,é¿å…äº†å› é‡å 状æ€å¯¼è‡´çš„计算错误,从而ä¿è¯äº†æœ€ç»ˆè¾“出数æ®çš„高å¯é 性。 \ No newline at end of file diff --git a/Linux_Lifecycle/doc/post_process.md b/Linux_Lifecycle/doc/post_process.md index 1cc620ed9b2af34fca26ae84760dac87d8177c86..82eecdb8642f6c85e255bde19dc2d40e42abecc6 100644 --- a/Linux_Lifecycle/doc/post_process.md +++ b/Linux_Lifecycle/doc/post_process.md @@ -77,3 +77,10 @@ for (int i = 0; i < STACK_DEPTH && u_ip[i]; i++) { } ``` +## 3. 创新点 +### 3.1. å…±äº«å†…å˜ +**将共享内å˜å½“作循环队列读写数æ®å¯ä»¥å®žçŽ°æ— é”æ“ä½œï¼Œæ•°æ®æ¶ˆè´¹è€…和生产者分别åªä¿®æ”¹å¤´å°¾æŒ‡é’ˆï¼Œä¸ä¼šå‡ºçŽ°ä¸´ç•Œèµ„æºçš„访问冲çªé—®é¢˜ï¼Œèƒ½å¤Ÿå‡å°‘进程ç‰å¾…事件,æé«˜æ•°æ®ä¼ 输速率,进而æé«˜eBPFç¨‹åºæ•ˆçŽ‡ï¼Œé™ä½Žoverhead。** + +### 3.2. æ•°æ®åŽå¤„ç† +sort_script.py 脚本在 BPF æ•°æ®æ”¶é›†çš„基础上,将原始事件数æ®è¿›è¡ŒåŠ å·¥å’Œå¯è§†åŒ–。通过该脚本,BPF æ•获的原始事件数æ®è¢«ç²¾ç¡®åœ°è§£æžã€æŽ’åºå’Œæ±‡æ€»ï¼Œå½¢æˆæ˜“于ç†è§£çš„å¯è§†åŒ–è¾“å‡ºã€‚è„šæœ¬é€šè¿‡å¯¹ç›®æ ‡è¿›ç¨‹ç”Ÿå‘½å‘¨æœŸä¸å…³é”®äº‹ä»¶çš„耗时ã€é¢‘率以åŠå‘生的顺åºè¿›è¡Œå¤„ç†ï¼Œç”Ÿæˆäº†å›¾è¡¨æˆ–è¡¨æ ¼ç‰å½¢å¼çš„ç›´è§‚æ•°æ®ï¼Œå¸®åŠ©ä½¿ç”¨è€…å¿«é€Ÿè¯†åˆ«ç›®æ ‡è¿›ç¨‹åœ¨è¿è¡Œä¸çš„æ€§èƒ½ç“¶é¢ˆã€èµ„æºæ¶ˆè€—çƒç‚¹ä»¥åŠå¼‚常行为。 +æ¤å¤–,该脚本的创新之处在于其对事件数æ®çš„动æ€å¤„ç†å’Œçµæ´»çš„å¯è§†åŒ–æ–¹å¼ã€‚使用者ä¸ä»…å¯ä»¥æŸ¥çœ‹å„个事件的分布和耗时,还能获得针对具体事件的详细统计数æ®ï¼Œå¦‚系统调用的调用频率ã€ä¸Šä¸‹æ–‡åˆ‡æ¢çš„æ¬¡æ•°ã€è¿›ç¨‹ç‰å¾…的时间ç‰ã€‚è¿™ç§å¯è§†åŒ–输出有助于深入分æžè¿›ç¨‹è¡Œä¸ºï¼Œä»Žè€Œä¸ºæ€§èƒ½ä¼˜åŒ–å’Œæ•…éšœè¯Šæ–æä¾›ç²¾å‡†çš„æ”¯æŒã€‚ \ No newline at end of file diff --git a/README.md b/README.md index fba964dd3d271aeb10d7303a18ec6984730370dc..2bf4c9214b7df014198c75dae7bb92cc80b7a889 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ -# The-Lifecycle-of-Linux-Process +# The-Lifecycle-of-Linux-Process —— 比赛方å‘:OS应用开å‘èµ›é“/OSç³»ç»Ÿå·¥å…·å¼€å‘ ## 0. åŸºæœ¬ä¿¡æ¯ - **å‚èµ›å¦æ ¡**ï¼šå¤æ—¦å¤§å¦ + - **比赛方å‘**:OSç³»ç»Ÿå·¥å…·å¼€å‘ - **队ä¼ç¼–å·** :T202410246994723 @@ -37,15 +38,48 @@ - Ubuntu 22.04 - Linux Kernel 6.8.0-49-generic - -### 3.1. 项目结构 +### 3.1. 工具所在ä½ç½® +ä»“åº“æ ¹ç›®å½•ä¸‹çš„`Linux_Lifecycle`æ–‡ä»¶å¤¹æ˜¯å·¥å…·æ‰€åœ¨æ–‡ä»¶ã€‚æ ¹ç›®å½•ä¸‹å…¶ä»–æ–‡ä»¶å¤¹ä¸º`libbpf-bootstrap`的执行环境。 +### 3.2. 项目结构 <center class ='img'> <img title="è°ƒåº¦æ–¹å¼æ±‡æ€»" src="./Linux_Lifecycle/doc/pictures/arch.png" width="100%"> </center> -### 3.2. åŠŸèƒ½é›†åˆ +### 3.3. åŠŸèƒ½é›†åˆ <center class ='img'> <img title="è°ƒåº¦æ–¹å¼æ±‡æ€»" src="./Linux_Lifecycle/doc/pictures/功能集åˆ.drawio.png" width="60%"> </center> +### 3.4. 工具安装 +克隆仓库,进入工具文件夹 +```shell +git clone https://gitlab.eduxiji.net/T202410246994723/project2608128-276412.git +cd ./project2608128-276412/Linux_Lifecycle +``` +安装环境ä¾èµ– +```shell +sudo apt update +sudo apt install libbpf-dev clang llvm libelf-dev libpcap-dev gcc-multilib build-essential +git submodule update --init --recursive +make +``` +编译并执行BPF程åºlifecycle +```shell +./command.sh +``` +å¦èµ·ä¸€terminalå¯åŠ¨æ•°æ®åŽå¤„ç†ç¨‹åºå®Œæˆonlineæ•°æ®å¤„ç† +```shell +./post_process +``` +å¦èµ·ä¸€terminalå¯åŠ¨æŽ§åˆ¶ç¨‹åºè¿½è¸ªç›®æ ‡è¿›ç¨‹ +```shell +./controller -s -i -a -p {pid} +``` +追踪完æˆåŽç»“æŸè¿›ç¨‹æŸ¥çœ‹ç»“æžœä¿¡æ¯ +```shell +./controller -f +``` +å¯è§†åŒ–æ•°æ®ç»“果在terminal䏿˜¾ç¤º +原始数æ®ç»“果在`./res_out`ä¸ + ## 4. 仓库目录结构 ``` @@ -154,7 +188,9 @@ [post_process模å—实现文档](./Linux_Lifecycle/doc/Linux%20Page%20Fault%20Handler.md) ## 7. 视频演示 - +### 7.1. 微信å°ç¨‹åºåˆ†äº« +https://easylink.cc/ivi46l +### 7.2. 百度网盘分享 通过网盘分享的文件:Lifecycle of Linux Process工具演示视频.mp4 链接: https://pan.baidu.com/s/1ZrEjXFDcWQLfkAaqraKrpg?pwd=1234 æå–ç : 1234