Tính năng tạo lô là gì?
Tính năng xử lý hàng loạt đề cập đến việc lưu vào bộ đệm các sự kiện cảm biến trong một trung tâm cảm biến và/hoặc FIFO phần cứng trước khi báo cáo các sự kiện thông qua Sensors HAL. Vị trí lưu trữ sự kiện cảm biến (hub cảm biến và/hoặc FIFO phần cứng) được gọi là "FIFO" trên trang này. Khi tính năng gộp sự kiện cảm biến không hoạt động, các sự kiện cảm biến sẽ được báo cáo ngay lập tức cho HAL cảm biến (nếu có).
Tính năng xử lý hàng loạt có thể giúp tiết kiệm pin đáng kể bằng cách chỉ đánh thức bộ xử lý ứng dụng (AP) chính chạy Android khi nhiều sự kiện cảm biến đã sẵn sàng để xử lý, thay vì đánh thức bộ xử lý này cho từng sự kiện riêng lẻ. Mức tiết kiệm pin tiềm năng có liên quan trực tiếp đến số lượng sự kiện mà trung tâm cảm biến và/hoặc FIFO có thể lưu vào bộ đệm: khả năng tiết kiệm pin sẽ cao hơn nếu có thể phân lô nhiều sự kiện hơn. Tính năng tạo lô tận dụng việc sử dụng bộ nhớ tiêu thụ điện năng thấp để giảm số lần đánh thức AP tiêu thụ điện năng cao.
Tính năng xử lý hàng loạt chỉ có thể xảy ra khi cảm biến có FIFO phần cứng và/hoặc có thể lưu các sự kiện vào vùng đệm trong một trung tâm cảm biến. Trong cả hai trường hợp, cảm biến phải báo cáo số lượng sự kiện tối đa có thể được phân lô cùng một lúc thông qua SensorInfo.fifoMaxEventCount
.
Nếu một cảm biến có không gian được đặt trước trong FIFO, thì cảm biến đó phải báo cáo số lượng sự kiện được đặt trước thông qua SensorInfo.fifoReservedEventCount
. Nếu FIFO dành riêng cho cảm biến, thì SensorInfo.fifoReservedEventCount
là kích thước của FIFO. Nếu FIFO được chia sẻ giữa nhiều cảm biến, thì giá trị này có thể bằng 0. Một trường hợp sử dụng phổ biến là cho phép một cảm biến sử dụng toàn bộ FIFO nếu đó là cảm biến duy nhất đang hoạt động. Nếu nhiều cảm biến đang hoạt động, thì mỗi cảm biến sẽ được đảm bảo không gian cho ít nhất SensorInfo.fifoReservedEventCount
sự kiện trong FIFO. Nếu bạn sử dụng một trung tâm cảm biến, thì việc đảm bảo có thể được thực thi thông qua phần mềm.
Sự kiện cảm biến được phân thành lô trong các trường hợp sau:
- Độ trễ báo cáo tối đa hiện tại của cảm biến lớn hơn 0, nghĩa là các sự kiện cảm biến có thể bị trễ tối đa đến độ trễ báo cáo trước khi được báo cáo thông qua HAL.
- AP đang ở chế độ tạm ngưng và cảm biến là cảm biến không đánh thức. Trong trường hợp này, các sự kiện không được đánh thức AP và phải được lưu trữ cho đến khi AP đánh thức.
Nếu một cảm biến không hỗ trợ tính năng gửi theo lô và AP đang ở trạng thái ngủ, thì chỉ các sự kiện cảm biến đánh thức mới được báo cáo cho AP và không được báo cáo các sự kiện không đánh thức cho AP.
Tham số xử lý hàng loạt
Hai tham số điều chỉnh hành vi của tính năng xử lý hàng loạt là sampling_period_ns và max_report_latency_ns.
sampling_period_ns
xác định tần suất tạo sự kiện cảm biến mới và max_report_latency_ns
xác định khoảng thời gian cho đến khi sự kiện phải được báo cáo cho HAL cảm biến.
sampling_period_ns
Ý nghĩa của tham số sampling_period_ns
phụ thuộc vào chế độ báo cáo của cảm biến được chỉ định:
- Liên tục:
sampling_period_ns
là tốc độ lấy mẫu, nghĩa là tốc độ tạo sự kiện. - Khi thay đổi:
sampling_period_ns
giới hạn tốc độ lấy mẫu của các sự kiện, nghĩa là các sự kiện được tạo không nhanh hơn mỗisampling_period_ns
nano giây. Các khoảng thời gian có thể dài hơnsampling_period_ns
nếu không có sự kiện nào được tạo và các giá trị đo lường không thay đổi trong thời gian dài. Để biết thêm thông tin, hãy xem chế độ báo cáo khi thay đổi. - Một lần:
sampling_period_ns
bị bỏ qua. Việc này không có hiệu lực. - Đặc biệt: Để biết thông tin chi tiết về cách sử dụng
sampling_period_ns
cho các cảm biến đặc biệt, hãy xem phần Các loại cảm biến.
Để biết thêm thông tin về tác động của sampling_period_ns
trong các chế độ khác nhau, hãy xem phần Chế độ báo cáo.
Đối với cảm biến liên tục và cảm biến theo thay đổi:
- nếu
sampling_period_ns
nhỏ hơnSensorInfo.minDelay
, thì quá trình triển khai HAL phải tự động kẹp giá trị này thànhmax(SensorInfo.minDelay, 1ms)
. Android không hỗ trợ việc tạo sự kiện ở tần số trên 1000 Hz. - nếu
sampling_period_ns
lớn hơnSensorInfo.maxDelay
, thì quá trình triển khai HAL phải tự động cắt bớt thànhSensorInfo.maxDelay
.
Đôi khi, các cảm biến vật lý có giới hạn về tốc độ chạy và độ chính xác của đồng hồ. Để tính đến điều này, tần suất lấy mẫu thực tế có thể khác với tần suất được yêu cầu, miễn là tần suất đó đáp ứng các yêu cầu trong bảng dưới đây.
Nếu tần suất được yêu cầu là |
Khi đó, tần suất thực tế phải là |
---|---|
dưới tần suất tối thiểu (<1/maxDelay) |
từ 90% đến 110% tần suất tối thiểu |
giữa tần suất tối thiểu và tối đa |
từ 90% đến 220% tần suất được yêu cầu |
trên tần suất tối đa (>1/minDelay) |
từ 90% đến 110% tần số tối đa và dưới 1.100 Hz |
max_report_latency_ns
max_report_latency_ns
đặt thời gian tối đa tính bằng nano giây, theo đó các sự kiện có thể bị trì hoãn và lưu trữ trong FIFO phần cứng trước khi được báo cáo thông qua HAL trong khi AP đang thức.
Giá trị bằng 0 cho biết các sự kiện phải được báo cáo ngay khi được đo lường, bỏ qua hoàn toàn FIFO hoặc làm trống FIFO ngay khi có một sự kiện từ cảm biến.
Ví dụ: một gia tốc kế được kích hoạt ở tần số 50 Hz bằng max_report_latency_ns=0
sẽ kích hoạt các ngắt 50 lần mỗi giây khi AP đang thức.
Khi max_report_latency_ns>0
, bạn không cần báo cáo sự kiện cảm biến ngay khi phát hiện thấy sự kiện đó. Các sự kiện này có thể được lưu trữ tạm thời trong FIFO và báo cáo theo lô, miễn là không có sự kiện nào bị trễ quá max_report_latency_ns
nano giây. Điều này có nghĩa là tất cả sự kiện kể từ lô trước sẽ được ghi lại và trả về cùng một lúc. Điều này làm giảm số lượng tín hiệu ngắt được gửi đến AP và cho phép AP chuyển sang chế độ tiết kiệm pin hơn (rảnh) trong khi cảm biến đang thu thập và phân lô dữ liệu.
Mỗi sự kiện đều có một dấu thời gian liên kết với sự kiện đó. Việc trì hoãn thời gian báo cáo sự kiện sẽ không ảnh hưởng đến dấu thời gian của sự kiện. Dấu thời gian phải chính xác và tương ứng với thời điểm sự kiện thực sự xảy ra, chứ không phải thời điểm sự kiện được báo cáo.
Việc cho phép lưu trữ tạm thời các sự kiện cảm biến trong FIFO không làm thay đổi hành vi gửi sự kiện đến HAL; các sự kiện từ nhiều cảm biến có thể được xen kẽ và tất cả sự kiện từ cùng một cảm biến đều được sắp xếp theo thời gian.
Sự kiện đánh thức và không đánh thức
Các sự kiện cảm biến từ cảm biến đánh thức phải được lưu trữ trong một hoặc nhiều FIFO đánh thức. Một thiết kế phổ biến là có một FIFO đánh thức lớn, dùng chung, trong đó các sự kiện từ tất cả cảm biến đánh thức được xen kẽ. Ngoài ra, bạn có thể có một FIFO đánh thức cho mỗi cảm biến hoặc có các FIFO chuyên dụng cho các cảm biến đánh thức cụ thể và một FIFO dùng chung cho các cảm biến đánh thức còn lại.
Tương tự, các sự kiện cảm biến từ cảm biến không đánh thức phải được lưu trữ trong một hoặc nhiều FIFO không đánh thức.
Trong mọi trường hợp, bạn không thể xen kẽ sự kiện cảm biến đánh thức và sự kiện cảm biến không đánh thức trong cùng một FIFO. Các sự kiện đánh thức phải được lưu trữ trong FIFO đánh thức và các sự kiện không đánh thức phải được lưu trữ trong FIFO không đánh thức.
Đối với FIFO đánh thức, thiết kế FIFO đơn, lớn, dùng chung sẽ mang lại lợi ích về năng lượng tốt nhất. Đối với FIFO không đánh thức, FIFO dùng chung lớn duy nhất và một số thiết kế FIFO dành riêng nhỏ có đặc điểm tiêu thụ điện năng tương tự nhau. Để biết thêm đề xuất về cách định cấu hình từng FIFO, hãy xem phần Mức độ ưu tiên phân bổ FIFO.
Hành vi bên ngoài chế độ tạm ngưng
Khi AP ở trạng thái thức (không ở chế độ tạm ngưng), các sự kiện sẽ được lưu trữ tạm thời trong FIFO, miễn là các sự kiện đó không bị trễ quá max_report_latency
.
Miễn là AP không chuyển sang chế độ tạm ngưng, sẽ không có sự kiện nào bị bỏ qua hoặc bị mất. Nếu FIFO nội bộ bị đầy trước khi max_report_latency
trôi qua, các sự kiện sẽ được báo cáo tại thời điểm đó để đảm bảo không có sự kiện nào bị mất.
Nếu một số cảm biến dùng chung một FIFO và max_report_latency
của một trong các cảm biến đó đã trôi qua, thì tất cả sự kiện từ FIFO sẽ được báo cáo, ngay cả khi max_report_latency
của các cảm biến khác chưa trôi qua. Điều này giúp giảm số lần báo cáo hàng loạt sự kiện. Khi bạn phải báo cáo một sự kiện, tất cả sự kiện từ tất cả các cảm biến sẽ được báo cáo.
Ví dụ: nếu các cảm biến sau được kích hoạt:
- gia tốc kế theo lô với
max_report_latency
= 20 giây - con quay hồi chuyển theo lô với
max_report_latency
= 5 giây
Các lô gia tốc kế được báo cáo cùng lúc với các lô con quay hồi chuyển (mỗi 5 giây), ngay cả khi gia tốc kế và con quay hồi chuyển không dùng chung FIFO.
Hành vi ở chế độ tạm ngưng
Tính năng xử lý hàng loạt đặc biệt hữu ích khi thu thập dữ liệu cảm biến ở chế độ nền mà không cần giữ cho AP ở trạng thái thức. Vì trình điều khiển cảm biến và việc triển khai HAL không được phép giữ khoá chế độ thức*, nên AP có thể chuyển sang chế độ tạm ngưng ngay cả khi đang thu thập dữ liệu cảm biến.
Hành vi của cảm biến trong khi AP bị tạm ngưng phụ thuộc vào việc cảm biến có phải là cảm biến đánh thức hay không. Để biết thêm thông tin chi tiết, hãy xem phần Cảm biến đánh thức.
Khi một FIFO không đánh thức đầy, FIFO đó phải bao bọc và hoạt động như một bộ đệm tròn, ghi đè các sự kiện cũ bằng các sự kiện mới thay thế các sự kiện cũ. max_report_latency
không ảnh hưởng đến các FIFO không đánh thức trong khi ở chế độ tạm ngưng.
Khi FIFO đánh thức đầy hoặc khi max_report_latency
của một trong các cảm biến đánh thức hết thời gian, phần cứng phải đánh thức AP và báo cáo dữ liệu.
Trong cả hai trường hợp (đánh thức và không đánh thức), ngay khi AP thoát khỏi chế độ tạm ngưng, một lô sẽ được tạo với nội dung của tất cả FIFO, ngay cả khi max_report_latency
của một số cảm biến chưa trôi qua. Điều này giúp giảm thiểu nguy cơ AP phải thức dậy lại ngay sau khi quay lại chế độ tạm ngưng, do đó giảm thiểu mức tiêu thụ điện năng.
*Một trường hợp ngoại lệ đáng chú ý là trình điều khiển không được phép giữ khoá chế độ thức khi cảm biến đánh thức có chế độ báo cáo liên tục được kích hoạt bằng max_report_latency
< 1 giây. Trong trường hợp này, trình điều khiển có thể giữ khoá chế độ thức vì AP không có thời gian chuyển sang chế độ tạm ngưng, vì AP sẽ được đánh thức bằng một sự kiện đánh thức trước khi chuyển sang chế độ tạm ngưng.
Những biện pháp phòng ngừa khi tạo lô cảm biến đánh thức
Tuỳ thuộc vào thiết bị, có thể mất vài mili giây để AP hoàn toàn thoát khỏi chế độ tạm ngưng và bắt đầu xả FIFO. Phải phân bổ đủ khoảng đệm trong FIFO để cho phép thiết bị thoát khỏi chế độ tạm ngưng mà không làm tràn FIFO đánh thức. Không được mất sự kiện nào và phải tuân thủ max_report_latency
.
Các biện pháp phòng ngừa khi tạo lô cảm biến không đánh thức khi thay đổi
Cảm biến khi thay đổi chỉ tạo sự kiện khi giá trị mà chúng đang đo lường đang thay đổi. Nếu giá trị đo lường thay đổi trong khi AP ở chế độ tạm ngưng, thì các ứng dụng sẽ nhận được sự kiện ngay khi AP thức dậy. Do đó, bạn phải thực hiện cẩn thận việc gộp các sự kiện cảm biến không đánh thức khi thay đổi nếu cảm biến chia sẻ FIFO với các cảm biến khác. Sự kiện cuối cùng do mỗi cảm biến thay đổi tạo ra phải luôn được lưu bên ngoài FIFO dùng chung để không bao giờ bị các sự kiện khác ghi đè. Khi AP thức dậy, sau khi tất cả sự kiện từ FIFO đã được báo cáo, sự kiện cảm biến thay đổi gần đây nhất phải được báo cáo.
Sau đây là một tình huống cần tránh:
- Ứng dụng đăng ký với bộ đếm bước không đánh thức (khi thay đổi) và gia tốc kế không đánh thức (liên tục), cả hai đều dùng chung một FIFO.
- Ứng dụng nhận được một sự kiện bộ đếm bước
step_count=1000 steps
code>. - AP chuyển sang trạng thái tạm ngưng.
- Người dùng đi bộ 20 bước, khiến các sự kiện của bộ đếm bước và gia tốc kế được xen kẽ, sự kiện bộ đếm bước cuối cùng là
step_count = 1020 steps
. - Người dùng không di chuyển trong một thời gian dài, khiến các sự kiện gia tốc kế tiếp tục tích luỹ trong FIFO, cuối cùng ghi đè mọi sự kiện
step_count
trong FIFO dùng chung. - AP sẽ thức dậy và tất cả sự kiện từ FIFO sẽ được gửi đến ứng dụng.
- Ứng dụng chỉ nhận được các sự kiện gia tốc kế và cho rằng người dùng không đi bộ.
Bằng cách lưu sự kiện bộ đếm bước cuối cùng bên ngoài FIFO, HAL có thể báo cáo sự kiện này khi AP thức dậy, ngay cả khi tất cả sự kiện bộ đếm bước khác đều bị ghi đè bởi sự kiện gia tốc kế. Bằng cách này, ứng dụng sẽ nhận được step_count = 1020 steps
khi AP thức dậy.
Triển khai tính năng tạo lô
Để tiết kiệm pin, bạn phải triển khai tính năng xử lý hàng loạt mà không cần đến sự trợ giúp của AP và cho phép AP tạm ngưng trong quá trình xử lý hàng loạt.
Nếu quá trình xử lý hàng loạt được thực hiện trong một trung tâm cảm biến, thì mức sử dụng năng lượng của trung tâm cảm biến phải được giảm thiểu.
Bạn có thể sửa đổi độ trễ báo cáo tối đa bất cứ lúc nào, đặc biệt là khi cảm biến đã chỉ định đã được bật; và điều này không được làm mất các sự kiện.
Mức độ ưu tiên phân bổ FIFO
Trên các nền tảng có giới hạn về kích thước bộ đệm cảm biến và/hoặc FIFO phần cứng, nhà thiết kế hệ thống có thể phải chọn lượng FIFO cần đặt trước cho mỗi cảm biến. Để giúp bạn lựa chọn, sau đây là danh sách các ứng dụng có thể áp dụng khi triển khai tính năng xử lý hàng loạt trên các cảm biến khác nhau.
Giá trị cao: Đo lường vị trí người đi bộ ở mức năng lượng thấp
Thời gian tạo lô mục tiêu: 1 đến 10 phút
Cảm biến để tạo lô:
- Trình phát hiện bước chân khi thức dậy
- Vectơ xoay trò chơi khi đánh thức ở tần số 5 Hz
- Barometer đánh thức ở tần số 5 Hz
- Từ kế chưa được hiệu chuẩn ở chế độ thức 5 Hz
Việc phân lô dữ liệu này cho phép thực hiện tính toán đường đi bộ trong khi cho phép AP chuyển sang trạng thái tạm ngưng.
Giá trị cao: Nhận dạng cử chỉ/hoạt động gián đoạn ở mức năng lượng trung bình
Thời gian tạo lô mục tiêu: 3 giây
Cảm biến để tạo lô: Gia tốc kế không đánh thức ở tần số 50 Hz
Việc phân lô dữ liệu này cho phép nhận dạng định kỳ các hoạt động và cử chỉ tuỳ ý mà không cần phải giữ cho AP thức trong khi thu thập dữ liệu.
Giá trị trung bình: Nhận dạng cử chỉ/hoạt động liên tục ở mức năng lượng trung bình
Thời gian tạo lô mục tiêu: 1 đến 3 phút
Cảm biến để tạo lô: Gia tốc kế đánh thức ở tần số 50 Hz
Việc phân lô dữ liệu này cho phép liên tục nhận dạng các hoạt động và cử chỉ tuỳ ý mà không cần phải giữ cho AP thức trong khi thu thập dữ liệu.
Giá trị trung bình cao: Giảm tải khi bị gián đoạn
Thời gian tạo lô mục tiêu: < 1 giây
Cảm biến theo lô: mọi cảm biến tần số cao, thường không đánh thức.
Nếu bạn đặt con quay hồi chuyển ở tốc độ 240 Hz, thì ngay cả khi chỉ xử lý hàng loạt 10 sự kiện con quay hồi chuyển, bạn cũng có thể giảm số lượng ngắt từ 240/giây xuống còn 24/giây.
Giá trị trung bình: Thu thập dữ liệu liên tục ở tần suất thấp
Thời gian tạo lô mục tiêu: 1 đến 10 phút
Cảm biến để tạo lô:
- Khí áp kế đánh thức ở tần số 1 Hz
- Cảm biến độ ẩm đánh thức ở tần số 1 Hz
- Các cảm biến đánh thức tần số thấp khác ở tốc độ tương tự
Cho phép tạo ứng dụng giám sát ở mức năng lượng thấp.
Giá trị trung bình thấp: Thu thập liên tục toàn bộ cảm biến
Thời gian tạo lô mục tiêu: 1 đến 10 phút
Cảm biến để tạo lô: Tất cả cảm biến đánh thức, ở tần số cao
Cho phép thu thập đầy đủ dữ liệu cảm biến trong khi để AP ở chế độ tạm ngưng. Chỉ xem xét nếu không gian FIFO không phải là vấn đề.