Làm thế nào để pdflush, kjournald, hoán đổi, vv tương tác với nhau?


17

Gần đây đã thấy một câu hỏi làm dấy lên suy nghĩ này. Không thể thực sự tìm thấy câu trả lời ở đây hoặc thông qua máy Google. Về cơ bản, tôi muốn biết kiến ​​trúc I / O của hạt nhân được xếp lớp như thế nào. Ví dụ, có kjournaldgửi đến pdflushhoặc cách khác xung quanh? Giả định của tôi là pdflush(chung chung hơn với I / O lưu trữ dung lượng lớn) sẽ ở mức thấp hơn và kích hoạt SCSI / ATA / bất kỳ lệnh nào cần thiết để thực sự ghi và kjournaldxử lý các cấu trúc dữ liệu hệ thống tệp cấp cao hơn trước khi ghi. Mặc dù vậy, tôi cũng có thể nhìn thấy nó theo cách khác, với việc kjournaldgiao tiếp trực tiếp với các cấu trúc dữ liệu của hệ thống tập tin và pdflushthức dậy mọi lúc để viết các trang pagecache bẩn cho thiết bị thông quakjournald. Cũng có thể cả hai không tương tác với nhau vì một số lý do khác.

Về cơ bản: Tôi cần một số cách để hình dung (biểu đồ hoặc chỉ là một lời giải thích) kiến ​​trúc cơ bản được sử dụng để gửi I / O đến bộ lưu trữ lớn trong nhân Linux.


1
Đây có phải là những gì bạn đang tìm kiếm? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
Cũng có bài trình bày này: trượt thứ 7 tại: slideshare.net/LukCzerner/local-file-systems-update
SLM

1
Tôi cũng tìm thấy sơ đồ này: thomas-krenn.com/en/oss/linux-io-stack-diagram/ mẹo
slm

1
Tôi đã tìm thấy bản đồ hạt nhân tương tác này giúp hiển thị cách các thành phần khác nhau của hạt nhân đi cùng nhau: makelinux.net/kernel_map
slm

1
Thêm một tài nguyên, trang 19-24: Nguyên tắc điều chỉnh và hiệu suất Linux . Điều này trông giống như chính xác những gì bạn đang tìm kiếm.
slm

Câu trả lời:


21

Trước khi chúng ta thảo luận về các chi tiết cụ thể liên quan pdflush, kjournald, andkswapd`, trước tiên chúng ta hãy tìm hiểu một chút về bối cảnh chính xác những gì chúng ta đang nói về hạt nhân Linux.

Kiến trúc GNU / Linux

Kiến trúc của GNU / Linux có thể được coi là 2 không gian:

  • Người sử dụng
  • Hạt nhân

Giữa không gian người dùngkhông gian hạt nhân nằm trong thư viện GNU C ( glibc). Điều này cung cấp giao diện cuộc gọi hệ thống kết nối kernel với các ứng dụng không gian người dùng.

Không gian hạt nhân có thể được chia nhỏ thành 3 cấp độ:

  • Giao diện cuộc gọi hệ thống
  • Mã hạt nhân độc lập kiến ​​trúc
  • Mã phụ thuộc kiến ​​trúc

Giao diện cuộc gọi hệ thống đúng như tên gọi của nó, cung cấp giao diện giữa glibckernel và kernel. Các kiến trúc độc lập Kernel Mã bao gồm các đơn vị logic như VFS (Virtual File System) và VMM (Virtual Memory Management). Các kiến trúc phụ thuộc Mã là những thành phần được xử lý và mã nền tảng cụ thể cho một kiến trúc phần cứng nhất định.

Sơ đồ kiến ​​trúc GNU / Linux

                                 ss của gnu / linux arch.

Trong phần còn lại của bài viết này, chúng tôi sẽ tập trung sự chú ý của chúng tôi vào các đơn vị logic VFS và VMM trong Không gian hạt nhân.

Các hệ thống con của hạt nhân GNU / Linux

                                    ss của nhân com

Hệ thống con VFS

Với một khái niệm cấp cao về cách cấu trúc hạt nhân GNU / Linux, chúng ta có thể tìm hiểu sâu hơn một chút về hệ thống con VFS. Thành phần này chịu trách nhiệm cung cấp quyền truy cập vào các thiết bị lưu trữ khối khác nhau, cuối cùng ánh xạ xuống hệ thống tệp (ext3 / ext4 / vv.) Trên thiết bị vật lý (HDD / vv.).

Sơ đồ của VFS

ss của vfs

Sơ đồ này cho thấy cách một write()quá trình của người dùng đi qua VFS và cuối cùng đi xuống trình điều khiển thiết bị nơi nó được ghi vào phương tiện lưu trữ vật lý. Đây là nơi đầu tiên mà chúng ta bắt gặp pdflush. Đây là một daemon chịu trách nhiệm xả dữ liệu bẩn và khối đệm siêu dữ liệu vào phương tiện lưu trữ trong nền. Biểu đồ không hiển thị điều này nhưng có một trình nền khác kjournald, nằm bên cạnh pdflush, thực hiện một tác vụ tương tự viết các khối nhật ký bẩn vào đĩa. LƯU Ý: Các khối nhật ký là cách các hệ thống tệp như ext4 & JFS theo dõi các thay đổi đối với đĩa trong một tệp, trước khi các thay đổi đó diễn ra.

Các chi tiết trên được thảo luận thêm trong bài viết này .

Tổng quan về các write()bước

Để cung cấp một cái nhìn tổng quan đơn giản về các hoạt động của hệ thống I / O, chúng tôi sẽ sử dụng một ví dụ trong đó chức năng write()được gọi bởi một ứng dụng Không gian người dùng.

  1. Một quá trình yêu cầu viết một tập tin thông qua write()cuộc gọi hệ thống.
  2. Nhân cập nhật bộ đệm trang được ánh xạ vào tệp.
  3. Một chuỗi nhân pdflush đảm nhiệm việc xóa bộ đệm trang vào đĩa.
  4. Lớp hệ thống tập tin đặt từng bộ đệm khối lại với nhau thành một bio struct( tham khảo 1.4.3, lớp Khối khối trên trang 23 ) và gửi yêu cầu ghi vào lớp thiết bị khối.
  5. Lớp thiết bị khối nhận các yêu cầu từ các lớp trên và thực hiện thao tác thang máy I / O và đặt các yêu cầu vào hàng yêu cầu I / O.
  6. Trình điều khiển thiết bị như SCSI hoặc trình điều khiển cụ thể của thiết bị khác sẽ đảm nhiệm thao tác ghi.
  7. Phần sụn thiết bị đĩa thực hiện các hoạt động phần cứng như tìm kiếm đầu, xoay và truyền dữ liệu đến khu vực trên đĩa.

Hệ thống con VMM

Tiếp tục lặn sâu hơn, bây giờ chúng ta có thể xem xét hệ thống con VMM. Thành phần này chịu trách nhiệm duy trì tính nhất quán giữa bộ nhớ chính (RAM), trao đổi và phương tiện lưu trữ vật lý. Cơ chế chính để duy trì tính nhất quán là bdflush. Vì các trang của bộ nhớ bị coi là bẩn, chúng cần được đồng bộ hóa với dữ liệu trên phương tiện lưu trữ. bdflushsẽ phối hợp với pdflushdaemon để đồng bộ hóa dữ liệu này với phương tiện lưu trữ.

Sơ đồ của VMM

                ss của VMM

Trao đổi

Khi bộ nhớ hệ thống trở nên khan hiếm hoặc bộ đếm thời gian hoán đổi nhân hết hạn, kswapdtrình nền sẽ cố gắng giải phóng các trang. Miễn là số lượng trang miễn phí vẫn ở trên free_pages_high, kswapdsẽ không làm gì cả. Tuy nhiên, nếu số lượng trang miễn phí giảm xuống bên dưới, thì kswapdsẽ bắt đầu quá trình cải tạo trang. Sau khi kswapdđã đánh dấu các trang để di dời, bdflushsẽ cẩn thận đồng bộ hóa mọi thay đổi nổi bật với phương tiện lưu trữ, thông qua các pdflushtrình tiện ích.

Tài liệu tham khảo & đọc thêm


1
Tôi sẽ đợi một ngày trước khi tôi chấp nhận đây là câu trả lời và trao tiền thưởng để nó ở lại trang "tiền thưởng". Bằng cách đó, bất cứ ai nhìn thấy nó trước đây đều có cơ hội nhận thấy nó có câu trả lời ngay bây giờ.
Bratchley

1
Cảm ơn một lần nữa, BTW. Bạn thực sự đã nghiên cứu về điều này.
Bratchley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.