Tentang
Versi Kernel yang Didukung
Penggunaan
API yang tersedia
Bagaimana Berkontribusi
Lisensi
Tim kami
Kprofiles adalah modul kernel Linux sederhana yang dapat digunakan untuk mengatur aktivitas dalam kernel seperti boost yang biasanya tidak diekspos ke ruang pengguna. Kprofiles beroperasi dengan cara yang berorientasi pada profil. Jadi, Kprofiles memiliki empat mode profil: Disabled
, Battery
, Balanced
, dan Performance
. Setiap mode diberi nomor mode. Pengembang dapat menggunakan fungsi Kprofiles API dalam kondisi untuk membatasi atau mengaktifkan tugas-tugas dalam kernel dalam mode profil tertentu (lihat bagian penggunaan misalnya) . Userspace dapat berinteraksi dengan Kprofiles dengan menyesuaikan nomor mode di /sys/kernel/kprofiles/kp_mode
. Tabel di bawah menunjukkan nomor mode mana yang sesuai dengan mode profil.
Mode Profil | Nomor Modus |
---|---|
Dinonaktifkan (bawaan) | 0 |
Baterai | 1 |
Seimbang | 2 |
Pertunjukan | 3 |
Selain itu, Kprofiles menyediakan pengubah profil otomatis (auto Kprofiles), yang menggunakan FB notifier
, MSM DRM notifier
, atau MI DRM notifier
untuk menerapkan mode profil baterai saat layar perangkat mati dan beralih kembali ke mode aktif sebelumnya saat perangkat aktif. Pengguna dapat menonaktifkan atau mengaktifkan fitur ini saat runtime tanpa mengkompilasi ulang kernel dengan mengubah nilai bool di /sys/module/kprofiles/parameters/auto_kp
Kprofiles juga memiliki fungsi API untuk berpindah profil sebagai respons terhadap peristiwa apa pun di dalam kernel. Untuk informasi lebih lanjut, silakan lihat tabel API yang Tersedia
Kprofiles diuji pada kernel Linux 3.10+
Jika Anda menggunakan git
, sangat disarankan menggunakan git subtree
atau git submodule
.
Tambahkan repositori ini ke drivers/misc/kprofiles
Ubah drivers/misc/Kconfig
menu "Perangkat lain-lain" sumber "drivers/misc/genwqe/Kconfig"+sumber "drivers/misc/kprofiles/Kconfig"sumber "drivers/misc/echo/Kconfig" menu akhir
Ubah drivers/misc/Makefile
obj-$(CONFIG_GENWQE) += genwqe/+obj-$(CONFIG_KPROFILES) += kprofil/obj-$(CONFIG_ECHO) += echo/
Tentukan fungsi api yang Anda perlukan dalam file yang diperlukan menggunakan extern, Kprofiles dapat digunakan di berbagai tempat seperti misalnya boosting driver, di bawah ini adalah contoh penggunaan kprofiles di kernel/fork.c untuk mengontrol cpu dan ddr boost selama zygote forking menggunakan kp_active_mode ()API.
+ #ifdef CONFIG_KPROFILES+ eksternal ke dalam kp_active_mode(void);+ #endif/* * Oke, ini adalah rutinitas percabangan utama. * * Ini menyalin proses, dan jika berhasil dimulai * dan tunggu sampai selesai menggunakan VM jika diperlukan. */ panjang _do_fork(klon_flags panjang yang tidak ditandatangani, tumpukan_start panjang yang tidak ditandatangani, ukuran_tumpukan panjang yang tidak ditandatangani, int __pengguna *parent_tidptr, int __pengguna *anak_tidptr, tls panjang yang tidak ditandatangani) { struct tugas_struct *p; int jejak = 0; panjang nr; /* Tingkatkan CPU hingga maksimal selama 50 ms saat userspace meluncurkan aplikasi */ if (task_is_zygote(saat ini)) {- cpu_input_boost_kick_max(50);- devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 50);- devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 50);+ #ifdef CONFIG_KPROFILES+ /*+ * Tingkatkan CPU dan DDR selama 60 md jika mode kinerja aktif.+ * Tingkatkan CPU dan DDR selama 50 md jika mode default aktif untuk mempertahankan perilaku default.+ * Tingkatkan CPU & DDR selama 25 md jika profil seimbang diaktifkan+ * Jangan tingkatkan CPU & DDR jika profil penghemat baterai diaktifkan+ */+ saklar (kp_active_mode()) {+ kasus 0:+ cpu_input_boost_kick_max(60);+ devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 50);+ devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 50);+ break;+ kasus 2:+ cpu_input_boost_kick_max(60);+ devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 25);+ devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 25);+ istirahat;+ kasus 3:+ cpu_input_boost_kick_max(60);+ devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 60);+ devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 60);+ break;+ default:+ pr_info("Profil Baterai Aktif, Melewati Peningkatan...n");+ break;+ }+ #else+ cpu_input_boost_kick_max(60);+ devfreq_boost_kick_max(DEVFREQ_MSM_LLCCBW, 50 );+ devfreq_boost_kick_max(DEVFREQ_MSM_CPUBW, 50);+ #endif
dan kamu siap berangkat!
Info : Fungsi ini mengembalikan angka dari 0 dan 3 tergantung pada profil yang dipilih. Ini dapat digunakan dalam kondisi untuk mengatur peningkatan dan hal lainnya.
Argumen : Tidak ada
Contoh :
#include <linux/kernel.h>#include <linux/cpufreq.h>#ifdef CONFIG_KPROFILESextern int kp_active_mode(void);void example_function(void) { // Berdasarkan mode profil aktif, sesuaikan fitur kernel atau sakelar pengaturan (kp_active_mode()) { kasus 1: // Hal-hal yang harus dilakukan saat profil baterai aktif; kasus 2: // Hal-hal yang harus dilakukan ketika profil saldo aktif; kasus 3: // Hal-hal yang harus dilakukan ketika profil kinerja sedang aktif; default: // Hal-hal yang harus dilakukan ketika kprofiles dinonaktifkan atau profil default sedang aktif; } }#endif
Info : Fungsi ini dapat digunakan untuk mengubah profil ke mode tertentu selama kejadian di dalam kernel.
Argumen :
level
:
ketik: tidak ditandatangani int
definisi: Nomor mode yang akan digunakan.
Contoh :
batal contoh_fungsi(batal) { if (required_kernel_event()) { // Beralih ke profil baterai (mode 0) kp_set_mode(1); printk(KERN_INFO "Beralih ke profil baterai (mode 1)n"); } else { // Beralih ke profil seimbang (mode 1) kp_set_mode(2); printk(KERN_INFO "Beralih ke profil seimbang (mode 2)n"); } }
Info : Fungsi ini dapat digunakan untuk mengubah profil ke mode tertentu untuk jangka waktu tertentu selama kejadian dalam kernel, lalu kembali ke mode aktif sebelumnya.
Argumen :
level
:
ketik : tidak ditandatangani int
definisi : Nomor mode yang akan digunakan.
duration_ms
:
ketik : tidak ditandatangani int
definisi : Jumlah waktu (dalam milidetik) mode yang ditentukan harus aktif sebelum beralih kembali ke mode yang digunakan sebelumnya.
Contoh :
batal contoh_fungsi(batal) { if (required_kernel_event()) { // Beralih ke profil kinerja (mode 3) selama 50 md kp_set_mode_rollback(3, 50); printk(KERN_INFO "Beralih ke profil Performa selama 50 mdn"); } }
Info : Pemberitahu kejadian dasar ini memungkinkan eksekusi rangkaian kode segera setelah mode profil diubah melalui API pengguna atau dalam kernel. Hal ini dapat bermanfaat untuk melakukan serangkaian tugas secara tersinkronisasi setelah perubahan mode.
Contoh :
extern unsigned int KP_MODE_CHANGE;extern int kp_notifier_register_client(struct notifier_block *nb);extern int kp_notifier_unregister_client(struct notifier_block *nb);static int kp_mode_notifier_callback(struct notifier_block *nb, acara panjang yang tidak ditandatangani, batal *data) { unsigned int profile_mode = (unsigned int)data; if (event == KP_MODE_CHANGE) { switch (profile_mode) { case 1: // Hal-hal yang harus dilakukan saat profil baterai aktif istirahat; case 2: // Hal-hal yang harus dilakukan ketika profil seimbang sedang aktif; kasus 3: // Hal-hal yang harus dilakukan ketika profil kinerja sedang aktif; default: // Hal-hal yang harus dilakukan ketika kprofiles dinonaktifkan atau profil default sedang aktif; } } kembalikan NOTIFY_OK; }struktur statis notifier_block kp_mode_notifier = { .notifier_call = kp_mode_notifier_callback, }; int statis __init example_driver_init(batal) { // Daftarkan modul driver sebagai klien pemberi tahu peristiwa Kprofiles kp_notifier_register_client(&kp_mode_notifier); kembali 0; }kekosongan statis __keluar contoh_driver_keluar(kekosongan) { // Membatalkan pendaftaran modul driver sebagai klien pemberi tahu peristiwa Kprofiles kp_notifier_unregister_client(&kp_mode_notifier); }modul_init(example_driver_init);modul_exit(example_driver_exit);
Anda dapat berkontribusi pada Kprofiles dengan mengirimkan permintaan penarikan berisi perubahan kepada kami. Harap berikan pesan yang tepat dengan komitmen yang menjelaskan alasan Anda melakukan perubahan.
Proyek ini dilisensikan di bawah GPL-2.0.
Dakkshesh : Penulis/Pengelola modul kernel
Cyberknight777 : Pemelihara Bersama modul kernel | Pemelihara Manajer Kprofiles
Vyom Desai : Manajer Kprofiles (paket rom) Penulis/Pengelola
Martin Valba : Manajer Kprofiles (aplikasi mandiri) Penulis/Pengelola
Seseorang5678 : Manajer Kprofiles (paket rom) Pemelihara Bersama