Mengapa desain OS dapat mengurangi konsumsi daya?

11

Saya telah membaca bahwa OS seperti Android dan iOS entah bagaimana dioptimalkan untuk meningkatkan daya tahan baterai.

Pemahaman saya adalah bahwa CPU menjalankan sejumlah operasi dalam waktu tertentu, jadi saya akan berpikir bahwa Anda dapat mempercepat aplikasi dengan mengurangi jumlah operasi yang diperlukan, tetapi karena CPU masih akan melakukan operasi x dalam waktu y , itu seharusnya tidak mempengaruhi kekuatan?

Juga, jika suatu proses menempati lebih banyak RAM, apakah ia mengkonsumsi lebih banyak daya?

neelsg
sumber

Jawaban:

15

CPU umum yang masuk ke ponsel cerdas, laptop, dan bahkan PC desktop memiliki laju jam variabel. Ketika scheduler mendeteksi bahwa ia memiliki waktu idle, ia dapat mengurangi laju jam, dan meningkatkannya lagi jika ada lebih banyak proses yang bersaing untuk waktu CPU.

CPU yang dioptimalkan untuk perangkat bertenaga baterai cenderung terdiri dari banyak komponen fungsional yang masing-masing memiliki jam sendiri (contoh: ARM Cortex A8 ). Ketika satu komponen idle, sistem operasi dapat mematikannya (atau mengurangi jamnya), yang menghemat daya. Misalnya, pada banyak CPU multicore (seperti yang ada di perangkat seluler kelas atas), setiap inti dapat dihidupkan atau dimatikan secara terpisah. ARM sangat bagus dalam permainan ini, yang merupakan salah satu alasan mengapa sebagian besar smartphone memiliki CPU ARM.

Memvariasikan laju jam atau mematikan jam komponen elektronik dikenal sebagai manajemen daya . Ini cenderung menjadi bagian yang kompleks dalam penulisan dan pengoptimalan sistem operasi untuk perangkat bertenaga baterai, dengan banyak ketergantungan pada model perangkat keras yang tepat.

Apa yang berlaku untuk CPU juga berlaku untuk periferal. Layar dengan lampu latar adalah konsumen utama daya pada smartphone, misalnya, diikuti oleh radio. Sistem operasi CPU dapat berperan dalam manajemen daya periferal; chip sekunder juga menjalankan firmware sendiri yang juga menjalankan manajemen daya.

Aplikasi memiliki peran mereka dalam menjaga konsumsi daya tetap rendah: mereka harus memungkinkan sistem operasi untuk melakukan hal itu. Hal terburuk yang bisa dilakukan aplikasi adalah polling - menjalankan loop seperti while (not_ready()) {}. Bahkan memperkenalkan penundaan kecil karena while (not_ready()) {usleep(100);}tidak membantu karena tidak memberikan cukup waktu bagi prosesor untuk masuk ke mode daya rendah, atau jika ya, setiap bangun yang tidak berbuah berarti membuang-buang energi. Dengan demikian API sistem operasi harus dirancang agar aplikasi tidak perlu melakukan polling, tetapi sebaliknya dapat berlangganan semacam mekanisme acara dan tetap siaga sampai pemberitahuan tentang peristiwa yang relevan. Aplikasi pada gilirannya perlu memanfaatkan mekanisme seperti itu, sehingga desain seluruh tumpukan perangkat lunak berdampak pada konsumsi daya.

Anda dapat memperoleh beberapa informasi tentang apa yang bertanggung jawab atas konsumsi daya PC Anda dengan utilitas Powertop Intel . Smartphone biasanya memiliki cara untuk melihat seberapa banyak daya yang dikonsumsi aplikasi juga. Menghitung konsumsi daya oleh aplikasi justru sulit: jika komponen bangun untuk dua aplikasi, waktu bangun mungkin diperhitungkan salah satu dari mereka agak sewenang-wenang atau tidak sama sekali; Konsumsi daya periferal juga tidak selalu mudah dilacak ke aplikasi yang bertanggung jawab.

Chip RAM tidak tahu bit mana yang menyimpan data proses aktif, jadi tidak bisa dimatikan secara selektif dengan cara ini. Konsumsi daya suatu proses tidak terkait dengan jumlah memori yang digunakannya (kecuali karena RAM mengakses daya konsumsi, tetapi menggunakan kembali memori yang sama atau menggunakan area RAM yang berbeda tidak ada bedanya sehubungan dengan konsumsi daya).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4

Dalam hal kekuatan prosesor, hal utama yang dapat dilakukan OS adalah menyediakan API yang mencegah aplikasi melakukan polling. (Dan juga menghilangkan semua polling di dalam kernel dan driver perangkat jika ada.) Kemudian prosesor dapat dimasukkan ke dalam kondisi sleep daya rendah setiap kali tidak ada yang dilakukan.

Untuk setiap perangkat perlu ada cara bagi aplikasi pengguna untuk tidur setelah permintaan dan kemudian bangun lagi hanya ketika hasilnya siap.

Putaran pengetatan yang jelas adalah bencana (karena itu membuat prosesor tetap terjaga dan mengeksekusi noops dan lompatan yang tidak berguna.) Tetapi ada kasus yang lebih halus, tetapi hampir sama buruknya ketika aplikasi pengguna mengatur pengatur waktu, terbangun dengan alarm pengatur waktu, memeriksa beberapa kondisi, mengatur ulang timer dan kembali tidur.

Saya kurang tahu tentang bagian ini tetapi saya pikir mungkin ada juga cara-cara kreatif menggunakan pengontrol DMA (akses memori langsung) untuk menangani rangkaian panjang gangguan berulang tanpa membangunkan inti prosesor itu sendiri.

Logika Pengembaraan
sumber
3

Peran utama OS adalah untuk menyediakan lingkungan runtime yang independen dari perangkat keras mungkin. Ia tahu siapa yang menggunakan perangkat keras apa, kapan dan bagaimana seseorang menggunakan perangkat keras. Ini memungkinkan OS untuk mengurangi konsumsi daya perangkat keras saat tidak digunakan.

Perangkat keras modern menyediakan banyak cara untuk mengurangi konsumsi daya, seperti

  • mematikan periferal dan bagian prosesor yang tidak digunakan (unit aritmatika floating point, inti prosesor, ...)
  • down-clocking dari komponen yang jarang digunakan (termasuk inti prosesor)
  • penyesuaian catu daya agar sesuai dengan frekuensi clock saat ini (Anda dapat memodifikasi tegangan kerja prosesor dengan cepat, kadang-kadang oleh ratusan mA)

jika suatu proses menempati lebih banyak RAM, apakah ia mengkonsumsi lebih banyak daya?

Tidak juga. Namun demikian, jika sistem Anda memiliki 1GB DRAM, tetapi Anda hanya menggunakan 512MB, dengan beberapa pengontrol memori, dimungkinkan untuk menghentikan menyegarkan bagian dari DRAM, sehingga mengurangi konsumsi daya. LPDDR mendukung Partial Area Self Refresh untuk melakukan hal yang sama saat melakukan penyegaran sendiri (saat prosesor dihentikan, yang sebagian besar terjadi pada perangkat seluler).

Seperti yang Anda lihat, ada banyak cara untuk mengurangi konsumsi daya pada arsitektur modern, tetapi membutuhkan OS untuk menanganinya. Beberapa fitur, seperti PASR, sangat sulit digunakan, ini membutuhkan banyak kerja pada OS untuk menyesuaikan manajemen memori, untuk mengimplementasikan prosedur penundaan / melanjutkan, ...

Jacen
sumber
Catatan: Meskipun tidak selalu terkait langsung dengan proses yang membutuhkan RAM, penggunaan RAM yang lebih besar dapat menyebabkan lebih sedikit caching sistem file yang dapat merusak efisiensi energi (serta kinerja).
Paul A. Clayton
3

Seperti yang Anda ketahui, OS menyimpan berbagai daftar. Dua dari daftar ini adalah daftar siap dan daftar timer. Daftar siap mengidentifikasi tugas / utas mana yang siap dijalankan. Daftar pengatur waktu mengidentifikasi tugas / utas yang dalam keadaan diblokir dengan batas waktu.

Bayangkan bahwa OS memiliki daftar siap kosong. Artinya, telah kehabisan tugas yang siap dijalankan (itu dalam keadaan siaga). Beberapa prosesor (seperti x86) memiliki instruksi penghentian yang dapat dipanggil OS untuk menyebabkan prosesor berhenti sampai terbangun oleh interupsi eksternal (seperti tick interrupt). Selama periode waktu ini, ia mengkonsumsi lebih sedikit daya. Teknik ini dapat lebih ditingkatkan dengan mengintip daftar timer. Jika Anda menganggur dan Anda tahu bahwa tugas yang paling cepat dapat bangun dari kutu waktu adalah 100 kutu, laju kutu mungkin sementara dimodifikasi untuk mengatakan 100 kali lebih lambat. Dengan cara ini, prosesor dapat mengeluarkan energi lebih sedikit untuk periode waktu yang lebih lama karena tidak harus melayani hingga 100 tick interupsi.

Setelah interupsi eksternal tiba, tingkat centang harus dihitung ulang. Jika interupsi eksternal membuat tugas siap, tingkat centang kembali normal. Jika tidak, jumlah kutu yang tertidur harus dihitung ulang bersama dengan laju kutu yang baru (melambat).

Semoga ini membantu.


sumber
2

Untuk menambah jawaban lain:
Pertanyaan Anda menganggap iOS dan Android sebagai sistem operasi, tetapi "Sistem Operasi" hanya sebagian saja.
Baik Android dan iOS adalah kerangka kerja dan mencakup banyak bagian yang tidak dianggap sebagai bagian dari OS aktual tetapi aktif dalam mengurangi konsumsi daya.
Misalnya, Android by design memungkinkan pengembang aplikasi untuk menyimpan keadaan mereka saat disembunyikan, sehingga proses dapat dihentikan ketika tidak aktif digunakan dan dengan demikian mengurangi jumlah utas yang siap dan memungkinkan untuk shutdown inti dan pengurangan laju jam.
Ada beberapa fitur dalam "OS" yang mengatur kecerahan adaptif, kondisi tidur wi-fi, thread pembersihan, penyatuan jadwal, indikator LED, perilaku siaga seluler, dan aspek lain yang memengaruhi konsumsi daya secara drastis.
Selain itu, beberapa platform seluler telah bekerja keras untuk mengoptimalkan rasio penggunaan CPU / GPU, karena GPU lebih disesuaikan pada grafik dan merupakan tambahan yang relatif baru pada lanskap seluler, semakin banyak bagian terkait OS yang bergerak ke grafis. GPU, yang berfungsi dari CPU, dan memungkinkan penggunaan optimasi daya CPU untuk digunakan (dan dalam banyak kasus, juga mempercepat sistem secara keseluruhan).

Didi Kohen
sumber