17 Stimmen

Wie kann man einen potenziellen Patch für den Linux-Kernel einreichen?

Wir haben einige Software, die sich auf ein bestimmtes Verhalten einer anderen ( muy häufig verwendete) Anwendung, die sich nun geändert hat, so dass unsere derzeitige Implementierung zwar praktikabel, aber nicht optimal ist.

Wir glauben, dass diese Änderung eine Reihe anderer Anwendungen, insbesondere im Bereich der Leistungsüberwachung, beeinträchtigt haben könnte, und wir haben eine Lösung gefunden, die unserer Meinung nach eine ganze Reihe anderer potenzieller Probleme verbessern wird.

Leider handelt es sich bei der besagten Lösung um eine Kernel-Änderung (relativ einfach, aber mit großen Auswirkungen, wenn wir es vermasseln), und wir haben keine Erfahrung mit der Einreichung von Kernel-Patches zur Überprüfung.

Hat irgendjemand von SO tatsächlich einen Patch eingereicht (obwohl ich alle Antworten zu schätzen weiß, vermute ich, dass die besten Antworten von denjenigen kommen, die den Prozess bereits durchlaufen haben, auch wenn sie nicht erfolgreich waren)? Wurde er angenommen (wie groß sind die Chancen, dass Alan Cox und Co. auf SO herumhängen)?

Welches ist das richtige Verfahren? Ich habe nicht die Absicht, eine E-Mail an Linus zu schicken, da ich weiß, dass er einen Kader von Beschützern hat, die man durchlaufen muss, bevor man zu ihm gelangt. Wie kann ich herausfinden, wer für einen bestimmten Abschnitt des Kernels verantwortlich ist?

Vielleicht bin ich zu optimistisch, wenn ich glaube, dass jemand, von dem die Welt des Kerns noch nie etwas gehört hat, einen Beitrag leisten kann, aber ich würde es gerne herausfinden.


EDIT mit mehr Details:

Die Änderung bezieht sich nicht auf einen Leistungsfehler, sondern auf eine Verbesserung (meiner Meinung nach) der Prozessbuchhaltungseinträge, die (derzeit) geschrieben werden, wenn ein Prozess beendet wird.

Websphere App Server (ach, IBM, Gott segne ihre kleinen Herzen) hat seine Funktionsweise geändert. Früher wurden JVMs regelmäßig beendet, damit ihre Einträge geschrieben wurden und wir diese für die Rückbuchung verwenden konnten. Jetzt lässt sie JVMs monatelang herumliegen, was bedeutet, dass die Daten nicht rechtzeitig verfügbar sind, es sei denn, wir zwingen WAS regelmäßig zum Herunterfahren. Irgendwie glaube ich nicht, dass die Software Group von IBM ihre Software für uns reparieren wird :-). Auf jeden Fall glaube ich, dass es eine nützliche Funktion für andere langlebige Prozesse sein kann.

Derzeit werden Typ-3-Prozessabrechnungsdatensätze geschrieben, wenn ein Prozess beendet wird. Was wir suchen, ist ein Mechanismus, um Typ-N-Datensätze regelmäßig zu schreiben, während ein Prozess noch aktiv ist und die Zahlen seit dem letzten Schreiben (oder dem Prozessstart, wenn dies das erste Mal ist) anzugeben. Anwendungen zur Rückverrechnung oder Leistungsüberwachung können entweder die Typ-3-Datensätze (völlig unverändert) oder die Typ-N-Zwischensätze verwenden. Die derzeitige Lösung besteht darin, /proc/PID/stat für bestimmte Prozesse zu überwachen, aber das ist ein schrecklicher Trick, da er sich nicht gut in die echte Prozessabrechnung integrieren lässt.

Es muss nicht oft sein (wir wären mit 24 Stunden zufrieden), aber es könnte eine Auswirkung auf die Leistung haben, da die Arbeit, die derzeit nur bei process exit() gemacht wird, gelegentlich beim Prozesskontextwechsel gemacht werden muss. Linus et al. mögen diese Idee vielleicht nicht, da es sich um einen Bereich des Codes handelt, der hohe Auswirkungen hat (selbst die Überprüfung, ob seit dem letzten Schreibvorgang 24 Stunden vergangen sind, könnte für sie zu langsam sein).

Trotzdem vielen Dank für die bisherigen Antworten, ich werde sehen, wie ich vorankomme. Geben Sie mir ein paar Tage und ich werde die beste Antwort akzeptieren.

0 Stimmen

Ich kann Ihnen sagen, was sicherlich falsch ist: Linus zu verschicken.

14voto

Blaisorblade Punkte 6246

Vor allem anderen: Konzentrieren Sie sich auf den Bericht über den Leistungsfehler und machen Sie ihn richtig (mit wiederholbaren Benchmarks), damit sich die Leute wenigstens mit dem Problem befassen. Reichen Sie auch den Patch ein, nachdem Sie ihn getestet haben, aber seien Sie sich darüber im Klaren, dass Ihr großartiger Patch den falschen Ansatz verwenden könnte, und dass man einen besseren schreiben könnte. Oder dass er einfach großartig ist, aber vielleicht noch Korrekturen braucht, um akzeptiert zu werden, das passiert sogar bei Überfliegern. Und denken Sie nicht daran, jemandem privat zu mailen, sondern verweisen Sie auf LKML oder das entsprechende Subsystem ML.

Ich schlage vor, dass Sie alle anderen Antworten und alles anwendbare Material durchlesen, bevor Sie sich an die Kernel-Entwickler wenden; und lesen Sie auch die Bibliographie von SubmittingPatches. Sie könnten streng sein, wenn Sie es falsch machen. Der Kernelnewbies IRC-Chat ist ein guter Ort, um anzufangen, denn sie sind mit Sicherheit einladend, auch wenn die Umgebung manchmal zu neulingshaft sein kann (ich bin mir nicht sicher, ich war noch nicht so oft dort).

Vielleicht bin ich zu optimistisch, wenn ich glaube, dass jemand, von dem die Welt des Kerns noch nie etwas gehört hat, einen Beitrag leisten kann, aber ich würde es gerne herausfinden.

Das ist nicht übermäßig optimistisch, zumindest nicht an sich. Wenn ich von Ihnen absehe (da ich Ihre Fähigkeiten nicht kenne), ist es eher unwahrscheinlich, dass Ihr Patch ohne Änderungen akzeptiert wird, oder dass er nach den richtigen Fähigkeiten geschrieben wurde. Aber wenn Ihr Patch an eine kleinere Gemeinschaft gerichtet ist, könnte es tatsächlich viel einfacher sein.

Von jemandem mit einiger Erfahrung (z.B. mir): Bevor Sie die Einreichung eines Patches in Betracht ziehen, beschreiben Sie das Problem und warum es andere Anwendungen beeinträchtigt. Erwägungen wie "dies verbessert unsere Leistung", insbesondere wenn Sie sich (vage) als Anbieter qualifizieren, werden bei Kernel-Entwicklern keinen Anklang finden.

Insbesondere sollten Sie solche Aussagen unterlassen:

was unsere derzeitige Umsetzung zwar praktikabel, aber nicht optimal macht.

denn die meisten Leser werden Ihnen daraufhin sofort eine "Reparieren Sie Ihren Code"-Empfehlung aussprechen.

Wenn die Leistung einer bestehenden (nicht von Ihnen geschriebenen) Anwendung beeinträchtigt wird, ist das etwas anderes. Linus hat zum Beispiel einmal sofort darauf geachtet, dass die Leistung des Kernels für fehlerhaften Code korrigiert wurde, weil dieser Code Teil von Make war, auch wenn er stolz auf den Code war, den er geschrieben hatte, und auf die Tatsache, dass er genau diese Korrektur nicht durchführen musste. D.h., man braucht eine Anwendung, die alle interessiert, oder eine Lösung ohne Nachteile. Also, Sachen wie:

Verhalten aus einer anderen (sehr häufig verwendeten) Anwendung

ist gut, solange Ihre Nutzung dieser Anwendung nicht als unangemessen angesehen wird.

Wenn Sie schließlich auf den Quellcode verweisen, wird man Sie wahrscheinlich bitten, den betreffenden Abschnitt zu sehen - denken Sie an Lizenzprobleme mit Ihrem Code, falls es sie gibt, und lösen Sie sie im Voraus, wenn Sie sie schnell beantworten wollen.

Dies ist übrigens ein Auszug aus meinen Erfahrungen dort: https://www.ohloh.net/accounts/Blaisorblade

Wenn Sie möchten, können Sie sich mit mir in Verbindung setzen, um Ihnen direkt mit einer vorgeschlagenen E-Mail zu helfen, und mich an der Diskussion beteiligen. Ich bin ziemlich beschäftigt, aber vielleicht finde ich noch etwas Zeit :-).

13voto

Chris Young Punkte 15265

Nun, Sie könnten versuchen zu lesen Dokumentation/Einreichung von Patches im Linux-Kernel-Quellbaum.

4voto

Diomidis Spinellis Punkte 18162

In einem großen Projekt ist der beste Weg, einen Patch in den Hauptbaum zu bekommen, die Person zu kontaktieren, die den jeweiligen Teil des Codes pflegt. Schauen Sie also durch den Linux MAINTAINERS Datei um zu sehen, wer der formelle Betreuer des von Ihnen geänderten Codes ist, und auch bei der Linux-Kernel-SCM-Repository um die Entwickler ausfindig zu machen, die kürzlich an diesem Code gearbeitet haben. So erhöhen Sie Ihre Chancen, dass der Patch akzeptiert wird:

  • sicherstellen, dass Ihr Patch leicht verständlich ist und den bestehenden Code- und Dokumentationsstandards entspricht,
  • erläutern Sie klar und deutlich, was Ihr Patch erreicht,
  • übermitteln Sie Ihre Änderungen in einem geeigneten Format (die Ausgabe von diff -up für Linux),
  • Stellen Sie sicher, dass der Patch sauber auf die neueste Softwareversion (Linux-Kernel) angewendet werden kann (und funktioniert),
  • Testfälle enthalten, die sowohl das Problem, das Sie angehen, als auch die Lösung des Problems durch den Patch demonstrieren, und
  • Nehmen Sie keine irrelevanten Änderungen (z. B. Formatierungen) in Ihren Code auf.

Es ist wahrscheinlicher, dass eine kleine Korrektur eines bekannten Fehlers in ein Projekt aufgenommen wird, als große Codeänderungen, die eine neue Funktion von geringem oder zweifelhaftem Nutzen einführen. In manchen Fällen lohnt es sich, zuerst einen Fehlerbericht über die Datenbank des Projekts zu erstellen und dann einen Patch einzureichen, der das spezifische Problem behebt. Um Enttäuschungen zu vermeiden, ist es besser, wenn Sie eine große Änderung machen wollen, die Änderung und Ihre vorgeschlagene Implementierung mit dem Betreuer zu besprechen antes de das Schreiben des Codes.

2voto

shodanex Punkte 14453

Lesen Sie die Dokumentation/SubmittingPatches, finden Sie den entsprechenden MAINTAINER, und vor allem, finden Sie heraus, wo die ganze Diskussion stattfindet vraiment geschehen. Vielleicht nicht auf der Kernel-Mailingliste selbst, aber vielleicht auf irgendeinem Subsystem ML.

Dann abonnieren Sie diese ML und reichen Ihren Patch als RFC ein.

Ich weiß nicht, ob Ihr Patch invasiv ist, aber versuchen Sie, ihn in eine Reihe von logischen Änderungen aufzuteilen, jede mit ihrer eigenen Erklärung.

1voto

OIS Punkte 9481

Ich habe noch nicht versucht, selbst Kernel-Patches einzureichen, und die es fehlt an Dokumenten in diesem Bereich.

Pero diese Seite Sieht aus, als könnte es Ihnen die richtige Richtung weisen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X