문제

우리는 다른 행동에 의존하는 소프트웨어가 있습니다 (매우 일반적으로 사용되는) 응용 프로그램은 이제 변경되어 현재 구현을 실행 가능하지만 최적이지는 않습니다.

우리는 이러한 변화가 특히 성능 모니터링 분야에서 여러 다른 응용 프로그램에 영향을 미쳤을 것이라고 생각하며, 다른 잠재적 인 문제를 개선 할 수있는 솔루션을 발견했습니다.

불행히도, 해당 솔루션은 커널 변경 (비교적 단순하지만 적용하면 영향력이 높음)이며 검토를 위해 커널 패치를 제출 한 경험이 없습니다.

그렇게 한 사람이 실제로 패치를 제출 한 사람이 있습니까 (모든 답변에 감사하지만, 최선의 사람들은 프로세스를 통해서도 실패한 것들로부터 나올 것이라고 생각합니다)? 당신은 그것을 받아 들였습니까 (Alan Cox et al이 그렇게 할 가능성은 무엇입니까)?

따라야 할 올바른 프로세스는 무엇입니까? 나는 그가 당신이 그에게 도달하기 전에 겪어야 할 보호자의 간부가 있다는 것을 알고 있기 때문에 Linus에게 이메일을 보내려는 의도가 없습니다. 커널의 특정 섹션을 담당하는 사람을 어떻게 알 수 있습니까?

커널 세계가 들어 본 적이없는 사람이 기여할 수 있다고 생각하는 데 지나치게 낙관적 일 수는 있지만 알아내는 데 관심이있을 것입니다.


자세한 내용으로 편집 :

변경은 실제로 성능 버그가 아니라 프로세스가 종료 될 때 작성된 프로세스 회계 항목 (현재)에 대한 개선 (내 견해로는)입니다.

WebSphere App Server (아, IBM, 작은 마음을 축복 함)는 그것이하는 일을 바꿨습니다. JVM은 항목이 작성되어 정기적으로 종료되었고 전하에 사용할 수있었습니다. 이제 JVM이 몇 달 동안 거짓말을합니다. 즉, 우리가 규칙적으로 강요되지 않는 한 데이터를 적시에 사용할 수 없습니다. 어쨌든 나는 IBM의 소프트웨어 그룹이 우리를 위해 소프트웨어를 수정할 것이라고 생각하지 않습니다 :-). 어쨌든, 나는 그것이 다른 장기 프로세스에 유용한 기능 일 수 있다고 생각합니다.

현재 Type-3 프로세스 회계 레코드는 프로세스가 종료 될 때 작성됩니다. 우리가보고있는 것은 Type-N 레코드를 주기적으로 작성하는 메커니즘이며 프로세스가 여전히 활성화되어 마지막 쓰기 이후 수치를 제공합니다 (또는 이것이 프로세스가 처음으로). Chargeback 또는 Performance Monitoring Applications는 Type-3 레코드 (완전히 변경되지 않은) 또는 Interim Type-N 레코드를 사용하도록 선택할 수 있습니다. 우리가 가진 현재 해결 방법은 특정 프로세스에 대해 모니터링/Proc/PID/STAT를 모니터링하는 것이지만 실제 프로세스 회계와 잘 통합되지 않기 때문에 끔찍한 kludge입니다.

자주 (24 시간에 만족할 필요는 없음) 현재 프로세스 exit ()에서만 수행되는 작업이 프로세스 컨텍스트 스위치에서 때때로 수행해야하므로 성능 영향이있을 수 있습니다. Linus 등은 코드의 영향력이 높은 영역 일 수 있기 때문에 그 아이디어가 마음에 들지 않을 수 있습니다 (마지막 쓰기가 너무 느리기 때문에 24 시간이 있었는지 확인하더라도).

그래도 지금까지 모든 답변에 감사드립니다. 내가 어떻게 가는지 볼 것입니다. 며칠을 주시면 최고의 답변을 받아들이겠습니다.

도움이 되었습니까?

해결책

다른 무엇보다도 : 성능 버그 보고서에 집중하고 (반복 가능한 벤치 마크 포함) 올바르게 얻는 것은 사람들이 문제를 괴롭히도록 도와줍니다. 또한 테스트 후 패치를 제출하지만 위대한 패치가 잘못된 접근 방식을 사용할 수 있고 더 나은 접근 방식을 작성할 수 있다고 조심하십시오. 또는 단순히 훌륭 할 수도 있지만 수용하려면 수정이 필요할 수도 있습니다. 그리고 누군가에게 개인적으로 이메일을 보내려고 생각하지 말고 LKML이나 적절한 서브 시스템 ML을 참조하십시오.

커널 개발자에게 연락하기 전에 다른 모든 답변과 해당 자료를 읽어 보시기 바랍니다. 그리고 제출 패치의 참고 문헌도 읽으십시오. 당신이 틀렸다면 그들은 가혹 할 수 있습니다. Kernelnewbies IRC 채팅은 때로는 환경이 너무 초보자와 비슷할 수 있지만 (확실하지 않더라도, 나는 그다지 많지 않았습니다).

커널 세계가 들어 본 적이없는 사람이 기여할 수 있다고 생각하는 데 지나치게 낙관적 일 수는 있지만 알아내는 데 관심이있을 것입니다.

지나치게 낙관적이지 않습니다. 적어도 그 자체가 아닙니다. (당신의 기술을 모르기 때문에) 당신의 추상화는, 아마도 당신의 패치가 수정없이 받아 들여지거나 올바른 기술에 따라 쓰여질 것입니다. 그러나 실제로 패치가 소규모 커뮤니티로 해결되면 훨씬 쉬울 수 있습니다.

패치 제출을 고려하기 전에 경험이있는 사람 (예 : 나)에서 문제와 다른 응용 프로그램에 영향을 미치는 이유를 설명하십시오. "이것은 우리의 성능을 향상시킨다"와 같은 고려 사항, 특히 공급 업체로 자격을 갖추면 커널 개발자에게 호소력이 없습니다.

특히 그러한 진술을 생략합니다.

현재 구현을 실행 가능하지만 최적보다 적습니다.

이것은 대부분의 독자들이 즉시 "코드 수정"권장 사항을 구매하기 때문입니다.

기존 애플리케이션의 성능 (귀하가 작성하지 않음)이 영향을받는 경우 이는 다릅니다. 예를 들어, Linus가 나사로 된 코드의 커널 성능에서 수정에주의를 기울인 후에는 즉시 그 코드가 작성한 코드와 그가 할 필요가 없다는 사실을 자랑스러워하더라도 Make의 일부이기 때문에. 그 정확한 수정. 즉, 모두가 관심있는 응용 프로그램이나 단점이없는 솔루션이 필요합니다. 그래서 :

다른 (매우 일반적으로 사용되는) 응용 프로그램의 동작

해당 응용 프로그램의 사용이 비합리적인 것으로 간주되지 않는 한 좋습니다.

마지막으로, 소스 코드를 참조하는 경우, 관심있는 섹션을 보도록 요청할 수 있습니다. 코드가 존재하는 경우 코드와 관련된 문제를 생각하고 빠르게 답변하려면 미리 해결하십시오.

BTW, 이것은 내 경험에 대한 부분적인 설명입니다.https://www.ohloh.net/accounts/blaisorblade

원한다면 저에게 연락하여 제안 된 메일로 직접 도와 드릴 수 있으며 토론에 대해 CC 저를 CC합니다. 나는 꽤 바쁘지만 시간을 더 찾을 수 있습니다 :-).

다른 팁

글쎄, 당신은 읽을 수 있습니다 문서/제출 패치 Linux 커널 소스 트리에서.

큰 프로젝트에서 메인 트리에 패치를 가져 오는 가장 좋은 방법은 특정 코드를 유지하는 사람에게 연락하는 것입니다. 그러니, Linux 관리자 파일 누가 공식적으로 변경 한 코드의 관리자인지 확인하기 위해 Linux 커널 SCM 저장소 최근에 해당 코드에서 작업 한 개발자를 찾습니다. 패치가 받아 들여질 가능성을 높이기 위해 :

  • 패치가 이해하기 쉽고 기존 코드 및 문서 표준을 준수하는지 확인하십시오.
  • 패치가 무엇을 달성하는지 명확하게 설명하십시오.
  • 적절한 형식 (Linux의 Diff -UP 출력)으로 변경 사항을 제출하십시오.
  • 최신 소프트웨어 (Linux 커널) 버전에서 패치를 깨끗하게 적용 (및 작동) 할 수 있는지 확인하십시오.
  • 해결중인 문제와 패치를 해결하는 방법을 모두 보여주는 테스트 케이스를 포함하고
  • 코드에 관련이없는 코드 (예 : 형식) 변경 사항을 포함하지 마십시오.

알려진 버그에 대한 작은 수정은 한계 또는 모호한 유틸리티의 새로운 기능을 도입하는 대형 코드 변경보다 프로젝트에 통합 될 가능성이 높습니다. 경우에 따라 프로젝트의 문제 추적 데이터베이스를 통해 버그 보고서를 먼저 제출 한 다음 특정 문제를 해결하는 패치를 제출하는 것이 좋습니다. 실망을 피하기 위해 큰 변화를 생각한다면 관리자와의 변경 사항과 제안 된 구현을 논의하는 것이 좋습니다. ~ 전에 코드 작성.

문서/제출 패치를 읽고, 적절한 관리자를 찾고, 가장 중요한 것은 모든 토론이 어디에 있는지 알아보십시오. 진짜 사고. 커널 메일 링리스트 자체가 아니라 일부 하위 시스템 ML에있을 수 있습니다.

그런 다음이 ML을 구독하고 패치를 RFC로 제출하십시오.

나는 당신의 패치가 침습적인지는 모르겠지만, 각각 자신의 설명과 함께 논리적 변화의 대기열로 그것을 분할하려고 노력합니다.

나는 커널 패치를 직접 제출하려고 시도하지 않았습니다. 문서는 부족합니다 이 지역에서.

하지만 이 페이지 올바른 방향을 가리킬 수있는 것 같습니다.

편집에서는 답이 예제로서 흥미로울 수 있습니다. 나는 당신의 요구 사항이 완전히 합리적이라고 생각하지만, 컨텍스트 스위치에 대한 테스트조차 너무 비쌀 수 있습니다. 그러나 커널에는 타이머 구현이 있으므로 왜이를 피하는 데 사용될 수 없는지 모르겠습니다. 따라서 실제로 향상 요청을 제안하는 것이 가장 안전한 내기입니다. 패치 대신 버그 보고서를 보내라고 제안하는 것이 매우 적합하다는 사실에 놀랐습니다. 제출하려면 타이머를 직접 사용하도록 패치를 직접 수정할 수 있지만 여전히 토론 준비가되어 있습니다 .-) "우리는 로컬 수정 사항이 있지만 컨텍스트 스위치 빠른 경로에 약간의 테스트를 추가 할 수 있습니다. 그렇기 때문에 패치가 참조 용으로 연결되어 있지만 적용해서는 안됩니다. " 자신의 코드를 낮추는 것은 나쁜 것으로 알려져 있다면 패치에 대한 가혹한 리뷰를 피할 수 있습니다.

대안은 일부 벤치 마크를 실행하고 영향이 없다는 것을 증명하는 것이지만, 타이머가 실행 가능하다면 해당 코드가 거부되거나 타이머 솔루션을 직접 시도합니다 (더 나은 것이 존재할 수 있음). 커널 스케줄러에 사용하는 벤치 마크를 찾으십시오. CFS Ingo (또는 Kolivas?) 패치에 대한 "최근"스레드를보고 벤치 마크를 취하십시오.

지원에 관해 커널 개발자는 IBM 지원조차하지 않고 불합리한 일을한다면 "WebSphere 앱 서버"자체에 대해 신경 쓰지 않습니다. 그러나 상황에 대한 제한된 지식으로 인해 JVM을 정기적으로 종료하는 것은 의미가 없으며, 일부 메모리 누출/불안정성에 대해 종이를하는 방법 인 것처럼 보이므로 현재 동작을 뒷받침해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top