Dung lượng là tổng lượng tài nguyên (CPU, GPU, v.v.) mà một thiết bị sở hữu trong một khoảng thời gian nhất định. Trang này mô tả cách xác định và giải quyết các vấn đề giật liên quan đến dung lượng.
Trình quản lý phản hồi chậm
Để tránh hiện tượng giật, trình điều khiển tần suất CPU cần có khả năng phản hồi nhanh với khối lượng công việc tăng đột biến. Hầu hết các ứng dụng giao diện người dùng đều tuân theo cùng một mẫu cơ bản:
- Người dùng đang đọc màn hình.
- Người dùng chạm vào màn hình: nhấn vào nút, cuộn, v.v.
- Màn hình cuộn, thay đổi hoạt động hoặc tạo ảnh động theo một cách nào đó để phản hồi đầu vào.
- Hệ thống chuyển sang trạng thái rảnh khi nội dung mới hiển thị.
- Người dùng quay lại đọc màn hình.
Thiết bị Pixel và Nexus triển khai tính năng tăng cường cảm ứng để sửa đổi hành vi của trình điều khiển tần số CPU (và trình lập lịch biểu) khi chạm. Để tránh việc tăng tốc độ chậm đến xung nhịp cao (có thể khiến thiết bị bị rớt khung hình khi chạm), tính năng tăng cường cảm ứng thường đặt tần suất sàn trên CPU để đảm bảo có đủ dung lượng CPU khi chạm. Một tầng tồn tại trong một khoảng thời gian sau khi chạm (thường là khoảng hai giây).
Pixel cũng sử dụng cgroup schedtune do tính năng Lên lịch có tính năng tiết kiệm pin (EAS) cung cấp làm tín hiệu tăng cường cảm ứng bổ sung: Các ứng dụng hàng đầu sẽ nhận được trọng số bổ sung thông qua schedtune để đảm bảo chúng có đủ dung lượng CPU để chạy nhanh. Nexus 5X và 6P có khoảng cách hiệu suất lớn hơn nhiều giữa các cụm CPU nhỏ và lớn (tương ứng là A53 và A57) so với Pixel với CPU Kryo. Chúng tôi nhận thấy rằng cụm CPU nhỏ không phải lúc nào cũng đủ để hiển thị giao diện người dùng một cách mượt mà, đặc biệt là khi có các nguồn giật khác trên thiết bị.
Do đó, trên Nexus 5X và 6P, tính năng tăng cường cảm ứng sẽ sửa đổi hành vi của trình lập lịch biểu để các ứng dụng trên nền trước có nhiều khả năng chuyển sang nhân lớn hơn (về mặt lý thuyết, điều này tương tự như tần suất CPU tối thiểu). Nếu không có thay đổi về trình lập lịch biểu để giúp các ứng dụng trên nền trước có nhiều khả năng chuyển sang cụm CPU lớn, các ứng dụng trên nền trước có thể không đủ dung lượng CPU để hiển thị cho đến khi trình lập lịch biểu quyết định cân bằng tải luồng vào một lõi CPU lớn. Bằng cách thay đổi hành vi của trình lập lịch biểu trong quá trình tăng cường cảm ứng, luồng giao diện người dùng có nhiều khả năng chạy ngay trên lõi lớn và tránh hiện tượng giật mà không buộc luồng đó luôn chạy trên lõi lớn. Điều này có thể ảnh hưởng nghiêm trọng đến mức tiêu thụ điện năng.
Điều tiết nhiệt
Tình trạng điều tiết nhiệt xảy ra khi thiết bị phải giảm tổng mức nhiệt đầu ra, thường được thực hiện bằng cách giảm xung nhịp CPU, GPU và DRAM. Không có gì đáng ngạc nhiên khi điều này thường dẫn đến hiện tượng giật vì hệ thống có thể không còn đủ khả năng kết xuất trong một lát cắt thời gian nhất định. Cách duy nhất để tránh tình trạng điều tiết nhiệt là sử dụng ít năng lượng hơn. Không có nhiều cách để thực hiện việc này, nhưng dựa trên kinh nghiệm của chúng tôi với các SOC trước đây, chúng tôi có một số đề xuất dành cho nhà cung cấp hệ thống.
Trước tiên, khi xây dựng một SOC mới có cấu trúc CPU không đồng nhất, hãy đảm bảo rằng các đường cong hiệu suất/W của các cụm CPU chồng chéo lên nhau. Đường cong hiệu suất/W tổng thể cho toàn bộ bộ xử lý phải là một đường liên tục. Các điểm không liên tục trong biểu đồ hiệu suất/W buộc trình lập lịch biểu và trình quản lý tần suất phải đoán nhu cầu của khối lượng công việc; để ngăn hiện tượng giật, trình lập lịch biểu và trình quản lý tần suất sẽ mắc lỗi khi cung cấp cho khối lượng công việc nhiều dung lượng hơn mức cần thiết. Điều này dẫn đến việc tiêu tốn quá nhiều năng lượng, góp phần làm tăng nhiệt độ.
Hãy tưởng tượng một SOC giả định có hai cụm CPU:
- Cụm 1, cụm nhỏ, có thể tiêu thụ từ 100 đến 300 mW và đạt điểm từ 100 đến 300 trong điểm chuẩn về thông lượng, tuỳ thuộc vào xung nhịp.
- Cụm 2 (cụm lớn) có thể tiêu thụ từ 1000 đến 1600 mW và đạt điểm từ 800 đến 1200 trong cùng một điểm chuẩn về thông lượng, tuỳ thuộc vào xung nhịp.
Trong điểm chuẩn này, điểm số càng cao thì tốc độ càng nhanh. Mặc dù không mong muốn hơn là chậm hơn, nhưng nhanh hơn đồng nghĩa với tiêu thụ nhiều năng lượng hơn.
Nếu trình lập lịch biểu cho rằng khối lượng công việc của giao diện người dùng sẽ yêu cầu điểm tương đương với 310 trên điểm chuẩn về thông lượng đó, thì lựa chọn tốt nhất để tránh hiện tượng giật là chạy cụm lớn ở tần suất thấp nhất, lãng phí điện năng đáng kể. (Điều này phụ thuộc vào hành vi cpuidle và race to idle; SOC có các đường cong hiệu suất/W liên tục sẽ dễ tối ưu hoá hơn.)
Thứ hai, hãy sử dụng cpusets. Đảm bảo bạn đã bật cpusets trong hạt nhân và trong BoardConfig.mk
. Bạn cũng phải thiết lập các chỉ định cpuset thực tế trong init.rc
dành riêng cho thiết bị. Một số nhà cung cấp tắt tính năng này trong BSP với hy vọng có thể sử dụng các gợi ý khác để ảnh hưởng đến hành vi của trình lập lịch biểu; chúng tôi cảm thấy điều này không hợp lý. cpuset hữu ích cho việc đảm bảo việc cân bằng tải giữa các CPU được thực hiện theo cách phản ánh những gì người dùng thực sự đang làm trên thiết bị.
ActivityManager chỉ định ứng dụng cho các cpuset khác nhau dựa trên mức độ quan trọng tương đối của các ứng dụng đó (trên cùng, nền trước, nền sau), trong đó các ứng dụng quan trọng hơn sẽ có nhiều quyền truy cập hơn vào lõi CPU. Điều này giúp đảm bảo chất lượng dịch vụ cho các ứng dụng trên nền trước và ứng dụng hàng đầu.
cpusets hữu ích trên các cấu hình CPU đồng nhất, nhưng bạn không nên vận chuyển một thiết bị có cấu hình CPU không đồng nhất mà không bật cpusets. Nexus 6P là một mô hình phù hợp để biết cách sử dụng cpuset trên các cấu hình CPU không đồng nhất; hãy sử dụng mô hình đó làm cơ sở cho cấu hình của thiết bị của riêng bạn.
cpusets cũng mang lại lợi thế về nguồn điện bằng cách đảm bảo các luồng trong nền không quan trọng về hiệu suất không bao giờ được cân bằng tải với các lõi CPU lớn, nơi chúng có thể tiêu tốn nhiều năng lượng hơn đáng kể mà không mang lại lợi ích nào cho người dùng. Điều này cũng có thể giúp tránh tình trạng điều tiết nhiệt. Mặc dù điều tiết nhiệt là một vấn đề về dung lượng, nhưng các điểm cải tiến về độ giật có tác động lớn đến hiệu suất giao diện người dùng khi điều tiết nhiệt. Vì hệ thống sẽ chạy gần hơn với khả năng kết xuất 60 khung hình/giây, nên sẽ ít bị giật hơn để gây ra hiện tượng bỏ khung hình.