점 도와주세요~~커널모드에서 syscall을 호출하려는데요~~

토끼아빠의 이미지

안녕하세요~~
난감한 문제와 부닥쳐서 그러는데요
네트워크로 들어오는 데이터를 패킷 캡쳐로 받아서 파일로 쓰기 하려고 합니다.
그런데 데이터는 70mbps이상으로 미치게도 빠른 속도로 들어오는군요..
이걸 패킷 하나도 유실하지 않고 수신을 하려고 하니 속도상 문제가 많이 제기됩니다.
그래서 드라이버에서 직접 파일오퍼레이션 하려고 하는데 커널 2.6으로 업그레이드되면서부터
커널모드에서 시스콜을 호출하지 못하게 만들어놓았다고 하네요..
무슨 방도가 없는지요?
여러 고수님들께 부탁드립니다...

coremaker의 이미지

loadable 모듈을 하나 만든 다음에..
그곳에서 read나 write 명령단의 제어를
재정의(안하셔도.. read나 write를 그대로 사용하셔도 됩니다)하시고.. 해당 모듈의 재정의 function을

EXPORT_SYMBOL로 등록한 다음에 커널 컴파일을 다시하고 load 시킵니다.
그러면 쓰실수 있는 방법이 있을듯도 합니다..

또는..

proc filesystem을 쓰시는 겁니다..
의외로 성능과 크게 관련이 없기때문에...
많이 쓰입니다.. 디버깅이나 모니터용으로 쓰이죠..

proc filesystem 사용 방법은 kldp wiki를 잘 찾아보시면 나와있을것 같구요..
proc filesystem을 사용하는게 윗 방법보다는 손이 덜 갈수도 있겠군요...

bushi의 이미지

먼저 검색! 부탁드립니다.

http://kldp.org/node/79725

OTL

토끼아빠의 이미지

님들의 답글 고맙게 읽어보았습니다...
그런데 아직 신통한 방법은 없군요~~
앞으로도 잘 부탁드립니다...

좋은 하루 되세요!!

bushi의 이미지

신통한 방법이라뇨 ?
위의 링크 댓글에 적혀있는 내용은 공식적으로는 커널 모드에서 할 수 있는 유일한 방법입니다.

가능하면, 파일시스템 자체를 사용하지 말고 block device 에 raw write 를 하는 방법을 개발하세요.
어플리케이션에 /dev/sda4 등을 open() 해서 그냥 파일처럼 읽고 쓰면 됩니다.

realtime 최대의 적은 network 과 block device 임을 명심하시고요.

OTL

토끼아빠의 이미지

bushi님의 글 고맙게 읽었습니다.
그대로 작성하여 실현도 되었구요..
단 kernel space와 user space사이의 스택절환이 걱정되는군요...
저는 커널모드에서 대용량(100기가이상)의 데이터를 받아서 쓰기해야 하거든요...
"http://wiki.kldp.org/wiki.php/%C4%BF%B3%CE%B3%BB%BF%A1%BC%ADReadWrite%BB%E7%BF%EB%C7%CF%B1%E2"
윗글을 읽어보면 set_fs()매크로를 이용하는 방법은 쓰지 말라고 하네요..
제가 왕초보라서 이론이 부족하여 대용량데이터 쓰기시 스택절환에서 문제가 발생되겠는지 되지 않겠는지 판단이 안됩니다.
그래서 지금 이론연구를 하고있는중이예요.
제가 신통한 방법이 없다고 한것은 이런 이유에서죠..
님께 다소나마 거슬렸다면 사과드립니다..
앞으로도 많은 어드바이스 부탁드립니다.

좋은 하루 되세요!!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.