[sane-devel] Scanner Button Daemon [scanbd]: high CPU utilization

Wilhelm wilhelm.meier at fh-kl.de
Fri Nov 25 10:16:48 UTC 2011


Hi Rastislav,

(sorry for calling you wrong last time)

Am 25.11.2011 10:35, schrieb Rastislav David:
> Hello Wilhelm,
>
> thank You for responding so quickly.

you're welcome

>
> I've closed point 2) where I've found that button called Pdf is found with filter file.

good to here!
>
> I've attached scanbd.conf in my last email but I guess it didn't go through.

looks good.

I think there problem is, that with debian-testing we get a new libudev 
with a non-blocking behaviour for the udev_monitor_receive_device() 
function.

I'll fix that upstream, when I discover how to switch back to the 
blocking behaviour.

In the mean time you can compile sanbd without libudev as said in the 
last email.

So, stay tuned.

>
> Here is scanbd.conf I'm using now:
>
> global {
>          debug   = true
>          debug-level = 1
>          user    = saned
>          group   = scanner
>          saned   = "/usr/sbin/saned"
>          saned_opt  = {}
>          saned_env  = { "SANE_CONFIG_DIR=/etc/scanbd" }
>          scanbuttond_backends_dir = "/usr/local/etc/scanbd/scanbuttond/backends"
>          timeout = 400
>          pidfile = "/var/run/scanbd.pid"
>          environment {
>                  device = "SCANBD_DEVICE"
>                  action = "SCANBD_ACTION"
>          }
>          function function_knob {
>                  filter = "^message.*"
>                  desc   = "The value of the function knob / wheel / selector"
>                  env    = "SCANBD_FUNCTION"
>          }
>          function function_mode {
>                  filter = "^mode.*"
>                  desc   = "Color mode"
>                  env    = "SCANBD_FUNCTION_MODE"
>          }
>          multiple_actions = true
>          action scan {
>                  filter = "^scan.*"
>                  numerical-trigger {
>                          from-value = 1
>                          to-value   = 0
>                  }
>                  desc   = "Scan to file"
>                  script = "/etc/scanbd/action.script"
>          }
>          action email {
>                  filter = "^email$"
>                  string-trigger {
>                          from-value  = ""
>                          to-value    = "^email.*"
>                  }
>                  desc   = "Scan to email"
>                  script = "/etc/scanbd/action.script"
>          }
>          action copy {
>                  filter = "^copy$"
>                  string-trigger {
>                          from-value  = ""
>                          to-value    = "^copy.*"
>                  }
>                  desc   = "Copy to printer"
>                  script = "/etc/scanbd/test.script"
>          }
>          action pdf {
>                  filter = "^file$"
>                  numerical-trigger {
>                          from-value = 1
>                          to-value   = 0
>                  }
>                  desc   = "Pdf"
>                  script = "/etc/scanbd/action.script"
>          }
>          action preview {
>                  filter = "^preview$"
>                  numerical-trigger {
>                          from-value = 1
>                          to-value   = 0
>                  }
>                  desc   = "Preview"
>                  script = "/etc/scanbd/action.script"
>          }
>          action globaltest {
>                       filter = "^message.*"
>                       desc   = "Test (print all env vars)"
>                       script = "/etc/scanbd/test.script"
>          }
> }
> device fujitsu {
>         filter = "^fujitsu.*"
>         desc = "Fujitsu: Test"
>         function function_knob {
>                  filter = "^function.*"
>                  desc   = "The value of the function knob / wheel / selector"
>                  env    = "SCANBD_FUNCTION"
>         }
>         action paperload {
>                      filter = "^page-loaded.*"
>                      desc   = "page loaded"
>                      numerical-trigger {
>                              from-value = 0
>                              to-value   = 1
>                      }
>                      script = ""
>         }
>         action paperunload {
>                      filter = "^page-loaded.*"
>                      desc   = "page unloaded"
>                      numerical-trigger {
>                              from-value = 1
>                              to-value   = 0
>                      }
>                      script = ""
>        }
>         action coveropen {
>                      filter = "^cover-open.*"
>                      desc   = "cover open"
>                      numerical-trigger {
>                              from-value = 0
>                              to-value   = 1
>                      }
>                      script = ""
>         }
>         action powersave {
>                      filter = "^power-save.*"
>                      desc   = "power save"
>                      numerical-trigger {
>                              from-value = 0
>                              to-value   = 1
>                      }
>                      script = ""
>         }
> }
> device snapscan {
>         filter = "(.*snapscan.*|.*Perfection.*)"
>         desc = "Epson"
>         action test {
>                filter = "^message.*"
>                desc   = "Test"
>                script = "/usr/local/etc/scanbd/example.script"
>         }
>         action web {
>                filter = "^web.*"
>                desc   = "Web"
>                script = "/usr/local/etc/scanbd/example.script"
>         }
>         action send {
>                filter = "^send.*"
>                desc   = "Send"
>                script = "/usr/local/etc/scanbd/example.script"
>         }
> }
> device hp {
>         filter = "^hpaio.*"
>         desc = "HP"
>         action test {
>                filter = ".*scan.*"
>                desc   = "Test"
>                script = "/usr/local/etc/scanbd/example.script"
>         }
> }
> device avision {
>         filter = "^avision.*"
>         desc = "Avision Scanner"
>         action duplex-test {
>                filter = "^message.*"
>                desc   = "Avision: Duplex Test"
>                script = "/usr/local/etc/scanbd/test.script"
>                string-trigger {
>                               from-value  = ""
>                               to-value    = "^.:duplex"
>                }
>         }
> }
>
> ----- Original Message -----
> From: Wilhelm<wilhelm.meier at fh-kl.de>
> To: Rastislav David<rasto at ynet.sk>
> Cc: sane-devel at lists.alioth.debian.org
> Sent: Fri, 25 Nov 2011 07:45:58 +0100 (CET)
> Subject: Re: [sane-devel] Scanner Button Daemon [scanbd]: high CPU utilization
>
> Hi David,
>
> Am 24.11.2011 21:49, schrieb Rastislav David:
>> Hello all,
>>
>> I've succesfully compiled scanbd for my Canon CanoScan LiDE 110 on my
>> ARM powered NAS Linksys DNS-323 running Debian Wheezy.
>>
>> It works :) however there are few issues.
>> 1) scanbd is using 100% of CPU load and thus misses some button presses
>
> looks like a config problem: please post your scanbd.conf
>
>> 2) does not react on Pdf button (nothing logged into console when
>> pressed) There are 4 buttons. [Pdf Auto-Scan Copy Email]
>
> we must check the log-file to find out the name of the pdf-button
>
>>
>> If I start daemon with: ./scanbd -df -c scanbd.conf
>>
>> I see:
>>
>> ./scanbd: debug on: level: 7
>> ./scanbd: dropping privs to uid saned
>> ./scanbd: dropping privs to uid scanner
>> ./scanbd: group scanner has member:
>> ./scanbd: saned
>> ./scanbd: drop privileges to gid: 104
>> ./scanbd: Running as effective gid 104
>> ./scanbd: drop privileges to uid: 110
>> ./scanbd: Running as effective uid 110
>> ./scanbd: dbus_init
>> ./scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'
>> ./scanbd: sane version 1.0
>> ./scanbd: Scanning for local-only devices
>> ./scanbd: found device: genesys:libusb:001:011 Canon LiDE 110 flatbed
>> scanner
>> ./scanbd: start_sane_threads
>> ./scanbd: Starting poll thread for genesys:libusb:001:011
>> ./scanbd: Thread started for device genesys:libusb:001:011
>> ./scanbd: sane_poll
>> ./scanbd: start udev thread
>> ./scanbd: timeout: 400 ms
>> ./scanbd: udev thread started
>> ./scanbd: Iteration on dbus call
>> ./scanbd: no device from udev
>> ./scanbd: no device from udev
>> ....
>> 300x / second
>> ./scanbd: no device from udev
>> ./scanbd: no device from udev
>> ./scanbd: no device from udev
>> ./scanbd: no device from udev
>> ./scanbd: no device from udev
>> ./scanbd: found 41 options for device genesys:libusb:001:011
>> ./scanbd: sane_find_matching_options
>> ./scanbd: found 5 actions in section (null)
>> ./scanbd: checking action scan with filter: ^scan.*
>> ./scanbd: found active option[2] mode (type: 3) for device
>> genesys:libusb:001:01
>> 1
>> ./scanbd: found active option[4] preview (type: 0) for device
>> genesys:libusb:001
>> :011
>> ./scanbd: found active option[5] depth (type: 1) for device
>> genesys:libusb:001:0
>> 11
>> ./scanbd: found active option[6] resolution (type: 1) for device
>> genesys:libusb:
>> 001:011
>> ./scanbd: found active option[8] tl-x (type: 2) for device
>> genesys:libusb:001:01
>> 1
>> ./scanbd: found active option[9] tl-y (type: 2) for device
>> genesys:libusb:001:01
>> 1
>> ./scanbd: found active option[10] br-x (type: 2) for device
>> genesys:libusb:001:011
>> ./scanbd: found active option[11] br-y (type: 2) for device
>> genesys:libusb:001:011
>>
>>
>> these "no device from udev" messages are generated about 300/s which I
>> think is causing high CPU utilization.
>
> That's strange: did not see this before :-(
>
>>
>> in scandb.conf I left all devices as they were and for actions scan
>> email and copy I've changed script to /etc/scanbd/action.script.
>> This script works fine for said 3 buttons.
>>
>> Can You help where could be the issue with High CPU utilization?
>> Is there some problem with configuration?
>
> I think this has to to with the libudev. You can disable libudev at
> compile-time (and using hald if you want) loosing the capability to
> dynamically add scanners. Can you give this a try, please?
>
>>
>> Rastislav
>>
>> P.S: for scanbd to compile I had to change
>> -I/usr/local/include/dbus-1.0/include to
>> -I/usr/lib/arm-linux-gnueabi/dbus-1.0/include
>>
>>
>>
>
>


-- 
Wilhelm




More information about the sane-devel mailing list