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

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

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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


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

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

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

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

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

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

Это было полезно?

Решение

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

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

  

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

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

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

В особенности опускаем такие утверждения:

  

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

потому что это купит вам " исправьте ваш код " рекомендация немедленно большинством читателей.

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

  

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

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

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

Кстати, это частичный отчет о моем опыте там: https://www.ohloh.net/accounts/Blaisorblade

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

Другие советы

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

В большом проекте лучший способ внести исправление в основное дерево - это связаться с человеком, который поддерживает конкретный фрагмент кода.Итак, просмотрите Файл СОПРОВОЖДАЮЩИХ Linux чтобы узнать, кто формально является сопровождающим измененного вами кода, а также на Репозиторий SCM ядра Linux чтобы найти разработчиков, которые недавно работали над этим кодом.Чтобы увеличить ваши шансы на то, что патч будет принят:

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

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

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

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

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

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

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

При РЕДАКТИРОВАНИИ ответ может быть интересен в качестве примера.Я предполагаю, что ваше требование абсолютно разумно, но вы правы в том, что даже тест на переключение контекста может оказаться слишком дорогим.Но поскольку в ядре есть реализация таймера, я не понимаю, почему его нельзя использовать, чтобы избежать этого.Так что, действительно, предлагать запрос на улучшение - самый безопасный вариант.Я удивлен, что предложение отправить отчет об ошибке вместо исправления оказалось таким удачным.Вы также можете самостоятельно изменить патч, чтобы использовать таймеры, если хотите отправить его, но все равно будьте готовы к обсуждению :-) Вы даже можете добавить "у нас есть локальное исправление, но оно добавляет некоторые тесты для быстрого переключения контекста, вот почему исправление прилагается для справки, но не должно применяться".Отказ от вашего собственного кода, если известно, что он плохой, позволит избежать резких отзывов о патче.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top