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

현재 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
번호 제목 글쓴이 날짜 조회 수
6328 Android BSP만 제공하는 SOC에 Linux BSP로 만들려면? [2] 김민욱 2017-12-15 508
6327 리눅스 스크립트 질문입니다. [3] 하하호호하하 2017-11-07 272
6326 nxp4330 개발보드를 아직도 구매할수 있나요? [3] biokk 2017-10-31 364
6325 안드로이드 시스템 프로퍼티값을 디바이스 드라이버에서 읽을수 있나요... [1] 하하호호하하 2017-09-28 268
6324 libtool 로 라이브러리를 만드는데, [undefined reference] 에... [3] 김민욱 2017-09-06 372
6323 시절이 하도 수상해서, 문의 드립니다... [6] 김민욱 2017-08-17 650
» usb장치를 사용하는데 libusb VS kernel driver 속도에 차이가 ... [5] biokk 2017-08-01 658
6321 하나의 프로그램에서 , 녹음과 음악 play를 동시에 하기. [3] 김민욱 2017-07-12 299
6320 [4K영상받기] [3] 밥줘잉 2017-07-11 286
6319 opencl 사용가능한 soc 를 찾고 있습니다. [3] 행인1 2017-07-10 548
6318 ALSA-UTILS를 cross-compile 하려고 하는데요.자꾸 에러가 나요. [2] 김민욱 2017-07-07 1139
6317 android bluedroid 에서 sco over hci 가 안되죠? [3] 쾌도난마 2017-07-01 321
6316 2개 이상의 사운드 출력장치를 가진 시스템의 출력 우선도 설정 [1] 겟페우스 2017-06-27 253
6315 nfs 서버 구축 질문 [4] 김민욱 2017-06-10 164
6314 안드로이드 서비스 개발시 알아야 할 것들이 궁금합니다 [8] 김석원입니다. 2017-06-09 401
6313 ACPI Shutdown Signal이 들어갈때의 동작을 변경하고 싶습니다. +... [4] 겟페우스 2017-06-08 165
6312 USB GPS를 재부팅 후에도 자동으로 동작하게 하려고 합니다. [3] 겟페우스 2017-06-03 172
6311 input device에 할당된 버튼키를 제거하고 터미널에서 키보드로 대... [1] 김민욱 2017-05-25 122
6310 ppc405ep serial 질문 [3] marmar 2017-04-13 235
6309 usb device 구조 질문 [2] ydgoo9 2017-04-12 256

사용자 로그인