제가 만든 프로그램이 너무 CPU를 지나치게 점유하는거 같습니다.

poibe의 이미지

레뎃 9.0에서 pcap을 이용한 프로그램을 만들어서 돌리는데요,
이거이 다른 오픈소스 플그램도 이 장비에서 같이 돌고 있는데(nprobe),
제가 만든걸 돌리면, 기존에 10~20% CPU를 점유하고 있던 nprobe가 밀려나고
제가 만든것이 70%~90%식 차지합니다.

제꺼 때문에 다른 프로그램의 정상적인 동작에 문제를 일으킬까 걱정이 되는데요..
TOP으로 본 결과를 말씀드리는 겁니다.

그래서 궁금한것이.. 제가 만든 플그램으로 하여금
CPU를 적당히 나눠서 쓰게 할수 있도록 하는 그런
방법이 있는지 궁금해서요..

허접한 초보입니다.

도움 바랍니다. ㅠㅠ

Ghacker의 이미지

구조를 몰라서 잘은 모르겠지만.. IO에 관련된 프로그램에서 CPU점유율이 높아진다면..

Busy wait 방식을 사용하는 것이 아닌가 생각이 되네요.. 이런 식으로 말이죠..

while(input_channel_alive) {
    while(no_data);
    read_data();
}

만약 이런 방식이라면.. CPU가 쉬지 않고 돌면서 입력을 감시하기 때문에 CPU 점유율이 높아질 수 밖에 없습니다.

이런 경우에는 polling 방식과 같은 것으로 대체하면 점유율을 떨어뜨릴 수 있구요..

아니면... 처리하는 데이터의 단위가 너무 작아서 일 수도 있습니다.

예를 들어.. 100MB의 파일을 카피하는데.. 1byte 단위로 카피하는 코드와 1KB 단위로 카피하는 코드는 속도나 CPU 점유율면에서 많이 차이가 나겠죠..

hie의 이미지

일단 작성하신 프로그램이 동작하는 장비의 트래픽 처리량은 정확히 알 수는 없지만
윗분께서 지적하신 것을 수정하였음에도 불구하고 계속 점유율이 높다면 구현을
다른 방법을 생각해 보시는 것이 좋습니다. 제 생각에는 아마 구현전에 성능테스트를
하지 않고 바로 구현에 들어간 것 같은 생각이 드네요.

먼저 구현을 어느정도 하신것 같기에, 다른 것은 생략하고 생각나는 2가지를 말씀 드리겠습니다.
1. "promiscuous mode"로 동작하게 구현되어 있나요? 만약 IDS가 아니라면
적절한 옵션을 통해 User Mode로 올라오는 Packet의 수를 줄이는 방법도 있습니다.

2. 패킷을 처리하는 프로세스와 그 정보를 기록(I/O)하는 프로세스가 동일한가요?
프로세스를 분리하면 점유율을 낮출 수 있습니다.

그럼.. 수고하세요.

powerson의 이미지


hie님이 말씀하신 것처럼 packet, i/o 처리해주는 프로세스는 분리하는게 좋습니다. 점유율도 점유율이지만, 그보다는 kernel에서 packet을 저장해주는 버퍼의 양은 한정되어 있기 때문에 i/o를 처리하느라 시간이 오래 걸리면, packet loss가 발생할 가능성도 존재합니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.