SDV hizmet kalitesi (HK) planlama çerçevesi, Yaşam Döngüsü Yöneticisi (LM) tarafından yönetilen hizmet paketleri için deterministik CPU kaynak ayırma işlemi sağlar. Platform, düşük seviyeli Linux planlama özelliklerini (Politika, Öncelik, Nice) mantıksal ön ayarlara dönüştürerek hizmet geliştirme ile araç genelinde sistem ayarlama arasında net bir ayrım yapılmasını sağlar. Bu sayede, sistem kararlılığı korumak için arka plan görevlerini kısıtlarken güvenlik açısından kritik ve zamana duyarlı iş yükleri için gerekli işlem bant genişliği sağlanır.
Roller ve sorumluluklar
SDV planlama modeli, OEM'in sistemi ayarlamasına izin verirken hizmetlerin taşınabilir kalmasını sağlamak için devredilmiş sorumluluk modelini kullanır.
| Rol | Sorumluluk | Temel çıktı |
|---|---|---|
| SDV platformu (Google) | sdv_service_bundles_scheduling.proto şemasını tanımlar, LM zorlama mantığını uygular ve sdv_service_bundles_scheduling istemci kitaplığını sağlar. |
Protobuf tanımları ve platform kitaplıkları |
| OEM (sistem entegratörü) | Her hazır ayarın somut değerlerini (ör. belirli donanımlarda ELEVATED ne anlama gelir) tanımlar ve sistem genelindeki yapılandırmayı kontrol eder. |
/product/etc/lifecycle_config.textproto |
| Hizmet geliştirici | Uygun mantıksal hazır ayar adını seçer ve scheduling_config.textproto yolunu hizmet paketi manifestine kaydeder. |
scheduling_config.textproto ve sdv_service_bundles_manifest.textproto |
Teknik iş akışı
- Platform entegrasyonu: OEM, araca özgü
lifecycle_config.textprotodosyasını tanımlar. Bu dosya, sistem genelinde planlama profillerini (ön ayarlar) oluşturur ve bunları hedef donanıma göre somut Linux planlama özellikleriyle eşler. - Hizmet paketi geliştirme: Geliştirici, APEX paketine bir
scheduling_config.textprotoyerleştirir, mantıksal bir ön ayar (ör.ELEVATED) önerir ve tüm dahili iş parçacığı adlarını tanımlar. - Hizmet paketi entegrasyonu: Araç entegrasyonu aşamasında OEM, geliştiricinin önerdiği hazır ayarı inceler. OEM, APEX'i imzalamadan önce genel sistem kararlılığını artırmak için önerilen profili koruyabilir veya geçersiz kılabilir (ör.
ELEVATEDhizmetiniNORMALhizmetine düşürebilir). - Çalışma zamanı özelliği çözümü: Bir hizmet başlatıldığında LM, hizmetin manifest dosyasından yetkili hazır ayarı tanımlar ve OEM'nin sistem yapılandırmasından ilgili Linux özelliklerini alır.
- Başlangıç senkronizasyonu ve zorunlu kılma: LM, sinyal-ve-devam protokolünü kullanarak yürütmeye devam etmesi için sinyal vermeden önce çözümlenen özellikleri hizmet sürecine uygular.
Temel kavramlar
Aşağıdaki kavramlar, SDV planlama çerçevesinin temelini oluşturur.
Planlama hazır ayarları
Planlama ön ayarları, SDV'de HK'yi yönetmek için kullanılan temel mekanizmadır. Geliştiriciler, ham Linux planlama parametrelerini tanımlamak yerine önceden tanımlanmış ön ayarları ada göre referans alır. Çalışma zamanında LM, bu mantıksal adları somut Linux planlama özellikleriyle eşler.
lifecycle_config.textproto bölümünde örnek olarak yapılandırılan aşağıdaki hazır ayarlar:
| Hazır ayar adı | Planlama politikası | Normal nice değeri | Tipik kullanım alanı |
|---|---|---|---|
NORMAL |
SCHED_OTHER |
0 |
Standart hizmetler (ısıtma, havalandırma ve iklimlendirme, medya, ayarlar) |
ELEVATED |
SCHED_OTHER |
-10 |
Temel sistem bileşenleri ve altyapı |
IDLE |
SCHED_IDLE |
19 |
Arka plan analizi ve kritik olmayan günlük kaydı |
CUSTOM |
Kullanıcı tanımlı | -20 (ilk) |
Anlık politikalar veya yakınlık gerektiren hizmetler |
Bir hazır ayar uygulandığında LM, setpriority sistem çağrısını kullanarak süreç genelinde nice değerini ayarlar. Bu, varsayılan Linux Completely Fair Scheduler (CFS) altında çekişme sırasında işlemin aldığı göreceli CPU payını etkiler.
Ayrıcalık ve güvenlik
SDV platformu, yetkisiz öncelik yükseltmesini önlemek için SELinux alanlarına ve Linux özelliklerine dayalı katmanlı bir güvenlik modeli kullanır.
Güvenlik alanları
untrusted_service_bundle: Standart hazır ayarların (NORMAL,ELEVATED,IDLE) varsayılan alanı. Çekirdek, bu alandaki işlemleri kısıtlayarak kendi planlama parametrelerini değiştirmelerini engeller.priority_service_bundle: Sistem genelindekilifecycle_config.textprotoiçindeis_privileged: trueayarlanmış bir hazır ayarın kullanıldığı tüm hizmet paketlerine verilir. Bu alana geçiş, işlemeCAP_SYS_NICEyeteneğini verir ve kendi kaynak ayırımını yönetmesine olanak tanır.
CAP_SYS_NICE özelliği
Platform, priority_service_bundle alanındaki işlemlere CAP_SYS_NICE özelliğini verir. Bu izin, bir işlemin aşağıdakileri yapmasına olanak tanır:
- Kendi
nicedeğerini ilk atamasının ötesine taşıyın. - Planlama politikasını
SCHED_FIFOveyaSCHED_RRgibi anlık dersler olarak değiştirin. sched_setaffinitykullanarak CPU yakınlığını ayarlayın.SCHED_DEADLINEiçin özel son tarih parametrelerini yapılandırın.
Bu özelliği özel bir alanla sınırlamak, açıkça yetkilendirilmiş hizmetlerdeki kesintileri sınırlandırarak sistem genelindeki planlama dengesini korur.
Yapılandırma kılavuzu
Bu bölümde hem OEM'ler hem de hizmet geliştiriciler için yapılandırma yönergeleri verilmektedir.
OEM kılavuzu: Sistem genelinde hazır ayarlar
OEM, /product/etc/lifecycle_config.textproto içinde planlama profillerini tanımlar. Platform, lifecycle_management/config/lifecycle_config.textproto adresinde, OEM'lerin araç donanımına göre ayarlaması gereken bir örnek sunar.
Örnek: Gerçek zamanlı bir hazır ayar tanımlama
Bir OEM, güvenlik ile ilgili hizmetler için standart uygulamalar tarafından hiçbir zaman öncelenmemesi gereken bir CRITICAL ön ayarı tanımlayabilir:
# lifecycle_config.textproto
scheduling_presets {
name: "CRITICAL"
is_privileged: true
thread_scheduling_configuration {
policy: 1 # SCHED_FIFO
priority: 80 # High real-time priority
}
}
Geliştirici kılavuzu: Hizmet paketi yapılandırması
Hizmet geliştiriciler, önceden ayarlanmış bir değer kullanmayı önerir ve isteğe bağlı olarak scheduling_config.textproto dosyasında mantıksal iş parçacığı adları tanımlar. Platform tarafından bulunabilmesi için bu dosyanın yolu sdv_service_bundles_manifest.textproto içinde kaydedilmelidir.
Örnek: Manifest kaydı
# sdv_service_bundles_manifest.textproto
service_bundle_entries {
name: "SensorService"
scheduling_config_path: "configs/scheduling_config.textproto"
}
Örnek: Standart bir ön ayar kullanma
Çoğu hizmet için scheduling_config.textproto içinde bir hazır ayar adına referans vermek yeterlidir:
# configs/scheduling_config.textproto
scheduling_preset_name: "ELEVATED"
Örnek: Hizmet tarafından oluşturulan çalışan iş parçacıkları için planlama
Bir hizmet geliştirici, kodunda ek çalışan iş parçacıkları oluşturarak düşük gecikmeli sensör verisi döngüsü gibi özel görevleri işleyebilir. Geliştirici, yapılandırma dosyasında bu dahili iş parçacıkları için adlandırılmış planlama özellikleri tanımlayabilir.
Manuel uygulamayı yalnızca bu meta verileri kullanarak dahili çalışan iş parçacıklarının özelliklerini ayarlayan ayrıcalıklı hizmetlerde kullanın:
# configs/scheduling_config.textproto
scheduling_preset_name: "CUSTOM"
# Map of logical thread names to their attributes (propagated as metadata)
thread_scheduling_configuration {
key: "sensor-processing-thread"
value {
policy: 1 # SCHED_FIFO
priority: 50
cpu_affinity_ids: [2, 3] # Pin to specific cores
}
}
Sistem davranışı ve yaptırım
SDV platformu, hizmete özel herhangi bir kodu çalıştırmadan önce planlama yapılandırmalarını etkinleştirmek için katı bir zorunlu kılma modeli kullanır.
Başlangıç senkronizasyonu
Bir hizmetin yanlış öncelikte çalışmasını önlemek için (başlatma aşamasında bile) LM ve Service Bundle Runner (SBR), sinyal ve devam senkronizasyon protokolünü kullanır:
- İşlem oluşturma: LM, SBR işlemini çatallandırır. Bu noktada, SBR alt işlemi çalışır ancak hemen engellenmiş bir duruma girer ve
stdinüzerinde bir sinyal bekler. - Özellik uygulama: Alt öğe engellendiğinde LM, istenen
nicedeğerini uygulamak içinsetprioritysistem çağrısını kullanır ve planlama politikasını (ör.SCHED_IDLE) yapılandırır. - Güvenlik geçişi: LM, SELinux alan geçişini gerçekleştirerek çocuğu
untrusted_service_bundleveyapriority_service_bundlealanına taşır. - Sinyal: LM, yalnızca tüm parametreler başarıyla uygulandıktan sonra çocuğun
stdin'ına tek baytlık bir sinyal gönderir. - Yürütme: SBR, sinyali alır ve hizmet kitaplıklarını yüklemeye, yaşam döngüsü yöntemlerini çağırmaya başlar.
Ana iş parçacığı ve yaşam döngüsü üzerindeki etkisi
Platform, hizmet kitaplıkları yüklenmeden önce senkronizasyon yaparak yaşam döngüsü geri çağırmalarının tamamında ana yürütme iş parçacığı için istenen önceliği korur:
onCreate: Tüm bağımlılık ekleme ve ilk kaynak ayırma işlemi doğru öncelikte gerçekleşir.onStart: Hazır ayar, etkin duruma geçişi ve tüm ilk çalışma döngülerini yönetir.onStopveonDestroy: Platform, kapatma sırasında kritik sistem etkinliklerinin engellenmesini önlemek için temizleme işlemlerini aynı öncelikte gerçekleştirir.
Binder iş parçacığı havuzu ve öncelik devralma
Platform tarafından yönetilen Binder iş parçacığı havuzundaki iş parçacıkları, havuzu oluşturan iş parçacığının önceliğiyle çalışmaz. Bunun yerine, senkron işlemler için sunucu iş parçacığı, arayanın önceliğini devralır. Bu öncelik devralma mekanizması, Binder çekirdek sürücüsü tarafından kontrol edilir.
İş parçacığı düzeyinde ince ayar
Ayrıntılı kontrol gerektiren hizmet paketleri (ör. gerçek zamanlı işleme döngüleri), yapılandırmaları çalışma iş parçacıklarına manuel olarak uygulamalıdır. İş parçacığı düzeyindeki yapılandırmaları uygulamak için aşağıdaki adımları kullanın:
- Ayrıcalıklı bir hazır ayar isteyin (
is_privileged: trueayarlanmış olmalıdır). thread_scheduling_configurationokumak içinsdv_service_bundles_schedulingkitaplığındakiget_scheduling_configurationişlevini kullanın.sched_setattrkullanarak çalışan iş parçacıklarına özellik uygulayın.
SELinux ve özelliklerin uygulanması
Platform, planlama hazır ayarlarını zorunlu kılmak için SELinux'u ve CAP_SYS_NICE Linux özelliğini kullanır:
NORMALveyaIDLEgibi ön ayarları kullanan hizmetlerde planlama, başlatma sırasında LM tarafından yapılandırılır. Bu hizmetlerdeCAP_SYS_NICEözelliği yoktur ve önceliklerini veya politikalarını değiştiremezler.- Ayrıcalıklı hazır ayar (
is_privileged: true) kullanan hizmetlereCAP_SYS_NICEözelliği verilir. Bu sayede, gerçek zamanlı görevler için gerektiği gibi dahili iş parçacıklarının planlamasını manuel olarak kontrol edebilirler.
Doğrulama ve örnekler
Planlama davranışını doğrulamak için günlük analizi ve sistem düzeyinde performans ölçümü gerekir. SDV platformu, bu teknikleri göstermek için özel bir örnek sunar.
HK zaman planlaması örneği
samples/qos_scheduling konumunda bulunan bu örnek, paralel olarak çalışacak ve ilerleme durumunu bildirecek şekilde tasarlanmış çeşitli performans testi hizmetlerini içerir.
PerformanceTesterNormal:NORMALhazır ayarıyla çalışır.PerformanceTesterElevated:ELEVATEDhazır ayarıyla çalışır.PerformanceTesterRealtime: Dahili çalışan iş parçacıklarınaSCHED_FIFOuygulamak içinCUSTOMhazır ayarını kullanır.PolicyOffender:NORMALhazır ayarını kullanırken gerçek zamanlı öncelik belirlemeye çalışan bir teşhis hizmetidir. Bu, platformun yetkisiz ayrıcalık yükseltme işlemlerini başarıyla engellediğini doğrulamak için kullanılır.
Doğrulama paketini çalıştırın
Hizmet kalitesine özgü düzenleme yapılandırmasını etkinleştirin:
adb shell setprop persist.sdv.orchestrator_config_path /etc/orch/vm_qos_scheduling_orch_config.textprotoHizmetleri kendi planlama alanlarında başlatmak için cihazı yeniden başlatın:
adb rebootKarşılaştırmalı performans sonuçlarını görmek için günlükleri filtreleyin:
adb logcat | grep sdv_sample_qos_commonPerformanceTesterElevatedhizmeti,PerformanceTesterNormalhizmetine kıyasla tamamlanan iş birimlerinin önemli ölçüde daha yüksek olduğunu bildiriyor.EPERMveya SELinux reddetme hataları,PolicyOffenderhizmetinin günlüklerine dahil edilir.
Geriye dönük uyumluluk
- Geriye dönük uyumluluk için, manifest dosyasında
scheduling_config_pathbelirten ancak yapılandırma dosyasındascheduling_preset_namebelirtmeyen tüm eski hizmet paketleri otomatik olarak ayrıcalıklı hizmet olarak kabul edilir. Bu sayede, manuel iş parçacığı ayarlamasına dayanan eski hizmetler için gerekli özellikler (ör.CAP_SYS_NICE) korunur. - Kök yapılandırma mesajının
DeadlineSchedulingConfigurationgelecekteki bir sürümde yeniden adlandırılması planlanmaktadır. Mevcut ad, geçmişe yönelik olup iletinin yalnızca son tarih planlaması değil, tüm planlama türlerini işlediğini artık doğru şekilde yansıtmamaktadır.