- SourceFS là một hệ thống tệp ảo hiệu năng cao được thiết kế để giải quyết vấn đề tốc độ và hiệu quả build của các codebase thiết bị quy mô lớn
- Tăng tốc độ build Android lên tới 9 lần, tốc độ checkout mã lên hơn 10 lần, đồng thời giảm 83% dung lượng đĩa sử dụng và cắt giảm 14 lần chi phí tính toán
- Nguyên lý cốt lõi là ảo hóa tệp và materialization theo yêu cầu (on-demand), với cấu trúc trông như tệp thật nhưng chỉ tải nội dung vào đúng thời điểm cần thiết
- Trong quá trình build, hệ thống ghi lại và tái sử dụng I/O cùng môi trường bằng cơ chế cache dựa trên sandbox, nhờ đó có thể replay ngay lập tức phần lớn các bước build
Vấn đề của build chậm và checkout mã chậm
- Các thiết bị kết nối hiện đại được vận hành bởi codebase quy mô hàng trăm triệu dòng mã
- Linux kernel có khoảng 40 triệu dòng, Android AOSP có hơn 140 triệu dòng, và thiết bị thực tế khi bổ sung hỗ trợ phần cứng, tính năng tùy biến và mã dịch vụ sẽ vượt quá 200 triệu dòng
- Xe điện (EV) đạt hơn 500 triệu dòng mã và còn tiếp tục tăng lên thông qua các bản cập nhật phần mềm
- Khi checkout mã phải tải xuống hàng trăm GB dữ liệu, còn quá trình build trải qua hàng trăm nghìn bước
- Do đồ thị phụ thuộc không hoàn chỉnh, ngay cả thay đổi nhỏ cũng có thể gây ra rebuild quy mô lớn hoặc tạo ra kết quả sai
- Kết quả là mất hàng giờ thời gian của lập trình viên mỗi ngày và chi phí tính toán CI tăng vọt
Source File System (SourceFS)
- SourceFS không phải là một hệ thống build mới, mà là một hệ thống tệp ảo hiệu năng cao có thể tích hợp vào quy trình làm việc hiện có
- Nó tăng tốc mạnh mẽ việc checkout và build codebase Android, đồng thời gần như không có gánh nặng migration
- Nguyên lý cốt lõi là ảo hóa mọi tệp, chỉ materialize khi cần, và xử lý toàn bộ quá trình này một cách minh bạch
- Tăng tốc checkout: tạo biểu diễn tệp ảo cho toàn bộ codebase và chỉ tải nội dung tại thời điểm truy cập
- Các tệp trông như tệp thật, nhưng phần lớn vẫn ở trạng thái ảo để tiết kiệm không gian đĩa
- Tương thích hoàn toàn với Git và Repo
- Tăng tốc build: mỗi bước build được chạy trong một sandbox nhẹ ghi lại I/O và môi trường
- Các bước giống hệt nhau sẽ tái sử dụng kết quả mà không cần chạy lại, chỉ những bước đã thay đổi mới được thực thi lại
- Áp dụng cho toàn bộ quy trình build, không chỉ biên dịch mà còn cả liên kết, đóng gói, tạo tài liệu v.v.
- Bên trong, hệ thống sử dụng thuật toán cache và replay hiệu năng cao, sandboxing hiệu quả và backend viết bằng Rust
- Có thể mở rộng trên toàn tổ chức với gần như bằng không chi phí overhead
Build nhanh hơn, lưu trữ hiệu quả hơn, giảm chi phí
- Checkout mã trong môi trường SourceFS nhanh hơn hơn 20 lần so với trước đây
- Lập trình viên có thể tiếp tục dùng quy trình làm việc y hệt Git tree hiện có khi làm việc trong thư mục SourceFS
- Giảm dung lượng đĩa sử dụng là lợi thế lớn cho các lập trình viên thiết bị thường xuyên phải chuyển đổi giữa nhiều codebase
- Ngay cả khi chuyển giữa nhiều phiên bản thiết bị hoặc sửa lỗi quy mô lớn, vẫn có thể làm việc nhẹ nhàng như với một repository GitHub nhỏ
- Tốc độ build tăng tới 9 lần, cho phép hoàn thành nhanh các bản build lớn ngay cả trên máy của lập trình viên thông thường
- Rút ngắn vòng lặp phản hồi của pipeline CI để tối đa hóa năng suất phát triển
- Hiệu quả tiết kiệm chi phí có thể lên tới 14 lần
- Dùng SourceFS trên máy phổ thông nhanh hơn và rẻ hơn so với dùng máy hiệu năng cao
- Có thể xử lý nhiều công việc hơn với cùng một ngân sách tính toán
So sánh với các lựa chọn thay thế hiện có
- SourceFS vượt qua những giới hạn của các cách tiếp cận hiện có
- Migration sang các hệ thống build mới như Bazel, Buck2 là điều rất khó khả thi với các dự án lớn, và với codebase thiết bị bao gồm nhiều hệ điều hành (ví dụ: Yocto, Android, QNX), độ phức tạp còn tăng gấp bội
- SourceFS vẫn mang lại cùng mức cải thiện hiệu năng mà không cần migration như vậy
- Các compiler wrapper (REClient, Goma v.v.) chỉ tăng tốc được một phần các bước build và không có tác dụng với checkout
- Chúng phụ thuộc vào việc phân tích cờ dòng lệnh nên có khả năng phát sinh lỗi ngoài dự kiến
Kế hoạch trong tương lai
2 bình luận
Có vẻ như Android đã dùng một thứ tương tự rồi.
Ý kiến trên Hacker News
Có vẻ một phần nhóm là cựu Googler, nhưng khác với srcfs dựa trên Piper mà chúng ta biết
Có vài điểm tương đồng, nhưng hầu như không có chi tiết cụ thể, và ngay cả phiên bản self-hosting cũng có kiểu định giá “Talk to us” nên khá đáng tiếc
Còn về chuyện giá cả, nếu là đội ngũ xử lý codebase hàng chục tỷ dòng thì mức giá kiểu “TalkToUs” cũng đâu phải không kham nổi?
Ngay cả mã nguồn mở như Linux cũng chạy tốt trên laptop của tôi
Cái này làm tôi nhớ đến MVFS của ClearCase ngày xưa
Khi build, nó chặn các lời gọi như open(2), getenv(3) để ghi lại đầy đủ công cụ nào đã dùng phiên bản file nào trong môi trường nào
Nếu điều kiện giống hệt, nó sẽ “winked-in” kết quả cũ để tái sử dụng, và cũng hỗ trợ quản lý phiên bản ở cấp hệ thống tệp
Ví dụ có thể truy cập theo kiểu file.c@@/trunk/branch/subbranch/3
Mốc thời gian trong tiêu đề có vẻ hơi cường điệu
Tôi tự hỏi có phải họ đang cố sản phẩm hóa EdenFS hay một kiểu git fuse nào đó không
Kiểu như “các bước build giống hệt lần trước sẽ tự động bị bỏ qua và tái sử dụng kết quả”, nghe hay đến mức khó tin
Cảm giác đơn thuần là content marketing thương mại. Gần như không có chi tiết kỹ thuật
Hồi còn làm kỹ sư build, có vài mẹo từng rất hiệu quả với tôi như: build trên tmpfs, với file lớn thì dùng symlink/hardlink thay vì copy, giảm I/O không cần thiết bằng libeatmydata,
và chọn cross-compiler cho hợp lý
Điều thực sự quan trọng là tối ưu hệ thống build và làm tốt việc cache các sản phẩm trung gian không đổi
Xin chào, tôi là đồng sáng lập Source.dev, Serban
Cảm ơn mọi người vì các lượt upvote và thảo luận. Với một startup giai đoạn đầu, những phản hồi như vậy thực sự là nguồn động viên rất lớn
Tôi rất vui khi thấy điều chúng tôi đang làm thật sự được coi là có giá trị
Thấy câu “build nhanh hơn 9 lần với SourceFS” mà tôi bật cười
Build càng lâu thì lại càng có thêm thời gian luyện kiếm, nên build chậm cũng có cái hay riêng
Những tuyên bố về hiệu năng của họ vượt xa các hệ thống build Android phân tán mà tôi từng dùng
Không biết bí quyết đặc biệt nằm ở đâu
Khi build đạt mức “đủ nhanh”, động lực kinh doanh để làm công việc đau đớn là đi tìm hiểu codebase sẽ biến mất
Giờ chỉ còn con đường tiến tới một codebase 1 tỷ dòng
Đọc phần mô tả thì có vẻ như nó chỉ dành cho mã nguồn Android. Tôi tò mò vì sao lại như vậy, và liệu có áp dụng được cho các codebase khác không