
曙海教學(xué)優(yōu)勢(shì)
本課程,秉承二十一年積累的教學(xué)品質(zhì),以項(xiàng)目實(shí)現(xiàn)為導(dǎo)向,面向企事業(yè)項(xiàng)目實(shí)際需要,老師將會(huì)與您分享設(shè)計(jì)的全流程以及工具的綜合使用經(jīng)驗(yàn)、技巧。課程可定制,線上/線下/上門皆可,熱線:4008699035。
  曙海培訓(xùn)的課程培養(yǎng)了大批受企業(yè)歡迎的工程師。大批企業(yè)和曙海
     建立了良好的合作關(guān)系,20多年來,合作企事業(yè)單位以達(dá)30多萬(wàn)。曙海培訓(xùn)的課程在業(yè)內(nèi)有著響亮的知名度。
本課程是打下內(nèi)核、驅(qū)動(dòng)和系統(tǒng)編程基礎(chǔ)的課程,它主要講解Linux內(nèi)核最核心的進(jìn)程調(diào)度、內(nèi)存管理和I/O模型。
第一章 進(jìn)程
第一節(jié) 進(jìn)程生命周期
Linux進(jìn)程生命周期(就緒、運(yùn)行、睡眠、停止、僵死)
僵尸是個(gè)什么鬼?
停止?fàn)顟B(tài)與作業(yè)控制,cpulimit
內(nèi)存泄漏的真實(shí)含義
task_struct以及task_struct之間的關(guān)系
初見fork和僵尸
練習(xí)題
fork的例子
life-period例子,觀察僵尸
用cpulimit控制CPU利用率
第二節(jié) 進(jìn)程的創(chuàng)建、退出和睡眠
fork、vfork、clone
寫時(shí)拷貝技術(shù)
Linux線程的實(shí)現(xiàn)本質(zhì)
進(jìn)程0和進(jìn)程1
進(jìn)程的睡眠和等待隊(duì)列
孤兒進(jìn)程的托孤,SUBREAPER
練習(xí)題
fork、vfork、Copy-on-Write例子
life-period例子,實(shí)驗(yàn)體會(huì)托孤
pthread_create例子,strace它
徹底看懂等待隊(duì)列的案例
第三節(jié) 調(diào)度算法
1. CPU/IO消耗型進(jìn)程
2. 吞吐率 vs. 響應(yīng)
3. SCHED_FIFO、SCHED_RR
4. SCHED_NORMAL和CFS
5. nice、renice
6. chrt
練習(xí)題
運(yùn)行2個(gè)高CPU利用率程序,調(diào)整他們的nice
用chrt把一個(gè)死循環(huán)程序調(diào)整為SCHED_FIFO
閱讀ARM的big.LITTLE架構(gòu)資料,并論述為什么ARM要這么做?
第四節(jié) 多核調(diào)度、cgroup、實(shí)時(shí)性
多核下負(fù)載均衡
中斷負(fù)載均衡、RPS軟中斷負(fù)載均衡
cgroups和CPU資源分群分配
Android和NEON對(duì)cgroups的采用
Linux為什么不是硬實(shí)時(shí)的
preempt-rt對(duì)Linux實(shí)時(shí)性的改造
練習(xí)題
用time命令跑1個(gè)含有2個(gè)死循環(huán)線程的進(jìn)程
用taskset調(diào)整多線程依附的CPU
創(chuàng)建和分群CPU的cgroup,調(diào)整權(quán)重和quota
cyclictest
第二章 內(nèi)存
1 硬件原理和分頁(yè)管理
CPU尋址內(nèi)存,虛擬地址、物理地址
MMU以及RWX權(quán)限、kernel和user模式權(quán)限
內(nèi)存的zone: DMA、Normal和HIGHMEM
Linux內(nèi)存管理Buddy算法
連續(xù)內(nèi)存分配器(CMA)
練習(xí)題
嘗試去更改一個(gè)const變量
meltdown實(shí)例
看/proc/buddyinfo
2 內(nèi)存的動(dòng)態(tài)申請(qǐng)和釋放
slab、kmalloc/kfree、/proc/slabinfo和slabtop
用戶空間malloc/free與內(nèi)核之間的關(guān)系
mallopt
vmalloc
內(nèi)存耗盡(OOM)、oom_score和oom_adj
Android進(jìn)程生命周期與OOM
練習(xí)題
看/proc/slabinfo,運(yùn)行slabtop
運(yùn)行mallopt.c程序:mallopt(M_TRIM_THRESHOLD)等
看/proc/vmallocinfo,grep ioremap映射
運(yùn)行一個(gè)很耗費(fèi)內(nèi)存的程序,觀察oom memory
通過oom_adj調(diào)整firefox的oom_score
3 進(jìn)程的內(nèi)存消耗和泄漏
進(jìn)程的VMA。
進(jìn)程內(nèi)存消耗的4個(gè)概念:vss、rss、pss和uss
page fault的幾種可能性,major和minor
應(yīng)用內(nèi)存泄漏的界定方法
應(yīng)用內(nèi)存泄漏的檢測(cè)方法:valgrind和addresssanitizer
練習(xí)題
看一下進(jìn)程的/proc//maps和smaps文件;
pmap一個(gè)進(jìn)程;
把同一個(gè)程序運(yùn)行2次,運(yùn)行1次,觀察pss;再運(yùn)行,得到2個(gè)進(jìn)程,觀察代碼段的pss變化;
valgrind檢查內(nèi)存錯(cuò)誤
4 內(nèi)存與I/O的交換
page cache
free命令的詳細(xì)解釋
read、write和mmap
file-backed的頁(yè)面和匿名頁(yè)
swap以及zRAM
頁(yè)面回收和LRU
練習(xí)題
把hello,python運(yùn)行兩次,對(duì)比時(shí)間差;
free,cat /dev/sda > /dev/null, free,觀察變化,分析原因;
5 其他工程問題以及調(diào)優(yōu)
DMA和cache一致性
內(nèi)存的cgroup
性能方面的調(diào)優(yōu):page in/out, swapin/out
Dirty ratio的一些設(shè)置
Swappiness
練習(xí)題
vmstat;
smem -s swap -t -k –n 
限制一個(gè)cgroup的memory,用cgexec把一個(gè)進(jìn)程放到這個(gè)cgroup
第三章 I/O
第1節(jié) Linux I/O和網(wǎng)絡(luò)模型
阻塞
非阻塞
多路復(fù)用
Signal IO
異步IO
Libevent
練習(xí)題
針對(duì)globalfifo采用signalio訪問;
運(yùn)行glibc-aio.c的案例;
運(yùn)行libevent網(wǎng)絡(luò)程序案例;
運(yùn)行epoll案例
第2節(jié) 典型文件系統(tǒng)
VFS
EXT2/3/4的layout
文件系統(tǒng)的日志與掉電保護(hù)
練習(xí)題
dump一個(gè)ext文件系統(tǒng);
分析各種日志方法的時(shí)序
第3節(jié) IO調(diào)度器
Linux block IO流程
IO調(diào)度和CFQ調(diào)度算法
ionice
cgroup與IO
練習(xí)題
ionice調(diào)整進(jìn)程io優(yōu)先級(jí),iotop觀察;
cgroup控制io
?