Table des matières
initcall_debug" >initcall_debug
1. Statistiques chronophages au démarrage< /span> " >1. Statistiques chronophages au démarrage< /span>
printk time" >printk time
bootgraph" >bootgraph
bootchart" >bootchart
gpio+示波器" >gpio+示波器
二、内核优化方法 " >二、内核优化方法
kernel压缩方式" >kernel压缩方式
gpio+oscilloscope" >gpio+oscilloscope
2. Méthode d'optimisation du noyau " >2. Méthode d'optimisation du noyau
méthode de compression du noyau " >méthode de compression du noyau
Emplacement de chargement" >Emplacement de chargement
内核裁剪" >内核裁剪
预设置lpj数值" >预设置lpj数值
initcall优化" >initcall优化
内核initcall_module并行" >内核initcall_module并行
减少pty/tty个数" >减少pty/tty个数
Maison Opération et maintenance exploitation et maintenance Linux Optimisation de la vitesse très utile : permet au système de démarrer plus rapidement

Optimisation de la vitesse très utile : permet au système de démarrer plus rapidement

Jul 31, 2023 pm 03:11 PM
优化

Dans les produits embarqués, la vitesse de démarrage du système est un indicateur clé. L'optimisation de la vitesse de démarrage du système est généralement appelée "Démarrage rapide". 快启”。

要对系统启动速度进行优化,首先要知道如何统计系统启动的时间。

下面介绍几种统计内核启动耗时的方法,以及对内核启动速度优化的几个方法。

一、启动耗时统计

printk time

打开kernel配置:

kernel hacking --->
[*] Show timing information on printks
Copier après la connexion

打开后,每个printk的前面都会显示时间戳

主要用来测量内核启动过程各个阶段的耗时

initcall_debug

众所周知,kernel启动时会执行不同等级的initcall,而每个initcall

Pour optimiser la vitesse de démarrage du système, vous devez d'abord savoir 🎜comment compter le temps de démarrage du système. 🎜🎜Ce qui suit présente 🎜plusieurs méthodes pour compter le temps de démarrage du noyau , ainsi que plusieurs méthodes pour optimiser la 🎜vitesse de démarrage du noyau. 🎜

1. Statistiques chronophages au démarrage< /span>

printk time

🎜Configuration du noyau ouvert : 🎜
initcall_debug=1
setargs_nand=setenv bootargs console=${console} earlyprintk=${earlyprintk} root=${nand_root} initcall_debug=${initcall_debug} init=${init}
Copier après la connexion
Copier après la connexion
🎜Après l'ouverture, l'horodatage sera affiché devant chaque printk🎜

Principalement utilisé pour mesurer le temps pris à chaque étape du processus de démarrage du noyau🎜

< h3 data -tool="mdnice editor" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;">< / span>initcall_debug🎜Comme nous le savons tous, kernel exécutera différents niveaux de initcall, et chaque initcall peut également être comptée. 🎜

kernelcmdline中加入参数initcall_debug=1

initcall_debug=1
setargs_nand=setenv bootargs console=${console} earlyprintk=${earlyprintk} root=${nand_root} initcall_debug=${initcall_debug} init=${init}
Copier après la connexion
Copier après la connexion

开启后,就能打印每个initcall函数调用及耗时。

bootgraph

内核自带了一个工具用于统计启动时间:scripts/bootgraph.pl

使用该工具需要打开内核配置CONFIG_PRINTK_TIME=y,并且在cmdline中加上"initcall_debug=1"

系统启动之后,执行命令:

dmesg|perl $(kernel_dir)/script/bootgraph.pl > out.svg
Copier après la connexion

用浏览器查看out.svg文件,可以看到内核启动过程中各个阶段的耗时。

这个工具有点类似于perf的火焰图,可以统计启动各阶段的耗时。

bootchart

除了内核自带的工具,也有开源的工具可用:bootchart

Bootchart est un outil logiciel open source utilisé pour l'analyse des performances du processus de démarrage de Linux. Il collecte automatiquement l'utilisation du processeur, le processus et d'autres informations pendant le processus de démarrage du système, et affiche les résultats de l'analyse sous forme graphique, qui peuvent être utilisés pour guider et optimiser le processus. processus de démarrage du système.

  • Modifierligne de commande du noyau. Modifiez le init est remplacé par "init=/sbin/bootchartd". kernel cmdline。将其中的init修改为“init=/sbin/bootchartd”。
  • 收集信息。bootchartd会从/proc/stat/proc/diskstat/proc/[pid]/stat中采集信息,经过处理后保存为bootchart.tgz文件
  • 转换图片。在pc上通过pybootchartgui.py工具将bootchart.tgz转换为bootchart.png
Collectez des informations. bootchartd commencera à partir de /proc/stat,/proc/diskstat,/proc/[pid]/stat collecte des informations et les enregistre sous bootchart.tgz fichier

🎜🎜Convertir les images. Dans pc via la police pybootchartgui.pyL'outil bootchart.tgzconvertir enbootchart.png, pratique pour l'analyse🎜🎜🎜🎜Enfin, il sera également transformé en image pour analyse, par exemple :🎜
Optimisation de la vitesse très utile : permet au système de démarrer plus rapidement

bootchar est principalement utilisé Mesurez le temps nécessaire pour monter le système de fichiers sur le processus de démarrage principal de l'applicationbootchar主要用来测量挂载文件系统到主应用程序启动过程中的耗时

gpio+示波器

可以找一个在系统启动过程中空闲的GPIO,在适当位置设置GPIO电平。

通过示波器抓取波形可以得到各阶段耗时。

通常该方法被用来测量整个启动的耗时,或者各阶段的耗时,该方法也是用的比较多的。

二、内核优化方法

kernel压缩方式

kernel有不同的压缩格式,常见的如gzxzlzma

gpio+oscilloscope

Vous pouvez en trouver un dans le système Inactif au démarrageGPIO, où Paramètres de position appropriésGPIO niveau.

🎜Vous pouvez obtenir la consommation de temps de chaque étape en capturant la forme d'onde avec un oscilloscope. 🎜🎜Habituellement, cette méthode est utilisée pour 🎜mesurer le temps de l'ensemble du démarrage, ou le temps de chaque étape🎜. Cette méthode est également couramment utilisée. 🎜

2. Méthode d'optimisation du noyau

méthode de compression du noyau

🎜noyau a différents formats de compression, les plus courants sont gz, xz< /code>, <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31 , 35, 0.05);famille de polices : "Operator Mono", Consolas, Monaco, Menlo, monospace;saut de mot : break-all;couleur : rgb(239, 112, 96);">lzmaetc. . 🎜🎜🎜Différents formats de compression ont des vitesses de décompression différentes🎜 En comparant le temps de démarrage et l'utilisation du flash des différentes méthodes de compression, choisissez celle qui correspond à la situation réelle et optimisez-la. 🎜

Emplacement de chargement

L'image du noyau peut être déterminée par : rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break -all;color: rgb(239, 112, 96);"> kernel auto-extractible, peut également être utilisé par uboot< /code> pour décompresser. <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">kernel自解压,也可以由uboot进行解压。

对于kernel自解压的情况,如果压缩过的kernel与解压后的kernel地址冲突,则会先把自己复制到安全的地方,然后再解压,防止自我覆盖。这就需要耗费复制的时间。

即把加载地址运行地址设置为不同地址,可以减少耗时。

内核裁剪

裁剪内核是必要的,如果内核镜像太大,那么解压内核就需要很长时间,所以内核要尽量裁剪。

裁剪内核,可以减少解压耗时。初始化内容少了,也会减少耗时。

因此裁剪内核时,要考虑将不需要的功能都去掉。

预设置lpj数值

LPJ也就是loops_per_jiffy

Pour noyau situation auto-extractible, Si le 0,05 compressé);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">kernel et décompressé kernel conflit d'adresse, il mettra d'abord Copiez-le dans un endroit sûr, puis décompressez-le pour éviter tout écrasement automatique. Cela nécessite une copie fastidieuse. 🎜🎜Définissez l'adresse de chargement et l'adresse d'exécution sur des adresses différentes, ce qui peut réduire la consommation de temps. 🎜🎜🎜🎜Recadrage du noyau🎜🎜🎜🎜Il est nécessaire de couper le noyau. Si l'image du noyau est trop grande, la décompression du noyau prendra beaucoup de temps, le noyau doit donc être recadré autant que possible. 🎜🎜Coupez le noyau pour réduire le temps de décompression. Moins de contenu d’initialisation réduira également la consommation de temps. 🎜🎜Ainsi, lorsque vous coupez le noyau, pensez à supprimer toutes les fonctions inutiles. 🎜🎜🎜🎜Valeur lpj prédéfinie🎜🎜🎜🎜LPJ < /code>C'est-à-dire <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);famille de polices : "Operator Mono", Consolas, Monaco, Menlo, monospace;saut de mot : break-all;couleur : rgb(239, 112, 96);">loops_per_jiffy, tous les Il sera calculé une fois à chaque démarrage, mais si aucune modification n'est apportée, la valeur sera la même à chaque démarrage. Vous pouvez directement fournir la valeur pour ignorer le calcul. 🎜

如下log所示,有skippedlpjtimer计算得来,不需要再校准calibrate了。

[ 0.019918] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
Copier après la connexion

如果没有skipped,则可以在cmdline中添加lpj=xxx进行预设

initcall优化

如前面提到,initcall耗时是可以打印出来的,在cmdline中设置initcall_debug=1,即可打印跟踪所有内核初始化过程中调用的顺序以及耗时。

[ 0.021772] initcall sunxi_pinctrl_init+0x0/0x44 returned 0 after 9765 usecs
[ 0.067694] initcall param_sysfs_init+0x0/0x198 returned 0 after 29296 usecs
[ 0.070240] initcall genhd_device_init+0x0/0x88 returned 0 after 9765 usecs
[ 0.080405] initcall init_scsi+0x0/0x90 returned 0 after 9765 usecs
[ 0.090384] initcall mmc_init+0x0/0x84 returned 0 after 9765 usecs
Copier après la connexion

根据打印信息,可以对耗时较多的initcall进行优化。

内核initcall_module并行

initcall有很多等级,但比较耗时的是module

如果是多核,可以考虑将module_initcall并行执行来节省时间。

目前内核do_initcalls是一个一个按照顺序来执行,可以修改成新建内核线程来执行

减少pty/tty个数

加入initcall打印之后,发现pty/tty init耗时很多,可减少个数来缩短init时间。

initcall pty_init+0x0/0x3c4 returned 0 after 239627 usecs
initcall chr_dev_init+0x0/0xdc returned 0 after 36581 usecs
Copier après la connexion

内核module

只把必须要加进内核的才编译进内核,其他的编译成模块。

例如将必要的clockttypinctrl等编译进内核

三、其他优化

uboot

如果是RISC-V架构,可以考虑去掉ubootRISC-V架构,可以考虑去掉uboot

XIP

xipeXecute In Place。即芯片内执行,是指CPU直接从存储器中读取程序代码执行,而不用再读到内存中。

一般我们的程序都是放到flash中,系统启动时,把程序从flash拷贝到ddr中执行,而xip技术则不需要拷贝程序到ddr

🎜🎜XIP🎜🎜🎜🎜xipeXecute In Place. 2px ; couleur d'arrière-plan : rgba (27, 31, 35, 0,05) ; famille de polices : "Operator Mono", Consolas, Monaco, Menlo, monospace ; saut de mot : break-all ; couleur : rgb (239, 112, 96) ;">CPU放到flash中,系统启动时,把程序从flash拷贝到ddr中执行,而xip技术则不需要拷贝程序到ddr,所以速度会很快。🎜

Diese Technologie muss vom Chip unterstützt werden. Sie können die SPI的描述是否支持XIP-Funktion im Chip-Handbuch überprüfen.

4. Zusammenfassung

Die obige Optimierung der Systemstartgeschwindigkeit dient letztendlich dazu, einige Ideen und Methoden bereitzustellen.

Um die Startgeschwindigkeit zu optimieren, müssen Sie im Allgemeinen

ein tieferes Verständnis für den Start des gesamten Systems haben.

Optimierung ist endlos, sie muss entsprechend dem Ziel optimiert werden, unter Berücksichtigung der Startgeschwindigkeit und -wirkung.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Discussion sur la stratégie d'optimisation gc de Golang Discussion sur la stratégie d'optimisation gc de Golang Mar 06, 2024 pm 02:39 PM

Le garbage collection (GC) de Golang a toujours été un sujet brûlant parmi les développeurs. En tant que langage de programmation rapide, le garbage collector intégré de Golang peut très bien gérer la mémoire, mais à mesure que la taille du programme augmente, certains problèmes de performances surviennent parfois. Cet article explorera les stratégies d'optimisation GC de Golang et fournira quelques exemples de code spécifiques. La collecte des déchets dans le garbage collector de Golang Golang est basée sur un balayage de marque simultané (concurrentmark-s

Comment optimiser les paramètres et améliorer les performances après avoir reçu un nouvel ordinateur Win11 ? Comment optimiser les paramètres et améliorer les performances après avoir reçu un nouvel ordinateur Win11 ? Mar 03, 2024 pm 09:01 PM

Comment configurer et optimiser les performances après avoir reçu un nouvel ordinateur ? Les utilisateurs peuvent directement ouvrir Confidentialité et sécurité, puis cliquer sur Général (ID publicitaire, Contenu local, Lancement de l'application, Recommandations de configuration, Outils de productivité ou ouvrir directement la stratégie de groupe locale. Utilisez simplement le éditeur pour effectuer l'opération. Permettez-moi de présenter aux utilisateurs en détail comment optimiser les paramètres et améliorer les performances du nouvel ordinateur Win11 après l'avoir reçu : 1. Appuyez sur la combinaison de touches [Win+i] pour ouvrir Paramètres, puis cliquez sur. [Confidentialité et sécurité] sur la gauche, puis cliquez sur [Général (identifiant publicitaire, contenu local, lancement d'application, suggestions de paramètres, productivité) sous Autorisations Windows à droite Outils)].

Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Jun 01, 2024 am 11:19 AM

La complexité temporelle mesure le temps d'exécution d'un algorithme par rapport à la taille de l'entrée. Les conseils pour réduire la complexité temporelle des programmes C++ incluent : le choix des conteneurs appropriés (tels que vecteur, liste) pour optimiser le stockage et la gestion des données. Utilisez des algorithmes efficaces tels que le tri rapide pour réduire le temps de calcul. Éliminez les opérations multiples pour réduire le double comptage. Utilisez des branches conditionnelles pour éviter les calculs inutiles. Optimisez la recherche linéaire en utilisant des algorithmes plus rapides tels que la recherche binaire.

Interprétation approfondie : Pourquoi Laravel est-il aussi lent qu'un escargot ? Interprétation approfondie : Pourquoi Laravel est-il aussi lent qu'un escargot ? Mar 07, 2024 am 09:54 AM

Laravel est un framework de développement PHP populaire, mais il est parfois critiqué pour sa lenteur comme un escargot. Qu'est-ce qui cause exactement la vitesse insatisfaisante de Laravel ? Cet article fournira une explication détaillée des raisons pour lesquelles Laravel est aussi lent qu'un escargot sous plusieurs aspects, et la combinera avec des exemples de code spécifiques pour aider les lecteurs à mieux comprendre ce problème. 1. Problèmes de performances des requêtes ORM Dans Laravel, ORM (Object Relational Mapping) est une fonctionnalité très puissante qui permet

Décoder les goulots d'étranglement des performances de Laravel : les techniques d'optimisation entièrement révélées ! Décoder les goulots d'étranglement des performances de Laravel : les techniques d'optimisation entièrement révélées ! Mar 06, 2024 pm 02:33 PM

Décoder les goulots d'étranglement des performances de Laravel : les techniques d'optimisation entièrement révélées ! Laravel, en tant que framework PHP populaire, offre aux développeurs des fonctions riches et une expérience de développement pratique. Cependant, à mesure que la taille du projet augmente et que le nombre de visites augmente, nous pouvons être confrontés au défi des goulots d'étranglement en matière de performances. Cet article approfondira les techniques d'optimisation des performances de Laravel pour aider les développeurs à découvrir et à résoudre les problèmes de performances potentiels. 1. Optimisation des requêtes de base de données à l'aide du chargement différé d'Eloquent Lorsque vous utilisez Eloquent pour interroger la base de données, évitez

Comment optimiser les éléments de démarrage du système WIN7 Comment optimiser les éléments de démarrage du système WIN7 Mar 26, 2024 pm 06:20 PM

1. Appuyez sur la combinaison de touches (touche Win + R) sur le bureau pour ouvrir la fenêtre d'exécution, puis entrez [regedit] et appuyez sur Entrée pour confirmer. 2. Après avoir ouvert l'éditeur de registre, nous cliquons pour développer [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer], puis voyons s'il y a un élément Sérialiser dans le répertoire. Sinon, nous pouvons cliquer avec le bouton droit sur Explorateur, créer un nouvel élément et le nommer Sérialiser. 3. Cliquez ensuite sur Sérialiser, puis cliquez avec le bouton droit sur l'espace vide dans le volet de droite, créez une nouvelle valeur de bit DWORD (32) et nommez-la Étoile.

Le goulot d'étranglement des performances de Laravel révélé : la solution d'optimisation révélée ! Le goulot d'étranglement des performances de Laravel révélé : la solution d'optimisation révélée ! Mar 07, 2024 pm 01:30 PM

Le goulot d'étranglement des performances de Laravel révélé : la solution d'optimisation révélée ! Avec le développement de la technologie Internet, l’optimisation des performances des sites Web et des applications est devenue de plus en plus importante. En tant que framework PHP populaire, Laravel peut être confronté à des goulots d'étranglement en termes de performances pendant le processus de développement. Cet article explorera les problèmes de performances que les applications Laravel peuvent rencontrer et fournira des solutions d'optimisation et des exemples de code spécifiques afin que les développeurs puissent mieux résoudre ces problèmes. 1. Optimisation des requêtes de base de données Les requêtes de base de données sont l'un des goulots d'étranglement de performances courants dans les applications Web. exister

La configuration des paramètres du Vivox100 révélée : Comment optimiser les performances du processeur ? La configuration des paramètres du Vivox100 révélée : Comment optimiser les performances du processeur ? Mar 24, 2024 am 10:27 AM

La configuration des paramètres du Vivox100 révélée : Comment optimiser les performances du processeur ? À l’ère actuelle de développement technologique rapide, les smartphones sont devenus un élément indispensable de notre vie quotidienne. En tant qu'élément important d'un smartphone, l'optimisation des performances du processeur est directement liée à l'expérience utilisateur du téléphone mobile. En tant que smartphone haut de gamme, la configuration des paramètres du Vivox100 a attiré beaucoup d'attention, en particulier l'optimisation des performances du processeur a attiré beaucoup d'attention de la part des utilisateurs. En tant que « cerveau » du téléphone mobile, le processeur affecte directement la vitesse de fonctionnement du téléphone mobile.

See all articles