1. 程式人生 > >極客時間-左耳聽風-程序員攻略-Linux系統、內存和網絡

極客時間-左耳聽風-程序員攻略-Linux系統、內存和網絡

l2tp att 重傳 ret chm 數據鏈路 cad 內存管理 www.

程序員練級攻略:Linux系統、內存和網絡

Linux 系統相關

  • Red Hat Enterprise Linux 文檔 。
  • Linux Insides ,GitHub 上的一個開源電子書,其中講述了 Linux 內核是怎樣啟動、初始化以及進行管理的。
  • LWN’s kernel page ,上面有很多非常不錯的文章來解釋 Linux 內核的一些東西。
  • Learn Linux Kernel from Android Perspective ,從 Android 的角度來學習 Linux 內核,這個站點上的 Blog 相對於前面的比較簡單易讀一些。
  • Linux Kernel Doc
  • Kernel Planet ,Linux 內核開發者的 Blog,有很多很不錯的文章和想法。
  • Linux Performance and Tuning Guidelines ,這是 IBM 出的紅皮書,雖然有點老了,但還是非常值得一讀的。
  • TLK: The Linux Kernel ,這是一本相對比較老的書了,Linux 內核版本為 2.0.33,但了解一下前人的思路,也是很有幫助的。
  • Linux Performance ,這個網站上提供了和 Linux 系統性能相關的各種工具和文章收集,非常不錯。
  • Optimizing web servers for high throughput and low latency ,這是一篇非常底層的系統調優的文章,來自 DropBox,從中你可以學到很多底層的性能調優的經驗和知識。

內存相關

LWN.net 上有一系列的 “What every programmer should know about memory” ,完整的 PDF 文檔。

下面是這個系列文章的網頁版列表,內存知識體系。

  • Part 1: Introduction ,中譯版為 “每個程序員都應該了解的內存知識【第一部分】”
  • Part 2: CPU caches
  • Part 3 (Virtual memory)
  • Part 4 (NUMA systems)
  • Part 5 (What programmers can do - cache optimization)
  • Part 6 (What programmers can do - multi-threaded optimizations)
  • Part 7 (Memory performance tools)
  • Part 8 (Future technologies)
  • Part 9 (Appendices and bibliography)

和內存相關的論文,做一些程序的性能優化方面。

  • Memory Barriers: a Hardware View for Software Hackers。內存的讀寫屏障是線程並發訪問共享的內存數據時,從程序本身、編譯器到 CPU 都必須遵循的一個規範。有了這個規範,才能保證訪問共享的內存數據時,一個線程對該數據的更新能被另一個線程以正確的順序感知到。在 SMP(對稱多處理)這種類型的多處理器系統(包括多核系統)上,這種讀寫屏障還包含了復雜的緩存一致性策略。這篇文章做了詳細解釋。
  • A Tutorial Introduction to the ARM and POWER Relaxed Memory Models,對 ARM 和 POWER 的寬松內存模型的一個教程式的簡介。本篇文章的焦點是 ARM 和 POWER 體系結構下多處理器系統內存並發訪問一致性的設計思路和使用方法。與支持較強的 TSO 模型的 x86 體系結構不同,ARM 和 POWER 這兩種體系結構出於對功耗和性能的考慮,使用了一種更為寬松的內存模型。本文詳細討論了 ARM 和 POWER 的模型。
  • x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors,介紹 x86 的多處理器內存並發訪問的一致性模型 TSO。

內存管理方面的 lib 庫。目前而言,BSD 的 jemalloc 有很大的影響力。

  • ptmalloc 是 glibc 的內存分配管理。
  • tcmalloc 是 Google 的內存分配管理模塊,全稱是 Thread-Caching malloc,基本上來說比 glibc 的 ptmalloc 快兩倍以上。
  • jemalloc 是 BSD 提供的內存分配管理。其論文為 A Scalable Concurrent malloc(3) Implementation for FreeBSD,這是一個可以並行處理的內存分配管理器。

關於 C 的這些內存分配器,可以參看 Wikipedia 的 “C Dynamic Memory Allocation”這個詞條。

下面是幾篇不錯的文章,感覺一下上面那三種內存分配器的一些比較和工程實踐。

  • ptmalloc,tcmalloc 和 jemalloc 內存分配策略研究
  • 內存優化總結:ptmalloc、tcmalloc 和 jemalloc
  • Scalable memory allocation using jemalloc
  • Decreasing RAM Usage by 40% Using jemalloc with Python & Celery

計算機網絡

網絡學習

《計算機網絡(第五版)》,這本中有很多細節。全書按照網絡協議模型自下而上(物理層、數據鏈路層、介質訪問控制層、網絡層、傳輸層和應用層)有系統地介紹了計算機網絡的基本原理,並結合 Internet 給出了大量的協議實例。

這本書還與時俱進地引入了最新的網絡技術,包括無線網絡、3G 蜂窩網絡、RFID 與傳感器網絡、內容分發與 P2P 網絡、流媒體傳輸與 IP 語音,以及延遲容忍網絡等。另外,本書針對當前網絡應用中日益突出的安全問題,用了一整章的篇幅對計算機網絡的安全性進行了深入討論,而且把相關內容與最新網絡技術結合起來闡述。這本書讀起來並不枯燥,因為其中有很多小故事和小段子。

兩個網上的教程和講義也可以讓人入門。

  • 渥汰華大學的一個課程講義你也可以一看 Computer Network Design 。
  • GeeksforGeeks 上也有一個簡單的 Computer Network Tutorials 。

網絡調優

實用的可以操作的技術。

  • 《Linux 的高級路由和流量控制 HowTo》(Linux Advanced Routing & Traffic Control HOWTO ),這是一個非常容易上手的關於 iproute2、流量整形和一點 netfilter 的指南。
  • 關於網絡調優,你可以看一下這個文檔 Red Hat Enterprise Linux Network Performance Tuning Guide。
  • 還有一些網絡工具能夠幫上你的大忙,這裏有一個網絡工具的 Awesome 列表 Awesome Pcap Tools ,其中羅列了各種網絡工具,能夠讓你更從容地調試網絡相關的程序。
  • Making Linux TCP Fast ,一篇非常不錯的 TCP 調優的論文。
  • 下面是在 PackageCloud 上的兩篇關於 Linux 網絡棧相關的底層文章。
    • Monitoring and Tuning the Linux Networking Stack: Receiving Data
    • Monitoring and Tuning the Linux Networking Stack: Sending Data

網絡協議

讀 RFC 有幾個好處,一方面可以學習技術,另一方面,你可以通過 RFC 學習到一個好的技術文檔是怎麽寫的,還能看到各種解決問題的方案和思路。

對於第 2 層鏈路層,需要了解一下 ARP:

  • RFC 826 - An Ethernet Address Resolution Protocol

以及 Tunnel 相關的協議:

  • RFC 1853 - IP in IP Tunneling
  • RFC 2784 - Generic Routing Encapsulation (GRE)
  • RFC 2661 - Layer Two Tunneling Protocol “L2TP”
  • RFC 2637 - Point-to-Point Tunneling Protocol (PPTP)

對於第 4 層,最需要了解的是 TCP/IP 。《TCP 的那些事兒(上)》和《TCP 的那些事兒(下)》兩篇文章。

  • RFC 793 - Transmission Control Protocol - 最初的 TCP 標準定義,但不包括 TCP 相關細節。
  • RFC 813 - Window and Acknowledgement Strategy in TCP - TCP 窗口與確認策略,並討論了在使用該機制時可能遇到的問題及解決方法。
  • RFC 879 - The TCP Maximum Segment Size and Related Topics - 討論 MSS 參數對控制 TCP 分組大小的重要性,以及該參數與 IP 分段大小的關系等。
  • RFC 896 - Congestion Control in IP/TCP Internetworks - 討論擁塞問題和 TCP 如何控制擁塞。
  • RFC 2581 - TCP Congestion Control - 描述用於擁塞控制的四種機制:慢啟動、擁塞防禦、快重傳和快恢復。後面這個 RFC 被 RFC 5681 所更新。還有 RFC 6582 - The NewReno Modification to TCP’s Fast Recovery Algorithm 中一個改進的快速恢復算法。
  • RFC 2018 - TCP Selective Acknowledgment Options - TCP 的選擇確認。
  • RFC 2883 - An Extension to the Selective Acknowledgement (SACK) Option for TCP - 對於 RFC 2018 的改進。
  • RFC 2988 - Computing TCP’s Retransmission Timer - 討論與 TCP 重傳計時器設置相關的話題,重傳計時器控制報文在重傳前應等待多長時間。也就是經典的 TCP Karn/Partridge 重傳算法。
  • RFC 6298 - Computing TCP’s Retransmission Timer - TCP Jacobson/Karels Algorithm 重傳算法。

經典論文《Congestion Avoidance and Control》。

關於 Linux 下的 TCP 參數,TCP 的 man page 。

對於第 7 層協議,HTTP 協議是重點要學習的。

《HTTP 權威指南 》,這本書有點厚,可以當參考書來看。這本書中沒有提到 HTTP/2 的事,但是可以讓你了解到 HTTP 協議的絕大多數特性。

HTTP 1.1 的原始 RFC 是 1999 年 6 月的 RFC 2616,但其在 2014 後很快被下面這些 RFC 給取代了。

  • RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
  • RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
  • RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
  • RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
  • RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
  • RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication

關於HTTP/2,這是 HTTP 的一個比較新的協議,它於 2015 年被批準通過,現在基本上所有的主流瀏覽器都默認啟用這個協議。所以,你有必要學習一下這個協議。下面是相關的學習資源。

  • Gitbook - HTTP/2 詳解
  • http2 explained(中譯版)
  • HTTP/2 for a Faster Web
  • Nginx HTTP/2 白皮書
  • HTTP/2 的兩個 RFC:
    • RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2) ,HTTP/2 的協議本身
    • RFC 7541 - HPACK: Header Compression for HTTP/2 ,HTTP/2 的壓縮算法

Wikipedia 的 Internet Protocol Suite 上看看,這是一個很不錯的網絡協議的詞條匯集地。

極客時間-左耳聽風-程序員攻略-Linux系統、內存和網絡