Tin tức về sản phẩm

Nâng cao hiệu suất của Android: Giới thiệu AutoFDO cho nhân hệ điều hành

4 phút đọc
Xem hồ sơ của Charles Munger
Yabin Cui Kỹ sư phần mềm

Chúng tôi là nhóm phụ trách chuỗi công cụ LLVM của Android. Một trong những ưu tiên hàng đầu của chúng tôi là cải thiện hiệu suất của Android thông qua các kỹ thuật tối ưu hoá trong hệ sinh thái LLVM. Chúng tôi không ngừng tìm cách giúp Android hoạt động nhanh hơn, mượt mà hơn và hiệu quả hơn. Mặc dù phần lớn công việc tối ưu hoá của chúng tôi diễn ra trong không gian người dùng, nhưng nhân hệ điều hành vẫn là cốt lõi của hệ thống. Hôm nay, chúng tôi rất vui được chia sẻ cách chúng tôi đưa tính năng Tối ưu hoá tự động dựa trên phản hồi (AutoFDO) vào nhân Android để mang lại hiệu suất vượt trội cho người dùng.

AutoFDO là gì?

Trong quá trình tạo bản dựng phần mềm tiêu chuẩn, trình biên dịch sẽ đưa ra hàng nghìn quyết định nhỏ, chẳng hạn như có nên nội tuyến một hàm hay không và nhánh nào của điều kiện có khả năng được thực hiện, dựa trên các gợi ý mã tĩnh.Mặc dù các phương pháp phỏng đoán này rất hữu ích, nhưng không phải lúc nào chúng cũng dự đoán chính xác việc thực thi mã trong quá trình sử dụng điện thoại thực tế.

AutoFDO thay đổi điều này bằng cách sử dụng các mẫu thực thi thực tế để hướng dẫn trình biên dịch. Những mẫu này thể hiện các đường dẫn thực thi lệnh phổ biến nhất mà mã thực hiện trong quá trình sử dụng thực tế, được ghi lại bằng cách ghi lại nhật ký phân nhánh của CPU. Mặc dù dữ liệu này có thể được thu thập từ các thiết bị trong nhóm, nhưng đối với nhân, chúng tôi tổng hợp dữ liệu đó trong môi trường phòng thí nghiệm bằng cách sử dụng khối lượng công việc tiêu biểu, chẳng hạn như chạy 100 ứng dụng phổ biến nhất. Chúng tôi sử dụng trình phân tích lấy mẫu để thu thập dữ liệu này, xác định phần nào của mã là "nóng" (thường xuyên được sử dụng) và phần nào là "lạnh". Khi chúng tôi xây dựng lại nhân hệ điều hành bằng các hồ sơ này, trình biên dịch có thể đưa ra các quyết định tối ưu hoá thông minh hơn nhiều, phù hợp với khối lượng công việc thực tế của Android.

Để hiểu rõ tác động của việc tối ưu hoá này, hãy xem xét các thông tin chính sau:

  • Trên Android, nhân hệ điều hành chiếm khoảng 40% thời gian của CPU.
  • Chúng tôi đã sử dụng AutoFDO để tối ưu hoá các tệp thực thi và thư viện gốc trong không gian người dùng, giúp cải thiện khoảng 4% thời gian khởi động nguội ứng dụng và giảm 1% thời gian khởi động.

Hiệu suất thực tế vượt trội

Chúng tôi đã thấy những cải tiến ấn tượng trên các chỉ số chính của Android bằng cách tận dụng hồ sơ từ môi trường phòng thí nghiệm được kiểm soát. Các hồ sơ này được thu thập bằng cách thu thập dữ liệu và khởi chạy ứng dụng, đồng thời được đo lường trên các thiết bị Pixel trên nhân 6.1, 6.6 và 6.12.

Những điểm cải tiến đáng chú ý nhất được liệt kê dưới đây. Bạn có thể xem thông tin chi tiết về hồ sơ AutoFDO cho các phiên bản kernel này trong kho lưu trữ hạt nhân Android tương ứng cho hạt nhân android16-6.12 và android15-6.6.

boosting_2.png

Đây không chỉ là những con số lý thuyết. Những cải tiến này giúp giao diện mượt mà hơn, chuyển đổi ứng dụng nhanh hơn, kéo dài thời lượng pin và mang lại trải nghiệm phản hồi nhanh hơn cho người dùng cuối.

Cách thức hoạt động: Quy trình

Chiến lược triển khai của chúng tôi bao gồm một quy trình phức tạp để đảm bảo hồ sơ luôn phù hợp và hiệu suất luôn ổn định.

boosting_3.png

Bước 1: Thu thập hồ sơ

Mặc dù dựa vào nhóm thử nghiệm nội bộ để lập hồ sơ tệp nhị phân không gian người dùng, nhưng chúng tôi đã chuyển sang môi trường phòng thí nghiệm có kiểm soát cho Hình ảnh hạt nhân chung (GKI). Việc tách biệt hoạt động phân tích tài nguyên khỏi chu kỳ phát hành thiết bị cho phép cập nhật linh hoạt, tức thì, độc lập với các phiên bản kernel đã triển khai. Điều quan trọng là các thử nghiệm xác nhận rằng dữ liệu dựa trên phòng thí nghiệm này mang lại mức tăng hiệu suất tương đương với mức tăng hiệu suất của các đội xe trong thực tế.

  • Công cụ và môi trường: Chúng tôi cài đặt ROM cho thiết bị thử nghiệm bằng hình ảnh nhân mới nhất và sử dụng simpleperf để ghi lại luồng thực thi lệnh. Quá trình này dựa vào các chức năng phần cứng để ghi lại nhật ký phân nhánh, cụ thể là sử dụng  Tiện ích theo dõi nhúng (ETE) ARM và Tiện ích vùng đệm theo dõi (TRBE) ARM trên các thiết bị Pixel.
  • Khối lượng công việc: Chúng tôi xây dựng một khối lượng công việc tiêu biểu bằng cách sử dụng 100 ứng dụng phổ biến nhất trong Bộ kiểm tra tính tương thích của ứng dụng Android (C-Suite). Để thu thập dữ liệu chính xác nhất, chúng tôi tập trung vào:
    • Khởi chạy ứng dụng: Tối ưu hoá cho độ trễ dễ nhận thấy nhất đối với người dùng
    • Thu thập dữ liệu ứng dụng dựa trên AI: Mô phỏng các hoạt động tương tác liên tục và ngày càng phát triển của người dùng
    • Giám sát trên toàn hệ thống: Không chỉ ghi lại các hoạt động của ứng dụng trên nền trước mà còn ghi lại các khối lượng công việc quan trọng ở chế độ nền và hoạt động giao tiếp giữa các quy trình
  • Xác thực: Khối lượng công việc tổng hợp này cho thấy mức độ tương đồng 85% với các mẫu thực thi được thu thập từ nhóm nội bộ của chúng tôi.
  • Dữ liệu được nhắm mục tiêu: Bằng cách lặp lại các thử nghiệm này đủ số lần, chúng tôi thu thập được các mẫu thực thi có độ chính xác cao, thể hiện chính xác hoạt động tương tác của người dùng trong thực tế với các ứng dụng phổ biến nhất. Hơn nữa, khung có thể mở rộng này cho phép chúng tôi tích hợp liền mạch các khối lượng công việc và điểm chuẩn bổ sung để mở rộng phạm vi bao phủ.

Bước 2: Xử lý hồ sơ

Chúng tôi xử lý hậu kỳ dữ liệu theo dõi thô để đảm bảo dữ liệu đó sạch, hiệu quả và sẵn sàng cho trình biên dịch.

  • Tổng hợp: Chúng tôi hợp nhất dữ liệu từ nhiều lần chạy thử nghiệm và thiết bị vào một chế độ xem hệ thống duy nhất.
  • Chuyển đổi: Chúng tôi chuyển đổi dấu vết thô sang định dạng hồ sơ AutoFDO, lọc ra các ký hiệu không mong muốn nếu cần.
  • Cắt bớt hồ sơ: Chúng tôi cắt bớt hồ sơ để xoá dữ liệu cho các hàm "lạnh", cho phép các hàm này sử dụng tính năng tối ưu hoá tiêu chuẩn. Điều này giúp ngăn chặn sự hồi quy trong mã hiếm khi được sử dụng và tránh tăng kích thước tệp nhị phân không cần thiết.

Bước 3: Kiểm thử hồ sơ

Trước khi triển khai, các hồ sơ sẽ trải qua quy trình xác minh nghiêm ngặt để đảm bảo mang lại hiệu suất ổn định mà không có rủi ro về độ ổn định.

  • Phân tích hồ sơ và tệp nhị phân: Chúng tôi so sánh nghiêm ngặt nội dung của hồ sơ mới (bao gồm các hàm thường dùng, số lượng mẫu và kích thước hồ sơ) với các phiên bản trước. Chúng tôi cũng sử dụng hồ sơ để tạo một hình ảnh nhân mới, phân tích tệp nhị phân để đảm bảo rằng các thay đổi đối với phần văn bản nhất quán với kỳ vọng.
  • Xác minh hiệu suất: Chúng tôi chạy các điểm chuẩn được nhắm mục tiêu trên hình ảnh nhân mới. Điều này xác nhận rằng nó duy trì các điểm cải thiện hiệu suất do các đường cơ sở trước đó thiết lập.

Cập nhật liên tục

Mã sẽ tự nhiên "trôi" theo thời gian, vì vậy, hồ sơ tĩnh cuối cùng sẽ mất hiệu quả. Để duy trì hiệu suất cao nhất, chúng tôi liên tục chạy quy trình để cập nhật thường xuyên:

  • Làm mới thường xuyên: Chúng tôi làm mới hồ sơ trong các nhánh LTS của nhân Android trước mỗi bản phát hành GKI, đảm bảo mọi bản dựng đều có dữ liệu hồ sơ mới nhất.
  • Mở rộng trong tương lai: Chúng tôi hiện đang cung cấp các bản cập nhật này cho các nhánh android16-6.12 và android15-6.6, đồng thời sẽ mở rộng phạm vi hỗ trợ cho các phiên bản GKI mới hơn, chẳng hạn như phiên bản android17-6.18 sắp ra mắt.

Đảm bảo tính ổn định

Một câu hỏi thường gặp về tính năng tối ưu hoá theo hướng dẫn của hồ sơ là liệu tính năng này có gây ra rủi ro về độ ổn định hay không. Vì AutoFDO chủ yếu ảnh hưởng đến các phương pháp phỏng đoán của trình biên dịch (chẳng hạn như nội tuyến hàm và bố cục mã) thay vì thay đổi logic của mã nguồn, nên AutoFDO sẽ giữ nguyên tính toàn vẹn chức năng của nhân hệ điều hành. Công nghệ này đã được chứng minh là có quy mô lớn, đóng vai trò là một phương pháp tối ưu hoá tiêu chuẩn cho các thư viện nền tảng Android, ChromeOS và cơ sở hạ tầng máy chủ của Google trong nhiều năm.

Để đảm bảo hơn nữa hành vi nhất quán, chúng tôi áp dụng chiến lược "thận trọng theo mặc định". Các hàm không được ghi lại trong hồ sơ có độ chính xác cao sẽ được tối ưu hoá bằng các phương thức trình biên dịch tiêu chuẩn. Điều này đảm bảo rằng các phần "lạnh" hoặc hiếm khi được thực thi của nhân hoạt động chính xác như trong bản dựng tiêu chuẩn, ngăn chặn tình trạng giảm hiệu suất hoặc hành vi không mong muốn trong các trường hợp đặc biệt.

Hướng đến tương lai

Chúng tôi hiện đang triển khai AutoFDO trên các nhánh android16-6.12 và android15-6.6. Ngoài đợt triển khai ban đầu này, chúng tôi nhận thấy một số hướng đi đầy hứa hẹn để cải thiện hơn nữa công nghệ này:

  • Mở rộng phạm vi tiếp cận: Chúng tôi mong muốn triển khai hồ sơ AutoFDO cho các phiên bản kernel GKI mới hơn và các mục tiêu bản dựng khác ngoài phạm vi hỗ trợ hiện tại của aarch64.
  • Tối ưu hoá mô-đun GKI: Hiện tại, chúng tôi tập trung tối ưu hoá tệp nhị phân nhân chính (vmlinux). Việc mở rộng AutoFDO sang các mô-đun GKI có thể mang lại lợi ích về hiệu suất cho một phần lớn hơn của hệ thống con nhân.
  • Hỗ trợ mô-đun của nhà cung cấp: Chúng tôi cũng muốn hỗ trợ AutoFDO cho các mô-đun của nhà cung cấp được xây dựng bằng Bộ phát triển trình điều khiển (DDK). Nhờ sự hỗ trợ sẵn có trong hệ thống xây dựng (Kleaf) và các công cụ phân tích tài nguyên (simpleperf), nhà cung cấp có thể áp dụng các kỹ thuật tối ưu hoá tương tự cho trình điều khiển phần cứng cụ thể của họ.
  • Phạm vi bao phủ hồ sơ rộng hơn: Có thể thu thập hồ sơ từ nhiều Hành trình trọng yếu của người dùng (CUJ) hơn để tối ưu hoá.

Bằng cách đưa AutoFDO vào nhân Android, chúng tôi đảm bảo rằng nền tảng của hệ điều hành được tối ưu hoá cho cách bạn sử dụng thiết bị hằng ngày.

Tác giả:
Tiếp tục đọc