점 도와주세요~~커널모드에서 syscall을 호출하려는데요~~
글쓴이: 토끼아빠 / 작성시간: 월, 2008/02/18 - 5:20오후
안녕하세요~~
난감한 문제와 부닥쳐서 그러는데요
네트워크로 들어오는 데이터를 패킷 캡쳐로 받아서 파일로 쓰기 하려고 합니다.
그런데 데이터는 70mbps이상으로 미치게도 빠른 속도로 들어오는군요..
이걸 패킷 하나도 유실하지 않고 수신을 하려고 하니 속도상 문제가 많이 제기됩니다.
그래서 드라이버에서 직접 파일오퍼레이션 하려고 하는데 커널 2.6으로 업그레이드되면서부터
커널모드에서 시스콜을 호출하지 못하게 만들어놓았다고 하네요..
무슨 방도가 없는지요?
여러 고수님들께 부탁드립니다...
Forums:
제 생각에는..
loadable 모듈을 하나 만든 다음에..
그곳에서 read나 write 명령단의 제어를
재정의(안하셔도.. read나 write를 그대로 사용하셔도 됩니다)하시고.. 해당 모듈의 재정의 function을
EXPORT_SYMBOL로 등록한 다음에 커널 컴파일을 다시하고 load 시킵니다.
그러면 쓰실수 있는 방법이 있을듯도 합니다..
또는..
proc filesystem을 쓰시는 겁니다..
의외로 성능과 크게 관련이 없기때문에...
많이 쓰입니다.. 디버깅이나 모니터용으로 쓰이죠..
proc filesystem 사용 방법은 kldp wiki를 잘 찾아보시면 나와있을것 같구요..
proc filesystem을 사용하는게 윗 방법보다는 손이 덜 갈수도 있겠군요...
먼저 검색!
먼저 검색! 부탁드립니다.
http://kldp.org/node/79725
OTL
님들의 답글 고맙게
님들의 답글 고맙게 읽어보았습니다...
그런데 아직 신통한 방법은 없군요~~
앞으로도 잘 부탁드립니다...
좋은 하루 되세요!!
신통한 방법이라뇨
신통한 방법이라뇨 ?
위의 링크 댓글에 적혀있는 내용은 공식적으로는 커널 모드에서 할 수 있는 유일한 방법입니다.
가능하면, 파일시스템 자체를 사용하지 말고 block device 에 raw write 를 하는 방법을 개발하세요.
어플리케이션에 /dev/sda4 등을 open() 해서 그냥 파일처럼 읽고 쓰면 됩니다.
realtime 최대의 적은 network 과 block device 임을 명심하시고요.
OTL
bushi님의 글 고맙게
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()매크로를 이용하는 방법은 쓰지 말라고 하네요..
제가 왕초보라서 이론이 부족하여 대용량데이터 쓰기시 스택절환에서 문제가 발생되겠는지 되지 않겠는지 판단이 안됩니다.
그래서 지금 이론연구를 하고있는중이예요.
제가 신통한 방법이 없다고 한것은 이런 이유에서죠..
님께 다소나마 거슬렸다면 사과드립니다..
앞으로도 많은 어드바이스 부탁드립니다.
좋은 하루 되세요!!
댓글 달기