Как отправить потенциальный патч на ядро ​​Linux?

17

У нас есть программное обеспечение, основанное на определенном поведении от другого ( очень общедоступного) приложения, которое теперь изменилось, что делает нашу текущую реализацию работоспособной, но менее оптимальной.

Мы полагаем, что это изменение, возможно, повлияло на ряд других приложений, особенно в области мониторинга производительности, и мы нашли решение, которое, по нашему мнению, улучшит множество других потенциальных проблем.

К сожалению, это решение - это изменение ядра (относительно простое, но очень сильное воздействие, если мы его заполняем), и у нас нет опыта отправки исправлений ядра для просмотра.

Кто-нибудь из SO действительно представил патч (хотя я был бы признателен за все ответы, я подозреваю, что лучшие из них будут получены от тех, которые прошли через этот процесс, даже безуспешно)? Приняли ли вы его (каковы шансы, что Алан Кокс и др. Висят на SO)?

Каков правильный процесс? Я не собираюсь отправлять письмо Линусу, так как я знаю, что у него есть кадры защитников, которые вы должны пройти до того, как он доберется до него. Как узнать, кто отвечает за конкретный раздел ядра.

Возможно, я слишком оптимистично смотрю на кого-то, о чем никогда не слышал мир ядра, но мне было бы интересно узнать.

РЕДАКТИРОВАТЬ с более подробной информацией:

Это изменение на самом деле не является ошибкой производительности, а улучшением (по моему мнению) для записей учета процесса (в настоящее время), записанных при завершении процесса.

Сервер приложений Websphere (ах, IBM, благословит их маленькие сердца) изменил то, что он делает; JVM обычно выходили регулярно, чтобы их записи были написаны, и мы могли бы использовать их для возврата. Теперь это оставляет JVM, которые лежат в течение нескольких месяцев, а это означает, что данные не доступны своевременно, если мы не заставим WAS регулярно. Почему-то я не думаю, что IBM Software Group собирается исправить свое программное обеспечение для нас :-). В любом случае, я считаю, что это может быть полезной особенностью для других долгоживущих процессов.

В настоящее время записи процесса учета типа 3 записываются, когда процесс завершается, то, что мы рассматриваем, является механизмом записи записей типа N периодически, пока процесс все еще активен, давая цифры с момента последней записи (или запускается процесс, если это впервые). Приложения обратной связи или приложения контроля производительности могут использовать либо записи типа 3 (полностью без изменений), либо временные записи типа N. Нынешний обходной путь - мониторинг / proc / PID / stat для определенных процессов, но это ужасный kludge, поскольку он не хорошо интегрируется с реальным процессом учета.

Это не обязательно (мы будем довольны 24 часами), но может быть влияние производительности, так как работа, которая в настоящее время выполняется только при выходе из процесса (), должна выполняться иногда при переключении контекста процесса. Linus et al может не понравиться эта идея, так как это может быть область с высоким ударом кода (даже проверка, если прошло 24 часа с тех пор, как последняя запись может быть слишком медленной для них).

Тем не менее, спасибо за все ответы до сих пор, я посмотрю, как я пойду. Дайте мне пару дней, и я приму наилучший ответ.

    
задан paxdiablo 12.01.2009 в 08:31
источник
  • Я могу сказать вам, что, безусловно, неправильно: рассылка Линуса. –  eckes 03.05.2015 в 22:03

6 ответов

14

Прежде всего: сосредоточив внимание на отчете об ошибках производительности и правильном использовании (с повторяемыми критериями), по крайней мере, поможет вам заставить людей беспокоиться о проблеме. Также отправьте патч после тестирования, но будьте осторожны, что ваш большой патч может использовать неправильный подход и что они могут написать лучший. Или это просто может быть здорово, но может потребоваться исправление, чтобы принять, что даже происходит с uber-парнями. И не думайте, чтобы отправить кого-то в частном порядке, но обратитесь к LKML или к соответствующей подсистеме ML.

Я предлагаю вам прочитать все остальные ответы и все применимые материалы, прежде чем обращаться к разработчикам ядра; и читайте также библиографию SubmittingPatches. Они могут быть жесткими, если вы делаете это неправильно. Ярлыки IRC-чата - это хорошее место для вас, потому что они наверняка приветствуют, даже если иногда среда может быть слишком новичкой (не уверен, что меня там не было).

  

Возможно, я слишком оптимистично смотрю на кого-то, о чем никогда не слышал мир ядра, но мне было бы интересно узнать.

Это не слишком оптимистично; по крайней мере, не по себе. Тезисы от вас (так как я не знаю ваших навыков), тем более маловероятно, что ваш патч будет принят без изменений или что он написан в соответствии с правильными навыками. Но на самом деле, если ваш патч адресован меньшему сообществу, это может быть намного проще.

От кого-то, у кого есть некоторый опыт (например, я), перед рассмотрением публикации патча, опишите проблему и почему она влияет на другие приложения. Такие соображения, как «это улучшает нашу производительность», особенно если вы квалифицируетесь (неопределенно) как поставщик, не будете привлекать разработчиков ядра.

В частности, оставьте такие утверждения:

  

делает нашу текущую реализацию работоспособной, но менее оптимальной.

, потому что это купит вам рекомендацию «исправить свой код» сразу большинству читателей.

Если производительность существующего приложения (не написана вами) влияет, это отличается. Например, как только Linus незамедлительно обратил внимание на исправление производительности ядра для прикрученного кода, поскольку этот код был частью make, даже если он был горд кодом, который он написал, и тем фактом, что ему не нужно было делать это точное исправление. I.e., вам нужно приложение, которое все заботятся, или решение без недостатков. Итак, такие вещи, как:

  

поведение от другого (очень часто используемого) приложения

является хорошим, если ваше использование этого приложения не считается необоснованным.

Наконец, если вы ссылаетесь на исходный код, они, скорее всего, попросят увидеть интересующий раздел - подумайте, чтобы лицензировать проблемы с вашим кодом, если они существуют, и решить любую из них заранее, если вы хотите быстро ответить на них.

Btw, это частичный отчет о моем опыте: Ссылка

Если вы хотите, вы можете связаться со мной, чтобы помочь вам напрямую с предлагаемой почтой, и CC меня на обсуждение. Я довольно занят, но я мог бы найти еще некоторое время: -).

    
ответ дан Blaisorblade 12.01.2009 в 09:43
  • См. обновление к вопросу. –  paxdiablo 12.01.2009 в 12:17
13

Ну, вы можете попробовать прочитать Documentation / SubmittingPatches в исходном дереве ядра Linux.

    
ответ дан Chris 12.01.2009 в 08:44
  • Это кажется хорошо, но нет очевидной записи для интересующей области, что означает, что я буду беспокоить самого Линуса, я думаю :-). –  paxdiablo 12.01.2009 в 08:53
  • Нет, вы должны отправить список рассылки ядра Linux, см. параграф 2 раздела 5. –  Chris 12.01.2009 в 08:57
  • Я отправил драйвер ядра и принял его в списке рассылки LKML. это, вероятно, лучший способ сделать это –  Hasturkun 12.01.2009 в 09:00
  • Ах, я не мог найти раздел 5 (есть только 3 раздела), но я вижу, что вы имеете в виду раздел 1, часть 5. Спасибо кучи. Я сделаю это. –  paxdiablo 12.01.2009 в 10:49
  • Да, извините. Раздел 1, подраздел 5, параграф 2. :) –  Chris 12.01.2009 в 11:27
4

В большом проекте лучший способ получить патч в главном дереве - связаться с человеком, который поддерживает конкретный фрагмент кода. Итак, просмотрите файл Linux MAINTAINERS , чтобы узнать, кто формально является хранителем кода, который вы изменили, а также репозиторий SCM Linux ядра , чтобы найти разработчиков, которые недавно работал над этим кодом. Чтобы увеличить ваши шансы на получение патча:

  • убедитесь, что ваш патч легко понять и соответствует существующим стандартам кода и документации,
  • четко объясните, что ваш патч достигает,
  • отправьте свои изменения в соответствующем формате (вывод diff -up для Linux),
  • убедитесь, что патч можно использовать (и работает) на последней версии программного обеспечения (Linux kernel),
  • включают тестовые примеры, которые демонстрируют как проблему, которую вы решаете, так и то, как исправление исправляет ее, и
  • не включать в свой код неуместные (например, форматирование) изменения.

Небольшое исправление для известной ошибки, скорее всего, будет включено в проект, чем большие изменения кода, которые вводят новую функцию маргинальной или сомнительной утилиты. В некоторых случаях стоит сначала зарегистрировать отчет об ошибке в базе данных отслеживания проблем проекта, а затем отправить исправление, в котором рассматривается конкретная проблема. Чтобы избежать разочарования, если вы думаете о внесении больших изменений, лучше обсудить изменения и предлагаемую реализацию с помощью до сопровождающего

.

    
ответ дан Diomidis Spinellis 12.01.2009 в 08:54
2

Прочитайте документацию / SubmittingPatches, найдите соответствующий MAINTAINER и, самое главное, узнайте, где происходит обсуждение действительно . Это может быть не в самом списке рассылки ядра, а, возможно, в некоторой подсистеме ML.

Затем подпишитесь на этот ML и отправьте патч как RFC.

Я не знаю, является ли ваш патч инвазивным, но попытайтесь разбить его в очереди логических изменений, каждый со своим собственным объяснением.

    
ответ дан shodanex 12.01.2009 в 09:41
1

Я даже не пробовал отправлять какие-либо патчи ядра, а в документах в этой области не хватает .

Но эта страница выглядит так, как будто она может указывать на вас в правильном направлении.

    
ответ дан OIS 12.01.2009 в 08:41
  • Мне особенно нравится раздел WhatNotToDo («вы все идиоты!»). Это должно надеяться избежать любых начальных проблем. –  paxdiablo 12.01.2009 в 08:45
  • И GetFlamed, которое, вероятно, испытывает большинство новых отправителей. :) –  OIS 12.01.2009 в 08:54
1

В EDIT ответ может быть интересным в качестве примера. Я предполагаю, что ваше требование совершенно разумно, но вы правы, что даже тест на контекст-переключатель может быть слишком дорогостоящим. Но поскольку у ядра есть реализация таймера, я не понимаю, почему его нельзя использовать, чтобы этого избежать. Так что, действительно, предлагая запрос на повышение - это самая безопасная ставка. Я удивлен, что предлагать отправить отчет об ошибке вместо патча было настолько хорошим. Вы также можете изменить патч самостоятельно, чтобы сами использовать таймеры, если хотите отправить его, но все же будете готовы к обсуждению :-) Вы даже можете добавить «у нас есть локальное исправление, но он добавляет некоторые тесты на быстрый путь контекстного коммутатора, поэтому патч привязан для справки, но не должен применяться». Отказ от собственного кода, если он известен как плохой, позволит избежать суровых обзоров патча.

Альтернативой является запуск некоторых эталонных тестов и доказательство того, что нет никакого эффекта, но если таймеры жизнеспособны, код будет отклонен в любом случае или попытаться самостоятельно решить проблему таймера (что-то лучше может существовать). Найдите те тесты, которые они используют для планировщика ядра; посмотрите «последние» потоки о патче CFS Ingo (или Kolivas?) и возьмите их тесты.

О поддержке разработчики ядра не будут заботиться о «Websphere App Server» сами по себе, если это необоснованные вещи, даже не финансируемые IBM. Но с моим ограниченным знанием ситуаций, закрытие JVM периодически не имеет смысла, это, по-видимому, просто способ бумаги по поводу утечки / нестабильности памяти, поэтому текущее поведение должно поддерживаться.

    
ответ дан Blaisorblade 13.01.2009 в 19:33
  • Ни в коем случае я не предполагаю, что это ошибка для разработчиков, это явно улучшение - я принял ваш более ранний ответ из-за другой информации в нем. Anyhoo, теперь LKML для мира, чтобы увидеть и обсудить. Один мс вернулся, и похоже, что DB2 также действует аналогично WAS, надеюсь, что не только IBM выиграет. –  paxdiablo 13.01.2009 в 22:50
  • Извините, я упустил эту очень важную деталь. –  Blaisorblade 14.01.2009 в 03:13