Linux Kernel in a Nutshell · Chương 8 · Công thức cấu hình nhânChapter 8 · Kernel Configuration Recipes
Mức đọcLevel

Phần II · Tùy biến nhân · Chương 8Part II · Customizing a Kernel · Chapter 8

Sổ công thức: bật đúng tùy chọn cho đúng phần cứng Sổ tay “bật cái gì cho cái gì” The recipe book: switching on the right option for the right hardware

Kroah-Hartman mở chương bằng một câu đóng vai trò lời hứa trả công: các chương trước đã dạy cơ chế cấu hình lại nhân, còn phần thưởng nằm ở chương này — nơi tập hợp tất cả những kiểu thay đổi phổ biến nhất mà người ta cần làm với nhân của mình, kèm hướng dẫn cụ thể 1. Đây là chương duy nhất của cuốn sách có hình dạng một quyển sổ công thức: bảy nhóm — ổ đĩa, thiết bị, CPU, mạng, hệ tệp, bảo mật, gỡ lỗi — mỗi nhóm là một chuỗi đường dẫn menu phải đi qua.

Mấy chương trước dạy bạn cách chỉnh nhân. Chương này cho bạn công thức: muốn dùng USB thì bật cái gì, muốn dùng Wi-Fi thì bật cái gì, muốn máy chạy mát hơn thì bật cái gì 1. Giống sách nấu ăn: mỗi món một danh sách nguyên liệu. Nhớ nhé: chương này để tra, không phải để học thuộc.

Kroah-Hartman opens the chapter with a sentence that reads like a payback promise: previous chapters taught the mechanics of reconfiguring the kernel, and the payoff comes here, where you find all the most common kinds of changes people need to make to their kernels, with specific instructions on how to do so 1. This is the one chapter shaped like a cookbook: seven groups — disks, devices, CPU, networking, filesystems, security, debugging — each a chain of menu paths to walk.

Cấu trúc lặp lại của mọi công thức đáng để nhận ra sớm, vì nó là bài học thật sự của chương: (1) dò phần cứng bằng một lệnh — thường là lspci, lsusb hoặc cat /proc/cpuinfo; (2) bật lớp hạ tầng mà thiết bị cưỡi lên — PCI, SCSI, USB, mạng; (3) bật driver cụ thể của chính con chip bạn có 12. Ba nhịp đó không đổi qua cả bảy nhóm, và chúng vẫn đúng với nhân hôm nay dù tên tùy chọn đã thay đổi nhiều.

Luận điểm chương 8. Cấu hình nhân không phải là đoán, mà là một chuỗi ánh xạ có thể tra cứu: phần cứng bạn dò được → lớp hạ tầng nó phụ thuộc vào → driver cụ thể của nó. Ông dựng cả chương theo đúng thứ tự đó, từ lspci đến đường dẫn menu 12.

Ý chính. Đừng đoán xem phải bật gì. Hãy hỏi máy xem nó có thiết bị gì, rồi bật lớp chung trước, cuối cùng mới bật driver riêng 12. Nhớ nhé: dò trước, bật sau.

Chapter 8 thesis. Kernel configuration is not guesswork but a lookup chain: the hardware you detect → the infrastructure layer it rides on → its specific driver. He builds the whole chapter in exactly that order, from lspci to the menu path 12.

Cụm khái niệm 01 · trang 63–66Concept cluster 01 · pages 63–66

Ổ đĩa: ba con đường tới cùng một khối dữ liệu Ổ cứng và USB: ba đường vào Disks: three roads to the same block of data

Ông mở nhóm đầu tiên bằng một ghi nhận đơn giản: nhân Linux hỗ trợ rất nhiều loại ổ đĩa khác nhau, và phần này chỉ ra cách cấu hình để nhận được hầu hết các loại bộ điều khiển đĩa phổ biến 1. Điều đáng chú ý là cả ba con đường — USB, IDE, SATA — đều hội tụ về cùng một chỗ trong nhân: tầng SCSI. Hiểu được điều đó thì ba công thức bỗng trở thành một.

Máy bạn có thể gắn ổ cứng theo nhiều kiểu: cắm USB, cắm cáp IDE cũ, hay cắm cáp SATA mới. Nhân Linux hỗ trợ hết 1. Điều hay là: cuối cùng cả ba kiểu đều đi chung một con đường trong nhân, gọi là tầng SCSI. Nhớ nhé: khác cổng cắm, chung đường đi.

He opens the first group with a plain observation: the Linux kernel supports a wide range of different disk types, and this section shows how to configure the kernel so that it supports most of the more common types of disk controllers 1. What is worth noticing is that all three roads — USB, IDE, SATA — converge on the same place inside the kernel: the SCSI layer. Once you see that, three recipes collapse into one.

Tầng SCSI như một giao thức chung. Ông giải thích thẳng: một thiết bị lưu trữ USB thực chất là một thiết bị SCSI nói chuyện qua kết nối USB, nên hệ con SCSI bắt buộc phải bật 1. Với SATA cũng vậy — thư viện libata lo phần đặc thù SATA, nhưng dùng tầng SCSI để nói chuyện với tầng khối 1.

SCSI là ngôn ngữ chung. Cái USB của bạn, bên trong nhân, được coi như một ổ SCSI nói qua dây USB 1. Ổ SATA cũng mượn đúng ngôn ngữ đó 1. Nhớ nhé: quên bật SCSI là hỏng cả hai.

The SCSI layer as a shared protocol. He says it outright: a USB storage device is in reality a USB SCSI device talking over a USB connection, so the SCSI subsystem must be enabled 1. The same holds for SATA — the libata library handles the SATA-specific work but uses the SCSI layer to talk to the block layer 1.

USB flash → SCSI Device Support
            → SCSI disk support
            → USB Mass Storage
SATA      → SCSI + libata + PIIX/ICH

USB → bật SCSI → bật “SCSI disk”
       → bật “USB Mass Storage”
SATA → bật SCSI → bật SATA → chọn chip

USB flash → SCSI Device Support
             → SCSI disk support
             → USB Mass Storage
SATA       → SCSI + libata + PIIX/ICH

  1. usb storage

    USB Storage — ba nấc, không phải một USB — phải bật ba thứ USB Storage — three rungs, not one

    Công thức có ba bước, và bước nào thiếu cũng làm hỏng cả: bật SCSI Device Support, rồi SCSI disk support để thiết bị mount được đúng cách, rồi USB Mass Storage support ở dạng module 1. Trước đó, hỗ trợ USB nói chung phải chạy được đã — ông trỏ người đọc sang công thức “USB” ở nhóm sau 1.

    Muốn cắm USB lưu trữ thì phải bật ba thứ: hỗ trợ SCSI, hỗ trợ “đĩa SCSI”, và “USB Mass Storage” 1. Thiếu một là không thấy ổ đâu. Nhớ nhé: đủ ba nấc mới lên tới đích.

    The recipe has three steps and missing any one breaks the whole: enable SCSI Device Support, then SCSI disk support so the device can be mounted properly, then USB Mass Storage support as a module 1. Before all that, general USB support must already be working — he points the reader to the “USB” recipe in the next group 1.

    Bạn thấy nó ở đâu. Cách dò của ông là chạy /usr/sbin/lsusb -v | grep Storage; nếu ra dòng bInterfaceClass 8 Mass Storage thì máy đang có một thiết bị lưu trữ USB 1.

    Gặp ở đâu. Gõ lsusb -v | grep Storage; thấy chữ Mass Storage là máy có USB lưu trữ 1. Nhớ nhé: máy tự khai ra hết.

    Where you see it. His detection step is to run /usr/sbin/lsusb -v | grep Storage; if it prints bInterfaceClass 8 Mass Storage, a USB storage device is present on the system 1.

    Thiết bị lệch chuẩn

    Ông ghi chú một chi tiết dễ bỏ qua: một số thiết bị lưu trữ USB được liệt kê thành mục cấu hình riêng, vì chúng không tuân theo đặc tả USB chuẩn và cần mã đặc biệt; nếu bạn có một trong số đó, phải bật đúng mục của nó 1. Đây là lý do một cái USB “y hệt” cái khác vẫn có thể không chạy.

    Ký hiệu [*] và [M]

    Trong mọi công thức của chương, [*] nghĩa là dựng thẳng vào nhân và [M] nghĩa là dựng thành module. Ông chọn [M] cho USB Mass Storage support nhưng [*] cho SCSI Device Support 1 — hạ tầng thì dựng cứng, driver rời thì để nạp khi cần.

  2. IDE disks

    IDE — công thức của sách, và số phận của nó IDE — kiểu ổ cứng đời cũ IDE — the book's recipe, and its fate

    Năm 2006 ông viết rằng đĩa IDE là loại đĩa PC phổ biến nhất 1. Công thức: bật PCI Support, rồi ATA/ATAPI/MFM/RLL support cùng Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support, rồi — để có đường lui nếu chọn sai chip — bật thêm generic/default IDE chipset support, và cuối cùng PCI IDE chipset support để mở ra danh sách dài các loại bộ điều khiển 1.

    Hồi 2006, ổ IDE là loại thông dụng nhất trên máy bàn 1. Công thức: bật PCI, bật khối ATA/IDE, bật thêm bản “chung chung” để phòng chọn sai, rồi mới chọn đúng loại chip 1. Nhớ nhé: chọn thêm bản dự phòng thì đỡ hỏng.

    In 2006 he wrote that IDE disks are the most common type of PC disks 1. The recipe: enable PCI Support, then ATA/ATAPI/MFM/RLL support with Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support, then — as a good backup in case you pick the wrong type — generic/default IDE chipset support, and finally PCI IDE chipset support, which opens a lengthy submenu of controller types 1.

    Đã đổi kể từ đó. Đây là công thức lỗi thời rõ nhất của chương. Cơ sở dữ liệu LKDDB ghi nhận tùy chọn CONFIG_IDE mang nhãn “DEPRECATED” từ 2.6.33 và có mặt lần cuối ở nhân 5.13 10; bản 5.14 gỡ hẳn driver IDE cũ vì đã bị libata thay thế 8. Phần cứng PATA vẫn chạy — chỉ là qua libata 9.

    Giờ khác rồi. Tùy chọn IDE cũ đã bị bỏ khỏi nhân từ bản 5.14 810; ổ đời cũ nay chạy bằng libata 9. Nhớ nhé: đọc công thức này như đọc sử.

    Changed since. This is the chapter's most clearly time-bound recipe. LKDDB records CONFIG_IDE carrying a “DEPRECATED” prompt from 2.6.33 and appearing for the last time in kernel 5.13 10; 5.14 removed the legacy IDE driver outright as obsoleted by libata 8. PATA hardware still works — it just goes through libata now 9.

  3. serial ATA

    SATA — bốn nấc, và đây là nhánh còn sống SATA — kiểu ổ cứng đời mới SATA — four rungs, and this is the branch that survived

    Ông gọi SATA là kẻ kế vị của bộ điều khiển IDE 1, và công thức của nó có bốn nấc: PCI Support → SCSI Device Support → SCSI disk support → Serial ATA (SATA) support nằm trong mục SCSI low-level drivers, rồi chọn đúng chip; ví dụ ông đưa ra là phần lớn bo mạch Intel cần driver Intel PIIX/ICH SATA support 1.

    SATA là đời sau của IDE 1. Bật theo bốn nấc: PCI → SCSI → “đĩa SCSI” → SATA, rồi chọn chip; máy Intel thường là PIIX/ICH 1. Nhớ nhé: chọn đúng tên chip trong danh sách lspci.

    He calls SATA the successor to the IDE disk controller 1, and its recipe has four rungs: PCI Support → SCSI Device Support → SCSI disk support → Serial ATA (SATA) support under SCSI low-level drivers, then the specific controller; his example is that most Intel motherboards need the Intel PIIX/ICH SATA driver 1.

    Bạn thấy nó ở đâu. Cái tên libata mà ông nhắc tới năm 2006 chính là thứ về sau nuốt luôn cả nhánh IDE: hôm nay tài liệu nhân mô tả libata là thư viện dùng chung cho cả Serial ATA lẫn Parallel ATA 9, và LKDDB ghi mục chọn CONFIG_ATA với nhãn “Serial ATA and Parallel ATA drivers (libata)” 10.

    Gặp ở đâu. Cái thư viện libata trong sách nay lo cả ổ cũ lẫn ổ mới 910. Nhớ nhé: nhánh SATA là nhánh sống sót.

    Where you see it. The libata name he mentions in 2006 is exactly what later absorbed the IDE branch: today the kernel documents libata as the shared library for both Serial ATA and Parallel ATA 9, and LKDDB lists CONFIG_ATA with the prompt “Serial ATA and Parallel ATA drivers (libata)” 10.

    Ghi CD: hai nhánh, một quy tắc

    Ông kết nhóm ổ đĩa bằng câu ngắn gọn nhất chương: nếu nhân đọc được CD-ROM thì nó cũng ghi được CD-ROM 1. Hai nhánh: ổ CD-ROM IDE chỉ cần thêm Include IDE/ATAPI CDROM support, còn ổ SATA/SCSI cần SCSI CDROM support 1.

    Đường dẫn lspci

    Trong một chú thích chân trang, ông thừa nhận gần như mọi bản phân phối đặt lspci ở /usr/sbin/ nhưng một số nơi khác — và bảo người đọc chạy which lspci để tìm 1. Một chi tiết nhỏ nhưng nói lên giọng của cả chương: không giả định gì về máy của bạn.

Cụm khái niệm 02 · trang 66–70Concept cluster 02 · pages 66–70

Thiết bị: bus trước, driver sau Thiết bị cắm thêm: bật cổng trước Devices: the bus first, the driver second

Câu mở đầu nhóm này là câu tự hào nhất của cả chương: Linux hỗ trợ một dải thiết bị rộng lớn — nhiều hơn bất kỳ hệ điều hành nào từng có 2. Nhưng ngay sau đó là một quy tắc kỷ luật: muốn dùng thiết bị USB, trước hết phải bật hỗ trợ cho bộ điều khiển USB — thứ điều khiển đường kết nối USB trên máy 2. Bus trước, driver sau, không có ngoại lệ.

Linux nhận được nhiều loại thiết bị hơn mọi hệ điều hành khác 2. Nhưng có luật: muốn dùng thiết bị USB thì phải bật “cái cổng USB” trong nhân trước đã 2. Nhớ nhé: có cổng rồi mới có đồ cắm vào cổng.

This group's opening line is the proudest in the chapter: Linux supports a vast range of different types of devices — more than any other operating system ever has 2. What follows immediately is a rule of discipline: to use a USB device you must first enable support for a USB controller, the thing that drives the USB connection on the machine 2. Bus first, driver second, no exceptions.

Bộ điều khiển chủ (host controller). Con chip trên bo mạch nói chuyện với dây cáp. Với USB, ông liệt kê ba loại — EHCI HCD (USB 2.0), OHCI HCD, UHCI HCD (most Intel and VIA) — và nói rõ: bật cả ba là an toàn nếu bạn không biết mình có loại nào 2.

Bộ điều khiển là gì. Là con chip giữ cái cổng cắm. USB có ba loại; ông bảo cứ bật cả ba cho chắc nếu không biết máy mình loại nào 2. Nhớ nhé: không chắc thì bật hết, không sao cả.

Host controller. The chip on the board that speaks to the cable. For USB he lists three — EHCI HCD (USB 2.0), OHCI HCD, UHCI HCD (most Intel and VIA) — and says plainly that it is safe to enable them all if you do not know which you have 2.

PCI Support
  └ Support for Host-side USB  [M]
     ├ EHCI / OHCI / UHCI     [M]
     └ driver của thiết bị       [M]

Bật PCI
  → bật USB
     → bật cả ba loại chip USB
     → bật driver của món đồ

PCI Support
  └ Support for Host-side USB  [M]
     ├ EHCI / OHCI / UHCI     [M]
     └ the device's own driver  [M]

  1. usb

    USB — và cái bẫy “driver nằm ở menu khác” USB — có driver nằm ở chỗ khác USB — and the “driver lives in another menu” trap

    Sau ba nấc PCI → USB → host controller, ông cảnh báo một điều dễ làm người đọc bế tắc: phần lớn driver thiết bị USB nằm dưới mục USB chính, nhưng một số loại — video USB, DVB, âm thanh — lại được liệt kê trong mục quản lý riêng loại thiết bị đó. Ví dụ driver âm thanh USB nằm dưới menu Sound, ở mục USB Devices → USB Audio/MIDI driver 2.

    Đa số driver USB nằm trong mục USB. Nhưng loa/tai nghe USB thì lại nằm trong mục Âm thanh, chứ không nằm trong mục USB 2. Nhớ nhé: tìm theo loại thiết bị, đừng chỉ tìm theo cổng cắm.

    After the three rungs PCI → USB → host controller, he warns about something that leaves readers stuck: most USB device drivers sit under the main USB section, but some kinds — USB video, DVB and sound — are listed in the section controlling that class of device. The USB sound driver, for instance, lives under the Sound menu at USB Devices → USB Audio/MIDI driver 2.

    Bạn thấy nó ở đâu. Lệnh dò của ông là /usr/sbin/lspci | grep USB; ví dụ trong sách trả về năm bộ điều khiển Intel ICH5 — bốn UHCI và một EHCI 2, đúng kiểu bo mạch năm 2006: nhiều cổng USB 1.1 cộng một cổng USB 2.0 chung.

    Gặp ở đâu. Gõ lspci | grep USB để xem máy có mấy bộ điều khiển USB. Máy ví dụ trong sách có tận năm cái 2. Nhớ nhé: một máy có thể có nhiều cổng khác loại.

    Where you see it. His detection command is /usr/sbin/lspci | grep USB; the book's example returns five Intel ICH5 controllers — four UHCI and one EHCI 2, exactly the 2006 board shape: several USB 1.1 ports plus one shared USB 2.0 controller.

  2. IEEE 1394 / FireWire

    FireWire — bus nhanh của một thời FireWire — cổng nhanh đời cũ FireWire — the fast bus of an era

    Ông giới thiệu IEEE 1394 bằng đúng cái tên mà người ta quen gọi — FireWire, tên do Apple phổ biến — và mô tả nó là một bus tốc độ cao nối thiết bị ngoài, giống như USB 2. Công thức: PCI → IEEE 1394 (FireWire) support → chọn bộ điều khiển (OHCI-1394 hoặc Texas Instruments PCILynx) → chọn driver giao thức: SBP-2 cho ổ cứng, Ethernet over 1394, OHCI-1394 Video, Raw IEEE1394 I/O 2.

    FireWire là cổng nhanh kiểu cũ, Apple đặt tên, dùng để nối đồ bên ngoài giống USB 2. Bật theo bốn nấc: PCI → FireWire → chip điều khiển → giao thức (ổ cứng, mạng, video) 2. Nhớ nhé: cùng một khuôn ba nhịp như USB.

    He introduces IEEE 1394 by the name people actually use — FireWire, the name Apple publicised — and describes it as a high-speed bus connecting external devices, much as USB does 2. The recipe: PCI → IEEE 1394 (FireWire) support → pick the host controller (OHCI-1394 or Texas Instruments PCILynx) → pick the protocol drivers: SBP-2 for hard disks, Ethernet over 1394, OHCI-1394 Video, Raw IEEE1394 I/O 2.

    Đã đổi kể từ đó. Ngăn xếp ieee1394 mà sách hướng dẫn về sau bị thay bằng ngăn xếp “juju”: LKDDB ghi CONFIG_IEEE1394 mang nhãn “Legacy alternative FireWire driver stack” ở 2.6.31–2.6.36 rồi biến mất, trong khi CONFIG_FIREWIRE chạy liên tục từ 2.6.26 đến nay 26.

    Giờ khác rồi. Bộ mã FireWire trong sách đã bị thay bằng bộ mới; tên tùy chọn giờ là CONFIG_FIREWIRE 26. Nhớ nhé: ý tưởng còn, tên đổi.

    Changed since. The ieee1394 stack the book walks through was later replaced by the “juju” stack: LKDDB records CONFIG_IEEE1394 prompted as “Legacy alternative FireWire driver stack” across 2.6.31–2.6.36 and then gone, while CONFIG_FIREWIRE has run continuously since 2.6.26 26.

  3. hotplug buses

    PCI Hotplug và PCMCIA — cắm nóng, hai thế hệ Khe cắm thẻ ở laptop PCI Hotplug and PCMCIA — hot-plugging, two generations

    Với hai bus này, ông bỏ hẳn bước lspci và thay bằng một lời khuyên thực dụng đáng nhớ: hãy nhìn vào phần cứng xem có cắm được thẻ ExpressCard (hoặc thẻ PCMCIA) vào đó không 2. Công thức ExpressCard: PCI → Support for PCI Hotplug (EXPERIMENTAL) → ACPI PCI Hotplug driver cho phần lớn laptop, cộng PCI Express Hotplug driver 2. Còn PCMCIA thì bật cả hai chế độ 16-bit PCMCIA và 32-bit CardBus để phủ dải thiết bị rộng nhất, với cầu nối phổ biến nhất là loại “yenta-like” 2.

    Với khe cắm thẻ, ông bảo cứ nhìn thẳng vào máy xem có cái khe đó không 2. Rồi bật hỗ trợ cắm nóng, và với thẻ PCMCIA thì bật cả hai loại 16-bit và 32-bit cho chắc 2. Nhớ nhé: đôi khi cách dò tốt nhất là dùng mắt.

    For these two buses he drops the lspci step entirely and substitutes a memorable piece of practicality: look at the hardware to see whether an ExpressCard (or a PCMCIA card) can be plugged into it 2. The ExpressCard recipe: PCI → Support for PCI Hotplug (EXPERIMENTAL) → ACPI PCI Hotplug driver for most laptops, plus PCI Express Hotplug driver 2. For PCMCIA, enable both 16-bit PCMCIA support and 32-bit CardBus support to cover the widest range of devices, with the most common bridge being the “yenta-like” controller 2.

    Nhãn EXPERIMENTAL năm 2006

    Nhiều tùy chọn trong chương mang nhãn (EXPERIMENTAL) — PCI Hotplug, các target Snapshot/Mirror/Multipath của Device Mapper, RAID-10 25. Nhãn ấy là ảnh chụp năm 2006, không phải phán quyết vĩnh viễn: LKDDB cho thấy CONFIG_HOTPLUG_PCI vẫn còn trong nhân hiện hành 10.

    Hai thế hệ cùng tồn tại

    Ông nói rõ mối quan hệ: laptop mới đang chuyển sang định dạng ExpressCard, nên phần PCMCIA và phần PCI Hotplug trỏ sang nhau 2. Đây là kiểu chú thích khiến chương trở thành một lát cắt lịch sử phần cứng chứ không chỉ là danh sách tùy chọn.

  4. ALSA

    Âm thanh — ALSA lên ngôi, OSS lui về dĩ vãng Âm thanh: bật loa cho máy Sound — ALSA takes over, OSS recedes

    Ông viết rằng ALSA (Advanced Linux Sound Architecture) là hệ thống âm thanh hiện tại của nhân Linux, còn hệ cũ OSS đã bị khai tử và gần như toàn bộ driver cũ đã bị gỡ khỏi cây mã nguồn 2. Công thức: Sound Card Support → Advanced Linux Sound Architecture → nếu còn ứng dụng đời cũ thì bật thêm các API tương thích OSS Mixer API và OSS PCM (digital audio) API → chọn card của bạn trong mục PCI Devices 2.

    ALSA là hệ âm thanh hiện dùng của Linux; hệ cũ OSS gần như đã bị bỏ 2. Bật: hỗ trợ card âm thanh → ALSA → (nếu có phần mềm cũ thì bật thêm lớp tương thích OSS) → chọn card của bạn 2. Nhớ nhé: giữ lớp cũ chỉ khi thật sự cần.

    He writes that ALSA (Advanced Linux Sound Architecture) is the current sound system for the Linux kernel, and that the earlier OSS system has been deprecated with almost all of the older drivers removed from the source tree 2. The recipe: Sound Card Support → Advanced Linux Sound Architecture → if you have older applications, also enable the compatibility OSS Mixer API and OSS PCM (digital audio) API → pick your card under PCI Devices 2.

    Bạn thấy nó ở đâu. Dò bằng /usr/sbin/lspci | grep -i audio; máy ví dụ của ông trả về một Intel ICH5 AC'97 và một Creative SB Audigy 2. Dự đoán của ông đúng: CONFIG_SND vẫn là mục chọn ALSA trong nhân hiện hành 10.

    Gặp ở đâu. Gõ lspci | grep -i audio để xem card âm thanh của bạn là gì 2. ALSA đến giờ vẫn là hệ âm thanh của nhân 10. Nhớ nhé: đây là công thức già mà chưa cũ.

    Where you see it. Detect with /usr/sbin/lspci | grep -i audio; his example machine returns an Intel ICH5 AC'97 and a Creative SB Audigy 2. His call held: CONFIG_SND is still the ALSA entry point in current kernels 10.

Cụm khái niệm 03 · trang 71–75Concept cluster 03 · pages 71–75

CPU, nguồn và bộ nhớ: chỗ bạn đổi hành vi, không phải khả năng Bộ xử lý và pin: chỉnh tính nết của máy CPU, power and memory: where you change behaviour, not capability

Ông đặt mục tiêu của nhóm này rất rõ: nếu bạn muốn nhân Linux chạy nhanh nhất có thể cho đúng bộ xử lý và loại phần cứng của mình, có vài tùy chọn cho phép vắt nốt chút hiệu năng cuối cùng ra khỏi phần cứng 3. Khác biệt căn bản so với hai nhóm trước: ở đây bật sai không làm thiết bị biến mất, mà làm máy chậm đi, nóng hơn, hoặc hết pin sớm hơn.

Phần này để chỉnh cho máy chạy nhanh hơn, hợp với đúng bộ xử lý của bạn 3. Chỉnh sai thì máy không hỏng, chỉ chạy chậm hoặc tốn pin thôi. Nhớ nhé: đây là chỗ chỉnh “tính nết”, không phải “bộ phận”.

He states the goal of this group plainly: if you wish to have the Linux kernel run as fast as possible for your specific processor and hardware type, a few options let you get the last bit of performance out of the hardware 3. The difference from the first two groups is fundamental: here a wrong setting does not make a device vanish, it makes the machine slower, hotter, or shorter on battery.

Trưng dụng (preemption). Định nghĩa của ông ngắn và chính xác: khả năng nhân tự ngắt chính mình giữa lúc đang làm việc khác, để lo một việc có độ ưu tiên cao hơn — chẳng hạn cập nhật một chương trình âm thanh hay video 3. Máy chủ và máy bàn có yêu cầu tải khác hẳn nhau, nên nhân cho phép chọn chế độ 3.

Trưng dụng là gì. Là chuyện nhân đang làm việc A thì dừng lại để làm việc B gấp hơn, ví dụ phát nhạc cho khỏi giật 3. Máy chủ và máy nhà cần kiểu khác nhau 3. Nhớ nhé: máy chủ cần đều tay, máy nhà cần nhanh tay.

Preemption. His definition is short and exact: the ability of the kernel to interrupt itself while it is doing something else, in order to work on something of higher priority, such as updating a sound or video program 3. Servers and desktops have very different workload requirements, so the kernel offers a choice of modes 3.

Preemption Model
(X) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)

Chọn một kiểu:
· Máy chủ — không ngắt ép
· Máy bàn — ngắt vừa phải
· Máy bàn nhạy — ngắt nhiều nhất

Preemption Model
(X) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)

  1. processor family

    Chọn đúng họ CPU — và cái giá của việc chọn “chung chung” Khai đúng tên bộ xử lý Picking the right CPU family — and the price of “generic”

    Dò bằng cat /proc/cpuinfo | grep "model name" 3, rồi chọn hai thứ: Subarchitecture Type — mặc định là PC-compatible, và chỉ chọn khác nếu máy bạn thuộc các loại đặc biệt như NUMAQ hay Unisys ES7000 3 — và Processor family, danh sách dài từ 386 tới Opteron/Athlon64/Hammer/K8 3. Ông cũng chỉ ra lối thoát: nếu muốn một nhân chạy được trên mọi loại máy trong danh sách, hãy chọn Generic architecture 3.

    Gõ cat /proc/cpuinfo | grep "model name" để biết CPU của bạn tên gì 3. Rồi chọn đúng dòng trong danh sách. Nếu muốn một nhân chạy được cho nhiều máy khác nhau thì chọn loại “chung” 3. Nhớ nhé: chọn riêng thì nhanh, chọn chung thì tiện.

    Detect with cat /proc/cpuinfo | grep "model name" 3, then pick two things: the Subarchitecture Type — which defaults to PC-compatible, and should be changed only if your machine is one of the special kinds such as NUMAQ or Unisys ES7000 3 — and the Processor family, a long list running from 386 to Opteron/Athlon64/Hammer/K8 3. He also points to the escape hatch: if you want one kernel that runs on all the listed machine types, select Generic architecture 3.

    Bạn thấy nó ở đâu. Ông không giải thích hết ở đây mà trỏ thẳng sang Chương 11, mục M386, để có mô tả đầy đủ về cách chọn bộ xử lý tùy theo dải máy bạn muốn nhân chạy trên đó 3 — một ví dụ của cách cuốn sách tự nối chương này sang chương kia.

    Gặp ở đâu. Muốn hiểu kỹ hơn thì sách bảo lật sang Chương 11, mục M386 3. Nhớ nhé: công thức ngắn, tra cứu dài — hai phần bổ cho nhau.

    Where you see it. He does not explain it all here but points straight at Chapter 11's M386 entry for the full description of how to pick the proper processor type given the range of machines you want the kernel to run on 3 — an example of how the book stitches recipe to reference.

    SMP: đừng bỏ phí lõi

    Lời khuyên của ông cho máy nhiều CPU, siêu phân luồng hoặc lõi kép rất dứt khoát: bật Symmetric multi-processing support, vì nếu không bạn sẽ lãng phí các bộ xử lý còn lại do hoàn toàn không dùng tới chúng 3. Một số mục trong danh sách Subarchitecture cũng chỉ hiện ra khi SMP đã được chọn 3.

    Phụ thuộc chéo giữa các tùy chọn

    Tùy chọn Preempt The Big Kernel Lock chỉ chọn được nếu trước đó đã chọn Preemptible Kernel hoặc Symmetric multi-processing support 3. Đây là Kconfig dependency hiện ra dưới dạng “mục biến mất khỏi menu” — nguyên nhân phổ biến nhất khiến người mới tưởng mình tìm nhầm chỗ.

  2. preemption model

    Ba chế độ trưng dụng — và cái khóa lớn đã chết Ba kiểu “ngắt việc” của nhân Three preemption models — and the big lock that died

    Ba lựa chọn của sách trải từ máy chủ sang máy bàn độ trễ thấp 3. Muốn nhân nhạy hơn nữa, ông chỉ thêm một nấc: cho phép ngắt cả một trong những khóa nội bộ chính của nhân, qua tùy chọn Preempt The Big Kernel Lock 3.

    Có ba kiểu: hợp cho máy chủ, hợp cho máy bàn, và hợp cho máy cần phản ứng thật nhanh 3. Muốn nhanh hơn nữa thì bật thêm một tùy chọn về “khóa lớn” trong nhân 3. Nhớ nhé: nhanh phản ứng thường đổi bằng một chút hiệu năng tổng.

    The book's three choices run from server to low-latency desktop 3. To make the kernel even more responsive to higher-priority tasks, he offers one more rung: allowing interruptions to one of the kernel's main internal locks, via Preempt The Big Kernel Lock 3.

    Đã đổi kể từ đó. Tùy chọn đó không còn tồn tại. LKDDB ghi CONFIG_PREEMPT_BKL xuất hiện lần cuối ở nhân 2.6.25 13, và chính Big Kernel Lock bị gỡ hẳn khỏi cây mã nguồn ở 2.6.39 13. Ở đầu kia của dải, chế độ real-time đã đi ngược lên: PREEMPT_RT được hợp nhất vào nhân chính ở bản 6.12, sau khoảng hai mươi năm phát triển ngoài luồng 22.

    Giờ khác rồi. Tùy chọn “khóa lớn” đã bị bỏ từ lâu 13, còn chế độ thời gian thực thì mới được đưa hẳn vào nhân ở bản 6.12 22. Nhớ nhé: ý tưởng “ngắt để kịp” vẫn sống, chỉ là bằng cơ chế khác.

    Changed since. That option no longer exists. LKDDB records CONFIG_PREEMPT_BKL appearing for the last time in 2.6.25 13, and the Big Kernel Lock itself was removed from the tree in 2.6.39 13. At the other end of the range the real-time mode moved the opposite way: PREEMPT_RT was merged into the mainline kernel in 6.12, after roughly twenty years out of tree 22.

  3. suspend / cpufreq

    Ngủ đông và điều tốc — hai công thức của laptop Ngủ đông và tiết kiệm pin Suspend and frequency scaling — the two laptop recipes

    Ngủ đông: bật Software Suspend, rồi khai báo phân vùng để lưu ảnh nhân qua mục Default resume partition — thường là phân vùng swap, tìm bằng /sbin/swapon -s 3. Ông cảnh báo rõ: phải chọn đúng phân vùng và không dùng phân vùng đang chứa dữ liệu của hệ thống 3; khi khởi động lại thì truyền resume=/dev/swappartition trên dòng lệnh nhân, hoặc noresume nếu không muốn khôi phục ảnh đã lưu 3. Điều tốc: bật CPU Frequency scaling, chọn các governor (performance, powersave, userspace, ondemand, conservative), chọn governor mặc định lúc khởi động, rồi chọn driver đúng CPU — ví dụ Intel Enhanced SpeedStep 3.

    Muốn máy “ngủ đông” rồi bật lại y nguyên: bật Software Suspend và khai đúng phân vùng swap để cất trạng thái 3. Cẩn thận: đừng khai nhầm phân vùng đang chứa dữ liệu 3. Muốn tiết kiệm pin: bật phần chỉnh tốc độ CPU rồi chọn kiểu chỉnh 3. Nhớ nhé: khai sai phân vùng là mất dữ liệu thật.

    Suspend: enable Software Suspend, then name the partition the kernel image is written to via Default resume partition — usually the swap partition, found with /sbin/swapon -s 3. He warns explicitly: make sure you specify the proper partition and do not use one the system holds data on 3; on the way back up, pass resume=/dev/swappartition on the kernel command line, or noresume if you do not want the saved image restored 3. Frequency scaling: enable CPU Frequency scaling, select the governors (performance, powersave, userspace, ondemand, conservative), choose the default one at boot, then the driver matching your CPU — for example Intel Enhanced SpeedStep 3.

    Bạn thấy nó ở đâu. Hai công thức này già đi rất chậm. Tài liệu nhân hiện hành vẫn mô tả đúng bộ governor ấy — performance, powersave, userspace, ondemand, conservative — trong CPU Performance Scaling 14; còn tham số khởi động resume= và noresume vẫn nằm trong danh mục tham số dòng lệnh nhân 15. Tên tùy chọn thì đã đổi: LKDDB ghi CONFIG_SOFTWARE_SUSPEND chỉ tồn tại tới 2.6.22, rồi CONFIG_HIBERNATION tiếp quản từ 2.6.23 15.

    Gặp ở đâu. Các kiểu chỉnh tốc độ CPU trong sách đến nay vẫn dùng 14, và tham số resume= vẫn còn 15. Chỉ cái tên tùy chọn ngủ đông là đổi thành HIBERNATION 15. Nhớ nhé: ý giữ nguyên, tên đổi.

    Where you see it. These two recipes age slowly. Current kernel documentation still describes that same governor set — performance, powersave, userspace, ondemand, conservative — under CPU Performance Scaling 14, and the resume= and noresume boot parameters are still in the kernel command-line list 15. The option name did change: LKDDB records CONFIG_SOFTWARE_SUSPEND surviving only to 2.6.22, with CONFIG_HIBERNATION taking over from 2.6.23 15.

  4. high memory / ACPI

    Bộ nhớ và ACPI — hai tùy chọn của thời 32-bit Bộ nhớ nhiều và quản lý nguồn Memory and ACPI — two options from the 32-bit era

    Ông giải thích gọn một nghịch lý phần cứng: Linux trên phần cứng Intel 32-bit truy cập được tới 64 GB bộ nhớ, nhưng không gian địa chỉ của bộ xử lý 32-bit chỉ có 4 GB — nên nhân phải ánh xạ phần dư sang vùng khác rồi chuyển sang khi cần 3. Vì thế có ba mô hình bộ nhớ theo dung lượng thật: dưới 1 GB, từ 1 đến 4 GB, và trên 4 GB, chọn trong mục High Memory Support với ba giá trị off / 4GB / 64GB 3. ACPI thì ông mô tả là chuẩn cho phép BIOS phối hợp với hệ điều hành để truy cập phần cứng một cách gián tiếp, và khuyến nghị bật nếu bạn dùng laptop 3.

    Máy 32-bit chỉ “nhìn” được 4 GB một lúc, nên nhân phải xoay xở để dùng được nhiều hơn 3. Bạn khai máy mình có bao nhiêu RAM để nhân khỏi làm việc thừa 3. Còn ACPI lo chuyện pin, quạt, nút nguồn — laptop thì nên bật 3. Nhớ nhé: khai đúng RAM, bật ACPI nếu xài laptop.

    He explains a hardware paradox compactly: Linux on 32-bit Intel hardware can access up to 64 GB of memory, but the address space of a 32-bit processor is only 4 GB — so the kernel maps the extra memory into another area and switches to it when tasks need it 3. Hence three memory models by actual size: under 1 GB, between 1 and 4 GB, and above 4 GB, chosen in High Memory Support with its three values off / 4GB / 64GB 3. ACPI he describes as a standard letting the BIOS work with the operating system to reach hardware indirectly, and recommends enabling it if you have a laptop 3.

    Bạn thấy nó ở đâu. Đây là công thức gắn chặt nhất với kiến trúc 32-bit. LKDDB ghi mục chọn CONFIG_HIGHMEM64G (“64GB”) tồn tại từ 2.6.24 và xuất hiện lần cuối ở nhân 6.14 10 — nghĩa là nếu bạn chạy x86-64 thì toàn bộ mục này không hiện ra, và điều đó là bình thường.

    Gặp ở đâu. Mục “bộ nhớ cao” chỉ có trên máy 32-bit đời cũ 10. Máy 64-bit ngày nay không thấy mục này, và như vậy là đúng. Nhớ nhé: không thấy mục nào đó, có khi vì máy bạn không cần.

    Where you see it. This is the recipe most tied to the 32-bit architecture. LKDDB records the CONFIG_HIGHMEM64G (“64GB”) choice running from 2.6.24 and appearing for the last time in kernel 6.14 10 — meaning that on x86-64 the whole menu simply does not appear, and that is correct.

    Danh sách driver ACPI

    Ông liệt kê từng “driver” ACPI nên bật theo phần cứng thật: AC Adapter, Battery, Button, Video, Fan, Processor, Thermal Zone, cộng các mục riêng cho laptop ASUS/Medion, IBM ThinkPad và Toshiba 3. Danh sách này là một lát cắt thị trường laptop 2006 được đóng băng trong một menu cấu hình.

    Trỏ sang Chương 11

    Hai lần trong nhóm này ông từ chối giải thích tại chỗ và trỏ sang chương tham chiếu: mục HIGHMEM cho mô hình bộ nhớ, mục CPU_FREQ cho chuyện các governor làm gì 3. Cách chia việc này giữ cho chương công thức luôn ngắn và có thể tra nhanh.

Cụm khái niệm 04 · trang 75–83Concept cluster 04 · pages 75–83

Mạng, hệ tệp và bảo mật: ba nhóm, một cái công tắc gốc Mạng, ổ đĩa ảo và khóa cửa Networking, filesystems and security: three groups, one root switch

Ba nhóm cuối chia sẻ một đặc điểm cấu trúc: mỗi nhóm có một công tắc gốc mà thiếu nó thì mọi thứ bên dưới vô nghĩa. Với mạng, ông nói thẳng: với mọi tùy chọn mạng, kể cả các driver, tùy chọn cấu hình mạng chính phải được bật 4 — tức Networking support, rồi TCP/IP networking để máy nói chuyện được với các máy khác trên Internet 4. Với bảo mật, công tắc gốc là Enable different security models 6.

Ba nhóm cuối đều có một “cầu dao tổng”. Muốn dùng mạng thì phải bật hỗ trợ mạng và TCP/IP trước, rồi mới tới mọi thứ khác 4. Muốn dùng mô hình bảo mật thì phải bật cái công tắc bảo mật chung 6. Nhớ nhé: cầu dao tổng trước, đèn sau.

The last three groups share a structural feature: each has a root switch without which everything under it is meaningless. For networking he says it outright: for all networking options, including the drivers, the main network configuration option must be enabled 4 — that is, Networking support, followed by TCP/IP networking so the machine can talk to other machines on the Internet 4. For security, the root switch is Enable different security models 6.

Netfilter. Định nghĩa của ông: phần Netfilter của nhân Linux là một khung để lọc và thao tác mọi gói tin mạng đi qua máy, thường dùng khi bạn muốn bật tường lửa bảo vệ máy khỏi các hệ thống khác trên Internet, hoặc dùng máy làm proxy cho các máy khác trong mạng 4.

Netfilter là gì. Là bộ lọc gói tin của nhân — thứ làm nên tường lửa. Bật nó nếu bạn muốn chặn bớt kết nối, hoặc cho các máy khác đi nhờ ra Internet qua máy bạn 4. Nhớ nhé: tường lửa nằm trong nhân, không phải trong ứng dụng.

Netfilter. His definition: the Netfilter portion of the Linux kernel is a framework for filtering and manipulating all network packets that pass through the machine, commonly used to run a firewall protecting it from other systems on the Internet, or to use the machine as a proxy for others on the network 4.

Networking support         ← gốc
 ├ TCP/IP networking
 ├ Network packet filtering  ← netfilter
 ├ Bluetooth subsystem support
 └ Generic IEEE 802.11 Stack ← wifi

Bật hỗ trợ mạng     ← gốc
 ├ TCP/IP
 ├ tường lửa
 ├ Bluetooth
 └ Wi-Fi

Networking support         ← root
 ├ TCP/IP networking
 ├ Network packet filtering  ← netfilter
 ├ Bluetooth subsystem support
 └ Generic IEEE 802.11 Stack ← wifi

  1. netfilter

    Netfilter — lọc gói là chọn giao thức nào Tường lửa — chọn lọc cái gì Netfilter — filtering means choosing which protocols

    Ba bước: bật Network packet filtering (replaces ipchains); bật Netfilter netlink interface cùng Netfilter Xtables support — ông ghi rõ mục sau là bắt buộc cho ip_tables 4; rồi chọn từng giao thức muốn theo dõi, mà quan trọng nhất là Connection tracking (required for masq/NAT), kèm các mô-đun trợ giúp giao thức như FTP protocol support và TFTP protocol support 4.

    Bật lọc gói, bật phần Xtables (bắt buộc cho ip_tables), rồi chọn các giao thức cần theo dõi — nhất là phần “theo dõi kết nối” dùng cho chia sẻ mạng 4. Nhớ nhé: tường lửa chỉ lọc được thứ bạn bảo nó theo dõi.

    Three steps: enable Network packet filtering (replaces ipchains); enable Netfilter netlink interface together with Netfilter Xtables support — which he notes is required for ip_tables 4; then pick the protocols you want tracked, chiefly Connection tracking (required for masq/NAT) along with protocol helpers such as FTP protocol support and TFTP protocol support 4.

    Bạn thấy nó ở đâu. Chữ “replaces ipchains” trong nhãn tùy chọn là một hóa thạch quý: nó đánh dấu lúc Netfilter/iptables thay thế thế hệ trước. LKDDB ghi CONFIG_NETFILTER mang nhãn “Network packet filtering framework (Netfilter)” liên tục từ 2.6.20 tới nhân hiện hành 10; trong không gian người dùng, nftables đã trở thành lớp mặt trước được khuyến nghị 19.

    Gặp ở đâu. Khung Netfilter vẫn còn nguyên trong nhân đến nay 10; chỉ có công cụ dùng ở ngoài là đã chuyển sang nftables 19. Nhớ nhé: phần trong nhân bền hơn phần công cụ.

    Where you see it. The phrase “replaces ipchains” in the option label is a useful fossil: it marks the moment Netfilter/iptables displaced the previous generation. LKDDB records CONFIG_NETFILTER prompted as “Network packet filtering framework (Netfilter)” continuously from 2.6.20 to current kernels 10; in userspace, nftables has become the recommended front end 19.

  2. wireless / bluetooth / IrDA

    Không dây — ba giao thức, ba số phận khác nhau Không dây: hồng ngoại, Bluetooth, Wi-Fi Wireless — three protocols, three different fates

    Ông đặt ba giao thức không dây cạnh nhau và nói rõ quan hệ lịch sử giữa chúng: IrDA là giao thức hồng ngoại của nhiều laptop và PDA để liên lạc ở khoảng cách rất ngắn, phổ biến trên phần cứng đời cũ, còn phần cứng mới thì dùng Bluetooth thay thế 4; Bluetooth thì ông mô tả là công nghệ không dây được tạo ra để thay IrDA, hoạt động trong bán kính 10 mét và thông dụng trên điện thoại di động 4. Wi-Fi cần bật Generic IEEE 802.11 Networking Stack cùng Software MAC add-on và các tùy chọn mã hóa WEP, 802.11i CCMP, TKIP 4.

    Ba kiểu không dây: hồng ngoại (cũ), Bluetooth (thay hồng ngoại, tầm 10 mét, hay dùng trên điện thoại), và Wi-Fi 4. Mỗi kiểu một công thức, nhưng đều nằm dưới mục Mạng 4. Nhớ nhé: không dây vẫn là “mạng”, nên cầu dao tổng vẫn phải bật.

    He places the three wireless protocols side by side and names their historical relation: IrDA is an infrared protocol used by a number of laptops and PDAs over very short distances, prevalent on older hardware, with newer hardware using Bluetooth instead 4; Bluetooth he describes as the wireless technology created to replace IrDA, operating within a 10-metre radius and common in mobile phones 4. Wi-Fi needs Generic IEEE 802.11 Networking Stack plus the Software MAC add-on and the WEP, 802.11i CCMP and TKIP encryption options 4.

    Đã đổi kể từ đó. Ba số phận rẽ hẳn ra. IrDA bị chuyển vào staging ở 4.14 rồi gỡ hẳn ở 4.17 cùng toàn bộ driver của nó 11. Ngăn xếp CONFIG_IEEE80211 mà sách dùng bị đánh dấu “DEPRECATED” và biến mất sau 2.6.28, được thay bằng CONFIG_MAC80211 — có mặt từ 2.6.22 và còn tới nay 21. Bluetooth thì đứng yên: CONFIG_BT chạy liên tục từ dòng 2.5 tới nhân hiện hành 10.

    Giờ khác rồi. Hồng ngoại đã bị gỡ khỏi nhân từ bản 4.17 11. Phần Wi-Fi trong sách đã được thay bằng bộ mới tên mac80211 21. Bluetooth thì vẫn nguyên 10. Nhớ nhé: ba anh em, ba ngả đường.

    Changed since. The three fates diverged completely. IrDA was moved to staging in 4.14 and removed outright in 4.17 along with its whole driver set 11. The CONFIG_IEEE80211 stack the book uses was marked “DEPRECATED” and disappeared after 2.6.28, replaced by CONFIG_MAC80211, present since 2.6.22 and still current 21. Bluetooth simply stayed: CONFIG_BT runs continuously from the 2.5 series to today's kernels 10.

    Driver mạng: hai ngăn theo tốc độ

    Với card Ethernet, ông mô tả “nhiệm vụ vui vẻ” là tìm đúng driver, và chỉ chỗ: phần cứng hiện đại thường nằm trong mục Ethernet (1000 Mbit), còn thiết bị cũ hơn nằm ở Ethernet (10 or 100Mbit) 4. Cách chia menu theo tốc độ này là một quy ước của thời ấy.

    Wi-Fi USB nằm ở menu khác

    Lại đúng cái bẫy “driver ở menu khác”: driver Wi-Fi PCI nằm ở Wireless LAN (non-hamradio) dưới Network device support, còn driver Wi-Fi USB lại nằm ở USB Support → USB Network Adapters 4. Nhân phân loại driver theo bus, không theo chức năng.

  3. RAID / LVM

    RAID và Device Mapper — gộp nhiều đĩa thành một Ghép nhiều ổ thành một ổ RAID and Device Mapper — many disks as one

    Ông định nghĩa RAID là cách gộp nhiều đĩa để chúng trông như một đĩa lô-gic, phục vụ dự phòng hoặc tốc độ bằng cách trải dữ liệu qua nhiều mặt đĩa; và phân biệt rõ RAID phần cứng — do bộ điều khiển đĩa lo, nhân không cần giúp gì — với RAID phần mềm do nhân điều khiển 5. LVM thì làm việc tương tự nhưng không ở mức thiết bị như RAID, mà qua một cơ chế ánh xạ khối và sector, dùng thành phần gọi là Device Mapper 5. Công thức: bật Multiple devices driver support (RAID and LVM), rồi RAID support với ít nhất một mức RAID, hoặc Device mapper support cùng các target Crypt, Snapshot, Mirror, Zero, Multipath 5.

    RAID là ghép nhiều ổ cứng lại cho giống một ổ — để an toàn hơn hoặc nhanh hơn 5. LVM cũng ghép, nhưng theo kiểu chia nhỏ rồi xếp lại, nhờ bộ phận tên Device Mapper 5. Bật mục “Multi-device support” rồi chọn kiểu bạn cần 5. Nhớ nhé: phải chọn ít nhất một mức RAID, không thì bật cũng như không.

    He defines RAID as combining numerous disks so they look like one logical disk, providing redundancy or speed by spreading data across different platters; and separates hardware RAID — handled by the disk controller with no help needed from the kernel — from software RAID, which the kernel controls 5. LVM does something similar but not at the device level like RAID: it works through a block and sector mapping mechanism, using a component called Device Mapper 5. The recipe: enable Multiple devices driver support (RAID and LVM), then RAID support with at least one RAID level, or Device mapper support with the Crypt, Snapshot, Mirror, Zero and Multipath targets 5.

    Bạn thấy nó ở đâu. Đây là nhóm công thức bền nhất chương. Tài liệu nhân hiện hành vẫn mô tả hệ con md cho RAID phần mềm 16 và Device Mapper với chính những target ấy 17; LKDDB ghi CONFIG_DM_CRYPT và CONFIG_MD_RAID456 chạy liên tục từ dòng 2.6 tới nay 10. Nhãn EXPERIMENTAL năm 2006 trên Snapshot và Mirror đã rụng từ lâu.

    Gặp ở đâu. RAID và Device Mapper trong sách đến nay vẫn còn nguyên và vẫn dùng hằng ngày 161710. Nhớ nhé: đây là phần cũ mà vẫn đúng.

    Where you see it. This is the chapter's most durable group. Current kernel documentation still describes the md subsystem for software RAID 16 and Device Mapper with those same targets 17; LKDDB records CONFIG_DM_CRYPT and CONFIG_MD_RAID456 running unbroken from the 2.6 series to now 10. The 2006 EXPERIMENTAL tags on Snapshot and Mirror fell off long ago.

  4. SMB / CIFS / OCFS2 / SELinux

    Chia sẻ với Windows, cụm Oracle, và mô hình bảo mật Nối với máy Windows, và khóa cửa cho nhân Sharing with Windows, Oracle clusters, and the security model

    Hệ tệp: ông đưa hai lựa chọn nối với Windows — SMB file system support để nối tới máy Windows for Workgroups, Windows 95 hoặc 98, và CIFS support được khuyến nghị cho máy Windows mới hơn 5. Còn OCFS2 là hệ tệp cụm của Oracle, hoạt động cho cả cài đặt mạng lớn lẫn hệ thống cục bộ nhỏ, và được khuyến nghị khi dùng cơ sở dữ liệu lớn như Oracle hay DB2 5. Bảo mật: mô hình chuẩn là “capability” và ông bảo luôn luôn chọn nó trừ khi bạn thật sự muốn chạy một nhân không an toàn 6; SELinux thì đòi ba thứ đi kèm — mạng phải bật, Auditing support phải bật, và Socket and Networking Security Hooks phải bật — trước khi chọn được NSA SELinux Support 6.

    Muốn mở ổ chia sẻ của máy Windows: máy Windows cũ thì bật SMB, máy mới thì bật CIFS 5. OCFS2 là hệ tệp cho cụm máy, hợp với cơ sở dữ liệu lớn 5. Về bảo mật: luôn bật mô hình chuẩn; muốn dùng SELinux thì phải bật thêm mạng và phần ghi nhật ký trước 6. Nhớ nhé: bảo mật cũng có “cầu dao tổng”.

    Filesystems: he gives two ways to reach Windows — SMB file system support for connecting to Windows for Workgroups, Windows 95 or 98 machines, and CIFS support, recommended instead for newer Windows machines 5. OCFS2 is Oracle's cluster filesystem, working for large network installations and small local systems alike, recommended when using large databases such as Oracle or DB2 5. Security: the standard model is the “capability” model, and he says you should always select it unless you really want to run an insecure kernel 6; SELinux requires three companions — networking enabled, Auditing support enabled, and Socket and Networking Security Hooks enabled — before NSA SELinux Support can be chosen 6.

    Đã đổi kể từ đó. Hai nhánh, hai kết cục. CONFIG_SMB_FS bị hạ xuống drivers/staging/smbfs và LKDDB ghi nó xuất hiện lần cuối ở nhân 2.6.38 12; tài liệu hiện hành mô tả mô-đun cifs là client cho SMB3 cũng như các phương ngữ cũ hơn, và khuyến nghị mạnh dùng SMB3 thay vì CIFS vì lý do bảo mật 12. Còn SELinux thì sống khỏe, chỉ đổi nhãn: LKDDB ghi CONFIG_SECURITY_SELINUX mang nhãn “NSA SELinux Support” tới nhân 6.5 rồi đổi thành “SELinux Support” từ 6.6 18. Mục CONFIG_SECURITY_CAPABILITIES riêng biệt trong sách cũng đã biến mất sau 2.6.26 24.

    Giờ khác rồi. Tùy chọn SMB_FS cũ đã bị bỏ; giờ dùng cifs, và nên chọn phương ngữ SMB3 cho an toàn 12. SELinux vẫn còn, chỉ bỏ chữ “NSA” trong tên từ bản 6.6 18. Nhớ nhé: tên đổi không có nghĩa là công thức sai.

    Changed since. Two branches, two outcomes. CONFIG_SMB_FS was demoted into drivers/staging/smbfs and LKDDB records it appearing for the last time in kernel 2.6.38 12; current documentation describes the cifs module as the client for the SMB3 protocol as well as older dialects, and strongly prefers SMB3 over CIFS for security reasons 12. SELinux, by contrast, thrived and only changed its label: LKDDB records CONFIG_SECURITY_SELINUX prompted as “NSA SELinux Support” through kernel 6.5, renamed “SELinux Support” from 6.6 18. The separate CONFIG_SECURITY_CAPABILITIES option in the book also disappeared after 2.6.26 24.

    Hệ tệp truyền thống chỉ là một dòng menu

    Trước khi vào các hệ tệp “phi truyền thống”, ông cho thấy các hệ tệp thường — ext2, ext3, Reiserfs, JFS, XFS — chỉ là năm ô chọn trong menu File systems 5. Sự bình thản đó là chủ ý: phần khó không nằm ở hệ tệp, mà ở lớp thiết bị bên dưới nó.

    OCFS2 còn sống

    Trong số các lựa chọn hệ tệp “lạ” của chương, OCFS2 là cái trụ được lâu nhất: tài liệu nhân hiện hành vẫn có trang riêng cho nó 25, và LKDDB ghi CONFIG_OCFS2_FS chạy liên tục từ 2.6.19 tới nhân hiện hành 10.

Cụm khái niệm 05 · trang 83–84Concept cluster 05 · pages 83–84

Gỡ lỗi nhân: mở mắt cho mình, đổi bằng một chút tốc độ Nhìn vào trong nhân: được nhìn thì mất chút nhanh Kernel debugging: buying sight with a little speed

Nhóm cuối cùng của chương — và của cả Phần II — là một danh sách các tùy chọn giúp gỡ lỗi những gì đang diễn ra bên trong nhân: hữu ích để khám phá cách nhân vận hành, hoặc để tìm ra vấn đề tiềm tàng trong mã nguồn hiện tại 7. Ông kèm một cảnh báo sòng phẳng mà ít sách viết ra: bật gần như bất kỳ tùy chọn nào trong số này cũng làm nhân chậm đi một chút, nên nếu thấy hiệu năng giảm thì hãy tắt bớt 7.

Phần cuối là các tùy chọn giúp bạn nhìn vào bên trong nhân — để học, hoặc để tìm lỗi 7. Nhưng bật chúng thì máy chậm đi một chút, nên thấy ì thì tắt bớt 7. Nhớ nhé: nhìn rõ hơn thì đi chậm hơn một chút.

The chapter's last group — and Part II's last — is a list of options that help debug what is going on inside the kernel: useful for discovering new things about how the kernel works, or for finding potential problems in the current source 7. He adds a fair warning few books write down: enabling almost any of these slows the kernel down a small amount, so if you notice a drop in performance you may wish to disable them 7.

debugfs. Ông mô tả gọn: một hệ tệp nằm trên RAM, dùng để xuất ra rất nhiều loại thông tin gỡ lỗi 7. Sau khi bật và khởi động nhân mới, nhân tạo thư mục /sys/kernel/debug làm chỗ để mount; các tệp trong đó đều là ảo và được nhân sinh ra động, giống như tệp trong procfs hay sysfs 7.

debugfs là gì. Là một “thư mục ảo” trong bộ nhớ, nơi nhân bày ra thông tin bên trong của nó 7. Các tệp ở đó không nằm trên ổ cứng — nhân tự tạo ra khi bạn đọc 7. Nhớ nhé: nó giống cửa sổ nhìn vào trong, không phải kho chứa.

debugfs. His description is compact: a RAM-based filesystem used to output a lot of different debugging information 7. After enabling it and booting the rebuilt kernel, the kernel creates /sys/kernel/debug as the place to mount it; the files there are all virtual and dynamically generated by the kernel, like those in procfs or sysfs 7.

$ mount -t debugfs none /sys/kernel/debug

# hoặc trong /etc/fstab:
debugfs /sys/kernel/debug debugfs 0 0

Gắn thủ công:
mount -t debugfs none /sys/kernel/debug

Gắn tự động khi khởi động:
thêm một dòng vào /etc/fstab

$ mount -t debugfs none /sys/kernel/debug

# or in /etc/fstab:
debugfs /sys/kernel/debug debugfs 0 0

  1. printk timestamps

    Dấu thời gian trên thông điệp nhân Đóng dấu giờ cho thông báo của nhân Timestamps on kernel messages

    Vấn đề ông nêu rất cụ thể: dmesg không gắn dấu thời gian lên các sự kiện nó hiển thị, còn độ phân giải thời gian của /var/log/messages chỉ tới giây 7. Giải pháp là bật Show timing information on printks trong menu Kernel hacking, để mỗi thông điệp mang dấu thời gian chính xác tới đơn vị thời gian nhỏ nhất mà nhân đo được — thường ở cỡ micro-giây 7.

    dmesg in ra thông báo nhưng không ghi giờ; còn nhật ký hệ thống chỉ ghi tới giây 7. Bật tùy chọn “hiện thời gian trên printk” thì mỗi dòng có dấu giờ rất mịn 7. Nhớ nhé: có giờ thì mới xâu chuỗi được sự việc.

    The problem he names is precise: dmesg puts no timestamps on the events it shows, and the time resolution of /var/log/messages is only to the nearest second 7. The fix is Show timing information on printks under Kernel hacking, giving each message a timestamp accurate to the smallest measurable kernel time value — usually in the microsecond range 7.

    Bạn thấy nó ở đâu. Đây là một trong những tùy chọn ổn định nhất mà chương nhắc tới: LKDDB ghi CONFIG_PRINTK_TIME với đúng nhãn “Show timing information on printks” chạy liên tục từ 2.6.12 tới nhân hiện hành 10. Hai mươi năm, cùng một dòng chữ trong menu.

    Gặp ở đâu. Tùy chọn này còn nguyên trong nhân đến nay, đúng tên, đúng chữ 10. Nhớ nhé: có những công thức không hề già.

    Where you see it. This is one of the steadiest options the chapter names: LKDDB records CONFIG_PRINTK_TIME with the exact prompt “Show timing information on printks” running from 2.6.12 to current kernels 10. Twenty years, the same line of text in the menu.

  2. magic SysRq

    Phím SysRq thần kỳ — cửa hậu hợp pháp vào nhân Phím đặc biệt để ra lệnh cho nhân Magic SysRq — the legitimate back door

    Công thức ngắn nhất của cả chương: bật Magic SysRq key trong Kernel hacking 7. Công dụng thì không nhỏ chút nào — phím SysRq trên bàn phím có thể dùng để điều khiển nhân theo nhiều cách khi nhân đang chạy, hoặc sau khi nó đã sập 7. Ông không liệt kê các hành động mà trỏ sang tệp Documentation/sysrq.txt trong cây mã nguồn 7.

    Chỉ cần bật một ô: “Magic SysRq key” 7. Sau đó bạn có thể ra lệnh cho nhân bằng tổ hợp phím, kể cả khi máy đã treo 7. Nhớ nhé: đây là lối thoát hiểm khi máy không còn nghe chuột.

    The shortest recipe in the chapter: enable Magic SysRq key under Kernel hacking 7. What it buys is not small — the SysRq key can be used to control the kernel in a number of different ways while it is running, or after it has crashed 7. He does not list the actions but points to Documentation/sysrq.txt in the kernel source tree 7.

    Bạn thấy nó ở đâu. Tệp ông trỏ tới vẫn còn, chỉ đổi định dạng: nay là Documentation/admin-guide/sysrq.rst, đọc được trực tuyến tại docs.kernel.org, và nó mô tả cả cách bật/tắt lúc chạy qua /proc/sys/kernel/sysrq 20. LKDDB ghi CONFIG_MAGIC_SYSRQ liên tục từ 2.6.9 tới nay 10.

    Gặp ở đâu. Tài liệu về phím SysRq vẫn còn, nay nằm ở docs.kernel.org 20, và tùy chọn vẫn tồn tại trong nhân 10. Nhớ nhé: đường dẫn tệp đổi, nội dung thì còn.

    Where you see it. The file he points to still exists, just reformatted: it is now Documentation/admin-guide/sysrq.rst, readable online at docs.kernel.org, and it also documents runtime enabling via /proc/sys/kernel/sysrq 20. LKDDB records CONFIG_MAGIC_SYSRQ continuously from 2.6.9 to today 10.

  3. general debugging

    Danh sách gỡ lỗi chung — và cái giá của nó Các ô gỡ lỗi khác, và cái giá phải trả The general debugging list — and its price

    Dưới Kernel debugging, ông đề xuất một tập cụ thể: Detect Soft Lockups, Debug slab memory allocations, Memory leak debugging, Mutex debugging, deadlock detection, Spinlock debugging, Sleep-inside-spinlock checking 7, và để trống vài ô khác như kobject debugging, Highmem debugging, Compile the kernel with debug info 7. Mục đích ông nói rõ: để giúp lập trình viên nhân gỡ lỗi, hoặc đơn giản là để học thêm về cách nhân vận hành bằng cách đọc những thông điệp các tùy chọn này in ra 7.

    Ông gợi ý bật một nhóm ô gỡ lỗi: phát hiện treo mềm, kiểm tra cấp phát bộ nhớ, dò rò rỉ bộ nhớ, kiểm tra khóa 7. Bật để học, hoặc để báo lỗi cho người viết nhân 7. Nhớ nhé: bật nhiều thì máy chậm, nên bật có chọn lọc.

    Under Kernel debugging he proposes a concrete set: Detect Soft Lockups, Debug slab memory allocations, Memory leak debugging, Mutex debugging, deadlock detection, Spinlock debugging, Sleep-inside-spinlock checking 7, leaving others unticked such as kobject debugging, Highmem debugging and Compile the kernel with debug info 7. His stated purpose: to help kernel developers debug problems, or simply to learn more about how the kernel works by reading the messages these options print 7.

    Đã đổi một phần. Danh sách này già không đều. CONFIG_DEBUG_FS vẫn còn và có trang tài liệu riêng 10, còn CONFIG_DEBUG_SLAB thì LKDDB ghi xuất hiện lần cuối ở nhân 6.7 23. Công cụ dò rò rỉ bộ nhớ ngày nay có tên riêng và tài liệu riêng — kmemleak, nằm trong bộ công cụ phát triển của nhân 23.

    Giờ khác một phần. Vài ô trong danh sách vẫn còn, vài ô đã bị thay bằng công cụ mới như kmemleak 2310. Nhớ nhé: ý tưởng còn, tên đổi.

    Partly changed. This list ages unevenly. CONFIG_DEBUG_FS is still present and has its own documentation page 10, whereas LKDDB records CONFIG_DEBUG_SLAB appearing for the last time in kernel 6.7 23. Today's memory-leak detector has its own name and its own documentation — kmemleak, inside the kernel's dev-tools set 23.

    Mặc cả rõ ràng

    Cách ông trình bày nhóm này đáng học: nêu lợi ích, nêu giá, rồi trả quyền quyết định cho người đọc — “nếu bạn nhận thấy hiệu năng giảm, có thể bạn muốn tắt các tùy chọn đó đi” 7. Không có tùy chọn nào trong nhân là miễn phí, và chương kết thúc bằng đúng bài học đó.

    Kết Phần II

    Nhóm gỡ lỗi khép lại Phần II của cuốn sách; ngay sau đó là Phần III, phần tham chiếu, gồm Chương 9 về tham số dòng lệnh khởi động, Chương 10 về lệnh dựng, và Chương 11 về từng tùy chọn cấu hình 7. Chương 8 chính là bản lề: nó dùng hết những gì Phần II dạy và mở cửa sang phần tra cứu.

Ba hiểu lầm thường gặpThree common misconceptions

“Công thức 2006 thì vô dụng hôm nay”“A 2006 recipe is useless today”

Hiểu lầm: tên tùy chọn đã đổi nên cả chương thành rác. Thực tế: đổi thay phân bố rất lệch. Nhánh IDE đúng là đã bị gỡ ở 5.14 8 và IrDA ở 4.17 11, nhưng CONFIG_PRINTK_TIME, CONFIG_MAGIC_SYSRQ, CONFIG_NETFILTER, CONFIG_DM_CRYPT và CONFIG_SND đều chạy liên tục từ dòng 2.6 tới nhân hiện hành 10. Cái bền nhất lại chính là khuôn ba nhịp: dò → hạ tầng → driver.

Myth: the option names changed, so the whole chapter is landfill. Fact: the change is very unevenly distributed. The IDE branch was indeed removed in 5.14 8 and IrDA in 4.17 11, but CONFIG_PRINTK_TIME, CONFIG_MAGIC_SYSRQ, CONFIG_NETFILTER, CONFIG_DM_CRYPT and CONFIG_SND all run unbroken from the 2.6 series to current kernels 10. What lasts best is the three-beat shape: detect → infrastructure → driver.

“Bật driver là xong”“Enabling the driver is enough”

Hiểu lầm: tìm đúng tên chip rồi tick vào là thiết bị chạy. Thực tế: gần như mọi công thức trong chương đều bắt đầu từ một lớp hạ tầng: USB storage cần SCSI và SCSI disk 1; mọi thứ liên quan mạng cần Networking support bật trước 4; SELinux cần mạng, Auditing support và hook mạng bật trước 6. Thiếu lớp dưới thì mục bạn cần thậm chí không hiện ra trong menu.

Myth: find the chip name, tick the box, done. Fact: nearly every recipe in the chapter starts from an infrastructure layer: USB storage needs SCSI and SCSI disk support 1; anything networking needs Networking support on first 4; SELinux needs networking, Auditing support and the networking hooks on first 6. Without the layer below, the entry you want does not even appear in the menu.

“Bật gỡ lỗi thì luôn có lợi”“Debug options are always a win”

Hiểu lầm: cứ bật hết các ô gỡ lỗi cho chắc. Thực tế: ông nói thẳng rằng bật gần như bất kỳ tùy chọn nào trong nhóm đó cũng làm nhân chậm đi một chút, và khuyên tắt bớt nếu thấy hiệu năng giảm 7. Đây là một trong vài chỗ hiếm hoi cả chương nêu rõ cái giá phải trả.

Myth: tick every debug box to be safe. Fact: he says outright that enabling almost any of those options slows the kernel down a small amount, and advises disabling them if you notice a decrease in performance 7. It is one of the few places in the chapter where the price is named explicitly.

Tự kiểmSelf-check

Tự kiểm trước khi sang Phần III Tự hỏi mình vài câu Self-check before Part III

Chương này là sổ công thức, nên bài tự kiểm cũng nên làm trên chính máy bạn đang ngồi. Mỗi câu dưới đây ứng với một nhịp trong khuôn ba bước — nếu câu nào còn mơ hồ, quay lên đọc lại nhóm tương ứng.

Chương này là sổ công thức, nên hãy thử ngay trên máy bạn. Mỗi câu dưới đây tương ứng một bước. Nhớ nhé: câu nào chưa rõ thì quay lên đọc lại.

This chapter is a recipe book, so the self-check belongs on the machine in front of you. Each question below matches one beat of the three-step shape — if any is still hazy, reread the matching group above.

  1. Bạn chạy được ba lệnh dò của chương — lspci, lsusb, cat /proc/cpuinfo — và đọc ra bộ điều khiển đĩa, bộ điều khiển USB và tên bộ xử lý của chính máy mình?

    Nếu lspci không có ở /usr/sbin/, sách bảo dùng which lspci để tìm đúng đường dẫn 1.

  2. Bạn giải thích được vì sao một ổ USB và một ổ SATA lại cùng cần SCSI Device Support?

    Mấu chốt: USB storage là thiết bị SCSI nói qua dây USB, còn libata dùng tầng SCSI để nói chuyện với tầng khối 1.

  3. Bạn nói được vì sao driver âm thanh USB lại không nằm trong menu USB?

    Vì nhân xếp một số loại — video, DVB, âm thanh — theo loại thiết bị chứ không theo bus; driver âm thanh USB nằm dưới menu Sound 2.

  4. Bạn phân biệt được ba chế độ trưng dụng, và nói được máy của bạn nên chọn chế độ nào?
  5. Trước khi làm theo một công thức trong chương, bạn kiểm tra được tùy chọn đó còn tồn tại trong nhân bạn đang dựng hay không?

    Cách nhanh nhất: gõ / trong make menuconfig để tìm theo tên, hoặc tra tên CONFIG_* trong tài liệu nhân hiện hành 20. Vài tùy chọn của sách đã bị gỡ hẳn — CONFIG_IDE 8, CONFIG_IRDA 11, CONFIG_SMB_FS 12.

  1. Bạn gõ được lspci và lsusb để xem máy mình có gì chưa?
  2. Vì sao ổ USB và ổ SATA đều cần bật SCSI?
  3. Vì sao driver loa USB lại nằm ở mục Âm thanh chứ không ở mục USB?
  4. Máy của bạn là máy chủ hay máy bàn — nên chọn kiểu “ngắt việc” nào?
  5. Nhớ nhé: trước khi làm theo công thức, kiểm tra xem tùy chọn đó còn trong nhân của bạn không.
  1. Can you run the chapter's three detection commands — lspci, lsusb, cat /proc/cpuinfo — and read off your own disk controller, USB controller and processor name?
  2. Can you explain why a USB disk and a SATA disk both need SCSI Device Support?

    The key: USB storage is a SCSI device speaking over USB, and libata uses the SCSI layer to reach the block layer 1.

  3. Can you say why the USB sound driver is not in the USB menu?
  4. Can you tell the three preemption models apart, and say which one your machine should use?
  5. Before following a recipe here, can you check whether that option still exists in the kernel you are building?

    Some of the book's options are gone outright — CONFIG_IDE 8, CONFIG_IRDA 11, CONFIG_SMB_FS 12.

Đọng lạiWhat remains

Một nửa số tùy chọn trong chương này đã bị đổi tên, gộp lại hoặc gỡ hẳn khỏi nhân. Nhưng thứ chương này thực sự dạy không phải là các tên gọi — mà là một khuôn ba nhịp: hỏi máy xem nó có gì, bật lớp nền, rồi mới bật driver. Khuôn đó vẫn nguyên vẹn sau hai mươi năm.

Nhiều tùy chọn trong chương nay đã đổi tên hoặc bị bỏ. Nhưng cách làm thì không đổi: hỏi máy có gì, bật cái nền, rồi bật driver. Nhớ nhé: học cách làm, đừng học thuộc tên.

Half the options in this chapter have since been renamed, merged or removed from the kernel. But what the chapter really teaches is not the names — it is a three-beat shape: ask the machine what it holds, enable the layer beneath, then enable the driver. That shape is intact twenty years on.