Linuxカーネルに潜在的なパッチをどのように提出しますか?

StackOverflow https://stackoverflow.com/questions/434711

  •  10-07-2019
  •  | 
  •  

質問

変更された別の(非常によく使用される)アプリケーションの特定の動作に依存するソフトウェアがあり、現在の実装は実行可能ですが、最適ではありません。

この変更は、特にパフォーマンスモニタリングの分野において、他の多くのアプリケーションに影響を与えた可能性があると考えており、他の多くの潜在的な問題を改善するソリューションを見つけました。

残念なことに、上記の解決策はカーネルの変更であり(比較的単純ですが、詰め込むと影響が大きくなります)、カーネルパッチをレビュー用に提出した経験はありません。

SOの誰かが実際にパッチを提出しました(すべての回答に感謝しますが、最高のパッチはプロセスを経て成功しなかったものから来るのではないかと思います)。あなたはそれを受け入れましたか(アラン・コックスらがSOに夢中になっている可能性はどのくらいですか?)

従うべき正しいプロセスは何ですか? Linusにメールを送信するつもりはありません。彼に届く前にあなたが通過すべき保護者の幹部がいるからです。カーネルの特定のセクションの責任者を確認するにはどうすればよいですか。

カーネルの世界では聞いたことのない誰かが貢献できると考えるのは楽観的すぎるかもしれませんが、知りたいと思います。


詳細を編集:

この変更は、実際にはパフォーマンスのバグのためではなく、プロセスの終了時に(現在)書き込まれたプロセスアカウンティングエントリの(私の意見では)改善です。

Websphere App Server(ああ、IBM、彼らの小さな心を祝福します)は、その動作を変更しました。 JVMは、エントリが書き込まれるように定期的に終了していたため、チャージバックに使用できました。現在では、JVMを数か月間放置しています。つまり、WASを定期的に強制しない限り、データはタイムリーに利用できません。どういうわけか、IBMのソフトウェアグループがソフトウェアを修正してくれるとは思わない:-)。いずれにせよ、私はそれが他の寿命の長いプロセスのために持つ便利な機能であると信じています。

現在、タイプ3プロセスのアカウンティングレコードは、プロセスの終了時に書き込まれます。現在見ているのは、プロセスがまだアクティブである間にタイプNレコードを定期的に書き込むメカニズムです。これは初めて)。チャージバックまたはパフォーマンスモニタリングアプリケーションは、タイプ3レコード(完全に変更なし)または中間タイプNレコードのいずれかを使用することを選択できます。現在の回避策は、特定のプロセスの/ proc / PID / statを監視することですが、実際のプロセスアカウンティングとうまく統合できないため、それは恐ろしいことです。

頻繁に行う必要はありませんが(24時間で満足です)、現在プロセスexit()でのみ行われている作業はプロセスコンテキストスイッチで時々行わなければならないため、パフォーマンスに影響が出る可能性があります。 Linusらは、コードの影響が大きい領域である可能性があるため、その考えを好まない場合があります(最後の書き込みが24時間経過しているかどうかをチェックしても、彼らにとっては遅すぎるかもしれません)。

それでも、これまでのすべての答えに感謝します。どうすればいいかわかります。数日お待ちください。ベストアンサーを受け入れます。

役に立ちましたか?

解決

他のものより前: パフォーマンスバグレポートに集中し、それを(再現可能なベンチマークを使用して)正しく取得することは、少なくとも人々を問題に悩ませるのに役立ちます。また、パッチをテストしてから送信しますが、すばらしいパッチが間違ったアプローチを使用し、より良いパッチを作成する可能性があることに注意してください。または、それは単に素晴らしいかもしれませんが、受け入れられるためには修正が必要かもしれません。また、個人的にメールを送信することは考えないでください。LKMLまたは適切なサブシステムMLを参照してください。

カーネル開発者に連絡する前に、他のすべての回答とすべての該当する資料を一読することをお勧めします。 SubmittingPatchesの参考文献も読んでください。 あなたが間違っていると、彼らは厳しいかもしれません。 kernelnewbies IRCチャットは開始するのに適した場所です。環境が初心者のようになりすぎる場合もありますが(確かに、私はあまり行ったことがないので)、歓迎しているからです。

  

カーネルの世界では聞いたことのない誰かが貢献できると考えるのは楽観的すぎるかもしれませんが、知りたいと思います。

過度に楽観的ではありません。少なくともそれ自体ではありません。あなたから要約すると(私はあなたのスキルを知らないので)、あなたのパッチが修正なしで受け入れられるか、適切なスキルに従って書かれている可能性が低いです。しかし実際には、パッチが小規模なコミュニティに宛てられている場合は、はるかに簡単です。

経験のある人(つまり私)から、パッチの提出を検討する前に、問題とそれが他のアプリケーションに影響する理由を説明してください。 「これによりパフォーマンスが向上する」などの考慮事項は、特にベンダーとして(あいまいに)資格がある場合、カーネル開発者にアピールしません。

特に、そのようなステートメントは省略します:

  

現在の実装を実行可能にしますが、最適ではありません。

これにより、「コードを修正」が購入されるためです。ほとんどの読者による即時の推薦。

既存のアプリケーション(自分で作成したものではない)のパフォーマンスが影響を受ける場合、それは異なります。たとえば、Linusはすぐに、ねじ込んだコードのカーネルパフォーマンスの修正に注意を向けました。そのコードは、自分が書いたコードややる必要がないという事実を誇りに思っていたとしても、その一部であったためですその正確な修正。つまり、誰もが気にするアプリケーション、または不利な点のないソリューションが必要です。 だから、次のようなもの:

  

別の(非常によく使用される)アプリケーションからの動作

そのアプリケーションの使用が不合理とみなされない限り、良いです。

最後に、ソースコードを参照する場合、関心のあるセクションを参照するように求められる可能性があります-コードに問題がある場合はライセンスの問題を考え、すぐに答えたい場合は事前に解決してください。

ところで、これはそこでの私の経験の部分的な説明です。 https://www.ohloh.net/accounts/Blaisorblade

必要に応じて、提案されたメールを直接手伝うために私に連絡し、議論についてCCしてください。忙しいですが、もう少し時間がかかるかもしれません:-)。

他のヒント

まあ、Linuxカーネルソースツリーの Documentation / SubmittingPatches を読んでみてください。

大規模なプロジェクトでは、メインツリーにパッチを適用する最良の方法は、特定のコードを保守している人に連絡することです。したがって、 Linux MAINTAINERSファイルを調べて、コードのメンテナーが正式に誰であるかを確認してください。変更され、 LinuxカーネルSCMリポジトリを使用して、そのコードに最近取り組んだ開発者を見つけます。パッチが受け入れられる可能性を高めるには:

  • パッチが理解しやすく、既存のコードおよびドキュメント標準に準拠していることを確認します
  • パッチが達成することを明確に説明してください
  • 適切な形式(Linuxのdiff -upの出力)で変更を送信します。
  • 最新のソフトウェア(Linuxカーネル)バージョンにパッチをきれいに適用(および機能)できることを確認してください
  • 対処している問題とパッチがそれを解決する方法の両方を示すテストケースを含めます
  • コードに無関係な(フォーマットなどの)変更を含めないでください。

既知のバグの小規模な修正は、限界または疑わしいユーティリティの新機能を導入する大きなコード変更よりもプロジェクトに組み込まれる可能性が高くなります。場合によっては、最初にプロジェクトの問題追跡データベースを通じてバグレポートを提出し、次に特定の問題に対処するパッチを提出する価値があります。失望を避けるために、大きな変更を行うことを考えている場合は、コードを記述する の前に、メンテナーと変更および提案されている実装について話し合うことをお勧めします。

Documentation / SubmittingPatchesを読み、適切なMAINTAINERを見つけ、最も重要なこととして、すべての議論がどこで本当に起こっているかを見つけてください。 カーネルのメーリングリスト自体には載っていないかもしれませんが、おそらくサブシステムMLに載っています。

このMLにサブスクライブし、パッチをRFCとして送信します。

パッチが侵襲的かどうかはわかりませんが、論理的な変更のキューにパッチを分割してみてください。それぞれに説明があります。

カーネルパッチを自分で提出しようとはしていませんが、ドキュメントが欠けていますエリア。

ただし、このページは、正しい方向を示すことができるように見えます。

編集では、答えは例として興味深いかもしれません。 あなたの要件は完全に合理的であると思いますが、コンテキストスイッチのテストでさえ高すぎるかもしれません。しかし、カーネルにはタイマーが実装されているため、それを回避するために使用できない理由はわかりません。したがって、実際には、機能強化のリクエストを提案することが最も安全な方法です。 パッチの代わりにバグレポートを送信することを提案するのは、非常に適していることに驚きました。 パッチを送信したいが、議論の準備ができている場合は、自分でタイマーを使用するようにパッチを自分で変更することもできます:-) 「ローカル修正プログラムがありますが、コンテキストスイッチ高速パスにいくつかのテストを追加することもできます。そのため、パッチは参照用に添付されますが、適用すべきではありません」。悪いことがわかっている場合、独自のコードを拒否すると、パッチの厳しいレビューを回避できます。

別の方法は、いくつかのベンチマークを実行して影響がないことを証明することですが、タイマーが実行可能な場合、コードはとにかく拒否されるか、自分でタイマーソリューションを試すことです(より良いものが存在する可能性があります)。 カーネルスケジューラに使用するベンチマークを見つけます。 「最近」を見てください; CFS Ingoの(またはKolivasの)パッチに関するスレッドを作成し、ベンチマークを取得します。

サポートについて、カーネル開発者は「Websphere App Server」について気にしません。 IBMが資金提供したものではなく、それ自体が不合理なことを行う場合。しかし、状況に関する私の限られた知識では、JVMを定期的にシャットダウンすることは意味がありません、それはメモリリーク/不安定性を紙に書き上げる方法に過ぎないので、現在の動作をサポートする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top