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

현재 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
6328 이솦보드 palette세팅중 3번째 질문(kelp에서 kozicozi님의 질문... [4] 고현철 2006-04-05 6937
6327 커널패닉 - 묵혀놓은 보드 꺼내들고 집에 셋팅하는데 잘 안되네요... [10] 조준동 2006-04-24 6701
6326 RVDS 2.2 설치 [6] 한영민 2008-12-31 6529
6325 exynos 5250 Arndale board의 Generic Timer 사용에 대해 질문... [5] 흰둥아놀자 2013-07-24 6408
6324 linaro ubuntu 사용중입니다 춤선생 2013-12-24 6390
6323 그래픽 카드 혹은 컨트롤러 드라이버 개발 How-to [2] Journeyer 2009-12-11 6284
6322 NAND bad sector가 새로 발생했을 때… [1] 오르다 2015-07-31 6267
6321 [질문] u-boot 및 루트 파일 시스템 <= 완료 [4] 안정섭 2006-04-16 6252
6320 exynos5250 질문이여. [7] 해황 2012-12-06 6141
6319 wifi 에러 문제관련하여 질문드립니다. [1] 텅빈깡통 2010-08-27 6138
6318 풀업/풀다운 저항값은 왜 다른가요? [6] 비둘기사냥꾼 2012-09-14 6135
6317 S5PC111과 S5PC110의 차이점은 무엇인가요 [2] Nabula 2010-07-24 5999
6316 ODROID FROYU 업그레이드 문의 드립니다. [1] 추억만이 2010-10-08 5693
6315 [질문] LX-800 과 ARM의 차이...[완료] [8] 김성주 2007-03-27 5670
6314 [질문] LX800 을 처음 사용하기 위한 초기 준비 및 비용은?[완료... [6] 임은향 2007-04-09 5630
6313 Wifi 관련 문의드립니다. [3] Tommy 2010-07-24 5483
6312 S3C6410의 장단점에 대해... [10] 주의이름으로 2009-02-04 5401
6311 MP2530에 OpenOCD와 FT2232를 이용해 JTAG 연결중 [4] 박성철 2009-02-15 5292
6310 [Android] play 스토어 설치 관련 [2] wizard14 2013-03-21 5272
6309 DNW 관련 ... [1] 고도리 2007-10-31 5207

사용자 로그인