Jouer à la « réduction des effectifs » du noyau, il vous suffit de faire

Auteur | Ali experts en développement de divertissement sans fil Springs City

Zebian | Tu Min

contour

Youku Youku Lecture noyau est développé dans une structure de pipeline SDK. Youku sur elle pour entreprendre une logique métier riche et flexible, sous la protection des différences à chaque extrémité du système, il est très fiable, évolutive, SDK multi-plateforme joueur par excellence.

Cependant, la collaboration entre l'équipe et l'itération du temps, mais aussi le noyau de bits en cours de lecture « pléthorique. » empreinte mémoire est trop élevé, l'utilisation de trop de threads, etc. En plus de ces questions aura une incidence sur l'expérience utilisateur en dehors, mais aussi limité le nombre d'entreprises à atteindre un certain degré, comme le programme multi-instance pour une courte vidéo. Par conséquent, un besoin urgent de modules du noyau pour effectuer une transformation « légère ». Les objectifs sont les suivants:

1) moins de threads

2) une plus petite mémoire

3) faible consommation d'énergie

La transformation de l'ancien de pêche

Yoqoo la lecture basé sur le noyau de pipelie met en uvre une structure de cadre est suit comme:

Comprend une couche d'interface, le processus indiqué par les commandes du moteur et des messages, le message de manière transparente transmettre couche filtrante, la couche de corps du module de travail, et le module de module de rendu et le téléchargement de données post-traitement.

Après le peignage avec des tests, confirment nos fils du noyau vont jouer beaucoup plus que certains de l'open source jouent un noyau (comme ijkplayer), utilisation de la mémoire et la consommation d'énergie des données vidéo et d'autres également désavantagés par rapport aux produits concurrents. Nous devons donc jouer notre tour du noyau de mises à jour.

Processus de transformation en détail

La direction de notre transformation comprennent: des fils, la mémoire, la consommation d'énergie de ces trois zones. L'espoir d'atteindre tout au long du processus de jeu avec un minimum de fil, avec une mémoire minimale rend le jeu encore lisse, occupant des ressources cpu minimales rend le jeu plus durable.

La stratégie adoptée consiste à faire « plus ». Selon le processus de lecture, conserver le fil nécessaire, enlever fil redondant, le fil réutilisation réutilisable. Ensuite, chaque revue les sujets retenus, utilisation de la mémoire et le taux d'occupation de test cpu est conforme aux attentes, si anormale puis une par une enquête.

discussion Streamline

Le nombre de threads utilisés par le noyau avant optimisation de près de 30, par rapport à d'autres joueurs open source beaucoup plus. Certains d'entre eux sont essentiels, d'autres threads peuvent être multiplexés, et certains sont redondants logique peut être retiré directement. En peignant les threads de quitter, nous considérons le fil « set minimum » un des besoins de lecture, certains threads doit inclure les modules suivants:

  • moteur: une interface pour recevoir une commande, et un message signalant le noyau;

  • source: pour les données lues et les données entraînées pipeline d'écoulement vers l'arrière;

  • décodeur: un audio et vidéo, des données audio et vidéo respectif pour décoder;

  • consommateur: une audio et vidéo respectives, la synchronisation et pour le rendu;

  • hal tampon: tampon pour démultiplexer et surveillance de l'état;

  • ykstream: Module analyse syntaxique et d'interagir avec des tranches et pour commander le module de téléchargement;

  • rendre: pour le rendu de gestion.

On peut voir jouer avec le processus de fil doit en effet neuf. Alors que d'autres threads en plus de la gestion pré-charge, surveillance de la qualité, et le jeu sous-titrage et ainsi seront activés en cas de besoin, le reste peut être retiré.

Rationaliser les étapes sont comme suit:

1) retirer le fil de filtre en excès

Seulement lorsque le module de filtre est utilisé pour créer, est le message derrière le pass-through, redondant bits, il peut être retiré directement. Le module crée un flux se déplace logiques pour préparer le moteur, ouvrir le canal de messages entre le moteur et le module, et un message de commande émis ci-dessus indiqué ci-dessous sans subir de filtre.

2) la suppression de la messagerie et gestionnaire d'horloge

Rapport message de canal avant optimisation confusion, certains rapports directement au moteur, une messagerie est signalé comme un transfert, puis rapporté au moteur. Cette logique de la couche de messagerie est un peu redondant, de sorte que le fil est supprimé, tous les messages sont signalés par le moteur.

temps de synchronisation d'horloge en tant que gestionnaire d'utilisation, n'a pas besoin de ce fil, le fil est présent comme une minuterie. Actuellement, le noyau pour utiliser la minuterie sur un ou deux points par un autre multiplexage logique de threads, en plus de dépendance à l'égard de la minuterie, ce fil peut être retiré.

3) la suppression des commandes d'interface et des messages de rapports fil du fil

Couche d'interface, plus d'un fil délivré un ordre de transport, est conçu pour les temps d'interface quand il y a un noyau de mécanisme forcestop. Après plusieurs tours d'optimisation, les déclencheurs du noyau forcestop considérablement réduit, de sorte que ce fil est redondant peu, même si la situation apparaît bloquée, il y aura Anr pour remplacer le crash d'origine, ce fil peut être retiré.

Rapport message au fil d'âme est un message multi-couches ainsi que les exemples rapportés, en fait, par la réutilisation de code, ce fil n'est pas essentiel, il peut être retiré.

4) retirer les fils de démultiplexage et de deux fils de cache

acquisition de données de base a été le lieu le plus logique bouffi, il y a cinq fils pour mettre en uvre cette partie de la fonction avant l'optimisation. 3 peut être optimisée pour retenir les fils de démultiplexage et deux fils de cache peut être retiré.

5) retirer le module de gestionnaire de pré-charge, et le décodeur de sous-titres

Préchargement Manager exécuter ou non pour ouvrir le cas de préchargement fonctionnera, le besoin d'ajouter un contrôle de commutation, que dans l'ouverture pré-charge.

Les données de sous-titres est lu principalement, analysé, et le rendu, ce qui est différent de l'audio et la vidéo, les informations textuelles peuvent aller directement à analyser après avoir lu, le module décodeur de sous-titres peut être retiré.

Après optimisation, le fil doit avoir neuf, ainsi que suivi de la qualité de lecture, réservé un total de 12 fils. La vidéo Non seulement 10.

la mémoire des cultures

Il y a quatre endroits qui consomment la mémoire: les données de téléchargement de cache tampon, la ligne de conduite dans la mémoire tampon, enregistrer les informations de structure msg, et la mémoire de chaque objet de classe. À moins que la classe d'objets ne sont pas, sinon il n'y a pas beaucoup de place pour la coupe, il coupe donc de la mémoire cache, les lignes de conduite et de la structure de stockage d'information à trois points de vue de mettre en uvre.

1) enquête et utilisation de la mémoire ne répond pas aux attentes des collectivités locales

Fil analyse de découverte de données de mémoire, la consommation de mémoire tampon de lecture enfiler beaucoup plus élevée que la valeur de consigne. Es exemples de données pour chaque analyse, il a été constaté, en plus de la partie de données, mais aussi sauvé contexte d'un codec, chaque paquet doit exister un. Chaque paquet de contexte codec doit être le même, il suffit de garder une boîte. Le noyau a été fixée pour cette partie de la logique irrationnelle, utilisation de la mémoire réduite de près d'un tiers.

2) la réduction du tampon d'antémémoire

Antémémoire par rapport aux produits concurrents mis une grande, en prenant en compte le module de téléchargement a aussi un grand tampon, de sorte que le tampon du noyau peut rogner, l'équilibre mémoire tampon de données Caton peut être fixé à un niveau inférieur.

3) réduire la ligne de tuyau utilisation de la mémoire

tuyau mémoire du noyau, plus la quantité de tronçons de ligne d'antémémoire secondaire 3,5M, en plus de la reconstruction de source à la mémoire cache secondaire, associée à l'optimisation de la conduite pool de mémoire tampon, cette mémoire peut être réduite à 0,5.

4) la partie de structure de données d'optimisation

Telles que les informations de configuration stockées unMessage, chaque unMessage consomme 4k octets. Pour la scène HLS fichiers de renseignement, chaque enregistrement va créer un unMessage, de sorte que le dossier ajoutera à plus de 6 Mo, sans compter d'autres parties de l'utilisation de unMessage. Par conséquent, nous réécrivons une structure fonctionnelle similaire à remplacer, en gardant la unMessage d'interface, ce qui réduit l'ouverture de la mémoire inutile de dissipation interne.

Après l'optimisation, la mémoire de pic de joueur de base a chuté à 1/3 de l'original, ce qui réduit considérablement le nombre de mémoire une seule instance.

Optimisation puissance

Les principaux facteurs qui influent sur la consommation sont les suivants: taux d'occupation cpu, la durée des demandes de réseau, telles que l'écran de la consommation d'énergie et de l'équipement audio. volume de luminosité de l'écran, etc. Ces facteurs sont fixes, la consommation d'énergie est réduite lorsque les principales demandes d'utilisation de cpu et réseau des longues deux aspects à prendre en compte.

1) réduire les procédures inutiles, réduisant l'excès de fil

Cette partie a été achevée en coupe de fil, pas décrit en détail ici.

2) demander à la fente de commande de réseau, évitant longtemps connexion réseau

Lorsqu'une demande de dispositif mobile à partir du réseau, le dispositif de réseau wifi / 4G sous tension rapidement, une grande partie de cette consommation. Par conséquent, lire un morceau de morceaux de données, puis attendre une meilleure fréquence de petits morceaux de données de demande. Caton compte d'autres facteurs, les paramètres par défaut dans le cache du noyau consomment seulement après moins de deux tiers pour relancer le téléchargement.

3) la structure de stockage de données de remplacement, suppression de la logique d'accès redondant

L'enquête a constaté que chaque fois que des données sont écrites en mémoire tampon, UCT occupé anormale, ce qui est incompatible avec les attentes. examiner le code pour trouver les valeurs aberrantes: Nous utilisons les données vectorielles stockées dans la structure de données, chaque fois que les données doivent pousser vers l'avant, lorsque le vecteur atteignent la taille de l'ordre de dizaines de milliers, cette opération sera cpu de consommation très push_front. L'approche consiste à modifier le vecteur dans une liste, les données d'écriture à la queue, lire l'en-tête, le problème ne se reproduit pas.

4) Omx appels synchrones en asynchrone, ce qui réduit cpu décodage de temps

plate-forme Android, le module de solutions matérielles en utilisant un mode par défaut d'appel synchrone. android9.0 la couche native que ce modèle, le cycle sera opération file d'attente / dequeue, l'effort cpu. android9.0 et au-dessus, la couche native fournit des motifs d'appel asynchrone Omx, il ne consomme donc cpu travailler dans le décodage appel de rappel de module après la file d'attente / dequeue terminée, moins synchrone. Comme indiqué ci-dessous, asynchrone nettement clairsemée que le nombre synchrone.

5) algorithme pour réduire la vitesse de calcul redondants

examen a révélé cpu fil audioconsumer consomment beaucoup plus que le décodeur audio, ne répondent pas aux attentes, l'inspection a constaté que l'affaire ne tourne pas sur la vitesse, la vitesse passera la logique arithmétique de corrélation, ce qui entraîne la consommation cpu anormale, avant et après comparaison de restauration ci-dessous:

6) la couche noyau logique barrage implements

Atteindre barrage a été mis en uvre par la vue de la couche d'application, sous le déluge de données est grande, très influer sur la consommation d'énergie, même barrage de situation ambiguë apparaît. Par conséquent considéré à mettre en uvre la couche de noyau déplacé de barrage, des données du noyau mis en uvre barrage reçues rendent. Après vérification, la consommation d'énergie est optimisée rideau élastique diminue 2/3.

Après l'optimisation, l'opération de lecture moyenne a un taux d'occupation du processeur est inférieure à 7% (applications de test de milieu de gamme), 1080p / 90 minutes de la consommation vidéo réduit de 12%, avec une amélioration de 30% par rapport à avant l'optimisation.

résumé

À ce stade, jouer le noyau avant l'optimisation a été considérablement par rapport à la « réduction des effectifs ». Après la logique mince de code du noyau devient plus clair, concis et transfert de données plus efficace, ce qui permet aux étudiants de participer au développement du noyau peuvent être plus préoccupés par leur propre entreprise. Utilisation de la mémoire réduit de manière significative parler uniquement du point de vue de la mémoire, deux instances du noyau avant l'optimisation, vous pouvez maintenant créer six, élargit considérablement la limite supérieure de la logique métier. la consommation d'énergie devient plus faible, d'améliorer grandement l'expérience de lecture de l'utilisateur.

Notez que: Notre entreprise complexe, impliqué dans le développement de l'équipe, il y a beaucoup, un certain temps après l'itération de libération, va inévitablement faire le noyau devient de plus en plus pléthorique. Nous devons donc surveiller la mémoire une plus grande latitude, la consommation d'énergie pour chacun la version officielle, identifier les problèmes modifiés immédiatement afin qu'il ne continuera d'accumuler ces problèmes. Kernel également la reconstruction régulière à petite échelle, la suppression d'un code déraisonnable, l'unité de traitement logique commun et unifié, de manière à faire de haute qualité et le noyau maintenu.

groupe américain d'une décennie, le plus grand plats à emporter du monde comment soutenir la fourniture de la plate-forme d'apprentissage automatique unique est de faire?

Bill Gates quitte Microsoft Conseil d'administration, WWDC d'Apple, Microsoft Assemblée Build sont tenues en ligne à la place, la rouille 1.42.0 libération | Geeks titres

Tencent combiné Acnet mention classification à grains fins, l'effet est à la dernière SOTA | CVPR 2020

Ma recommandation IDE nuage préféré!

Solidité des fonctionnalités avancées de l'écriture contrat intelligent

E retour de retour du personnel readme au travail: retour de travail à Wuhan, Hefei voler, puis revenir en arrière et de choisir sa charte par la société

@ Programmeur, que vous découvrez le mystère de la technologie de diffusion
Précédent
Après avoir lu ce HTTPS, et l'intervieweur quereller, pas de problème
Prochain
Père téléphone mobile premier adversaire appel téléphonique, depuis la fin de la montée de la route de communication mobile moderne
groupe américain d'une décennie, le plus grand plats à emporter du monde comment soutenir la fourniture de la plate-forme d'apprentissage automatique unique est de faire?
Urgence! course contre la Couronne nouvelle découverte de médicaments du virus, des pratiques et de technologies informatiques de haute performance Ali
réduction de salaire! Transfert Kong! Pourquoi Python redeviendra l'arriviste 2020
Le non-orienté conception du système de studio
Quand l'école? Examen d'entrée au collège ne sera pas rebutés? Le ministère de l'Education a répondu à la dernière
La dernière réponse! Président du Brésil: Je ne suis pas positif
Xinhua Nouvelles Agence entrevue avec Wang Chen Académicien, la tâche en cours est la clé
Le premier « l'adoption du cloud » ouvert sous Nanyue comment améliorer l'épidémie, «J'ai un arbre Jugaku » marque
candidats scientifique de données Apple, ce que vous devez savoir?
5G, la prochaine ère de l'IdO, caméra de téléphone cellulaire de se concentrer si la mauvaise direction?
Bill Gates quitte Microsoft Conseil d'administration, WWDC d'Apple, Microsoft Assemblée Build sont tenues en ligne à la place, la rouille 1.42.0 libération | Geeks titres