기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

현재 usb장치의 데이터를 libusb를 이용하여 실시간 데이터를 얻는데 cpu load가 대략 20%정도 소요됩니다.

해당부분을 개선할 방법이 있지않을까 싶어서 생각해봤는데 libusb를  usb device driver 로 제작하여 사용하면 성능을 더 개선할수 있을까요??


libusb 사용하다가 usb device driver를 제작하여 사용하면 더 효율적일까요?



쾌도난마

2017.08.02 07:47:45
*.108.69.198

실제 해보지 않았지만

제가 생각 했을 때 속도는 그렇게 차이가 없을 것으로 보입니다.

kernel 내 usb interface driver 로 만든다면 좀더 빠를 것이라는 보편적인 생각은 있지만

system call 1-2개 차이로 보입니다. 

kernel 내에서 구현한다면 file operation 및 기타 device driver 관련된 처리를 해야 하기 때문에

구현하고 난 뒤에 속도 개선이 없으면 쓸모없는 일을 한게 되어버리지 않을까요?

먼저 cpu load 가 걸리는 포인트를 정확히 측정 하셔야 된다고 봅니다.


class 를 벗어난 회사 전용의 interface를 설계 하셨기 때문에 

libusb 를 사용하셨을거라 봅니다.

(class 에 포함 된다면 대부분 kernel 내에 driver 가 있기 때문에 이렇게 추측 했습니다.)


usb 통신으로 오는 data는 아마도 max rate 가 있을 것이고

이 data를 처리하는 부분은 kernel 내에 이미 다 구현 되고 처리 되고 있습니다.


시스템이 느려서 혹은 usb host 컨트롤러 드라이버가 삐꾸여서 data를 처리하는데 있어서 애를 먹는다면 

kernel 로 옮기던지 userspace에서 구현하던지 별 효과는 없을 것이라 확실하게 판단 됩니다.


data를 파싱하는데 있어서 대부분의 cpu를 소비하고 계시는것 아닌지요?


간단하게 data 파싱하는 부분을 막고 usb 로 부터 오는 data를 그냥 bypass 만 시켜서

cpu load 가 얼마나 걸리는지 먼저 한번 살펴 보세요.

biokk

2017.08.13 20:56:08
*.150.142.33

친절한 답변 감사드립니다.

kernel 쪽으로 새로 만들게 되면 시간이 많이 걸려서...최대한 안하려고생각되는데요

리소스가 어디서 많이 잡아먹는지 확인이 필요할것 같습니다

고도리

2017.08.02 09:09:50
*.197.16.108

주요 로드가 어디서 걸리는지 체킹을 해 보시는게 좋겠네요.


제 경험상, 커널이 빠르긴 할걸로 보여집니다.

통상 userspace로 데이터 복사하는데 많은 부분을 소진하기 때문입니다.


profiling을 해 보시기 바랍니다.



biokk

2017.08.13 20:58:10
*.150.142.33

답변감사드립니다.

kernel 이 빠를것 같긴한데 커널드라이버는 예전 GPIO예제만 해보고..느낌만 아는정도라 다시 해봐야 겠네요

Jazzguitar

2017.11.08 23:18:38
*.122.242.77

주고 받는 데이터가 크지 않고 실시간으로 확인만 하면 된다면 USB Bulk device driver로도 충분합니다.


usb driver의 skeleton드라이버 강추합니다. (tty 같은 복잡한 layer는 naver..)

http://elixir.free-electrons.com/linux/v4.13.11/source/drivers/usb/usb-skeleton.c#L435


주의 해야 할점은 bulk driver의 경우에 zero length packet 핸들링을 하지 않기 때문에 

http://elixir.free-electrons.com/linux/v4.13.11/source/include/linux/usb.h#L1296 아래 옵션을 urb_transfer_flag에 추가하세요.


그러면 usb core에서 zero length packet에 대해서 알아서 핸들링해줄 겁니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6368 Apple TV 온보드 메모리 변경 가능할까요? [1] 당그니 2011-01-20 94720
6367 android pwm backlight 밝기 제어 [4] 김태영 2011-07-28 54793
6366 com.google.android.maps.jar는 어디서 얻는 것인가요??? [2] 천동이 2014-09-02 52281
6365 USB bluetooth dongle on jellybean [4] 신현호 2014-02-21 50303
6364 우분투 리눅스 ip 변경 도중에 "No such process" [5] 이세종 2009-04-01 45751
6363 OpenOCD 0.2.0 [1] 김광준 2009-10-24 44507
6362 [질문]memset, mmap, memcpy에 대해서 질문 있습니다. [5] 이태간 2007-05-22 44467
6361 libpcap 설치 [1] Apostasy 2011-04-12 43648
6360 램디스크 파일 시스템 만들기 [4] sinwho 2015-08-19 43255
6359 USB 포팅관련 질문드립니다. [1] 김승한 2010-01-07 33297
6358 android에 libusb porting 해보신 분?? [2] 꿈의사람 2014-02-13 29615
6357 오드로이드 배터리 패치 문의 [1] 이종문 2010-07-01 29035
6356 ODROID-T 2.2 셧다운 후 부팅이 안됩니다. [2] shkim 2010-10-02 26869
6355 오드로이드 디버깅이 안되네요... [2] 현쓰 2010-02-01 26577
6354 [질문]wince 이미지 다운로드시 에러 [3] 이태간 2008-04-06 26265
6353 slide event에 따른 landscape & portrait mode 전환 [1] 나영찬 2010-03-25 24595
6352 Andorid ALSA에 관해서...2 [1] 꺼북이 2011-05-18 24016
6351 wm1811 드라이버를 찾아요 [9] 김민욱 2016-11-01 18737
6350 이더넷 핀에서 값을 읽어 오고 싶은데요... [2] rubio 2013-07-09 13050
6349 usb host api 가 리눅스단에서도 사용가능한가요? [1] biokk 2014-02-07 11392

사용자 로그인