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

Rastislav David rasto at ynet.sk
Fri Nov 25 12:49:05 UTC 2011


----- Wilhelm <wilhelm.meier at fh-kl.de> wrote:
> 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.

Yes.
Compiled without UDEV and HAL now scanbd works as expected. 
scanbd is now behaving nicely with prety low CPU utilization :)

Your guess at libdev was most likely correct.

> 
> So, stay tuned.

Fingers crossed.

> 
> >
> > 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