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

현재 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 flow control에 관해서 여쭤 보고자 합니다. 열심히 2015-06-17 113
6367 android uenvt에 내용을 추가 했는데요 맞는 방법인가요? [1] pedor11 2015-05-20 121
6366 input device에 할당된 버튼키를 제거하고 터미널에서 키보드로 대... [1] 김민욱 2017-05-25 122
6365 camera HAL시 퍼미션을 얻을 수 있는가요? [2] 조신 2015-11-18 147
6364 압력센서 신호처리 관련하여 문의드립니다. [3] kernel_study 2016-11-03 148
6363 [apt pkg server 관련] [2] 밥줘잉 2016-10-20 150
6362 nfs 서버 구축 질문 [4] 김민욱 2017-06-10 164
6361 ACPI Shutdown Signal이 들어갈때의 동작을 변경하고 싶습니다. +... [4] 겟페우스 2017-06-08 165
6360 SoM GPIO 제어 문의 [1] 단순최고 2021-01-25 168
6359 USB GPS를 재부팅 후에도 자동으로 동작하게 하려고 합니다. [3] 겟페우스 2017-06-03 172
6358 touch screen관련 여쭤봅니다. [1] 열심히 2015-07-25 173
6357 virtualbox에 안드로이드가 잘 안도네요 [1] 더미원 2017-03-20 180
6356 2440 보드의 address 신호와 소스상의 주소를 어떻게 이해 하고 있... [2] DavidKim 2015-07-29 181
6355 i.mx6q에서 libvpu.so 라이브러리를 사용하여 link시에 undefined ... [1] 이동희 2019-08-09 182
6354 udev 를 이용하여 /dev 사용권한을 변경할수 있나요? [1] pedor11 2015-11-18 185
6353 키이벤트 관련 질문드립니다. [3] 하하호호하하 2015-10-06 188
6352 Alto 4330 보드에서 sdcard의 리눅스 커널로 부팅하는 방법 [2] 포도씨 2016-11-18 192
6351 밑의 LCD 포팅 질문드렸었는데 추가 질문이 있습니다. [2] ImYeol 2015-08-13 193
6350 check_usb_vfs("/dev/bus/usb") 에러 [1] 생생맥주 2015-01-25 200
6349 smsc9220 질문 file [2] *김종원 2015-07-24 203

사용자 로그인