Skip to content
Snippets Groups Projects
  • Thomas Watson's avatar
    96991e65
    console: usb: kbd: Limit poll frequency to improve performance · 96991e65
    Thomas Watson authored
    
    Using the XHCI driver, the function `usb_kbd_poll_for_event` takes
    30-40ms to run. The exact time is dependent on the polling interval the
    keyboard requests in its descriptor, and likely cannot be significantly
    reduced without major rework to the XHCI driver.
    
    The U-Boot EFI console service sets a timer to poll the keyboard every 5
    microseconds, and this timer is checked every time a block is read off
    disk. The net effect is that, on my system, loading a ~40MiB kernel and
    initrd takes about 62 seconds with a slower keyboard and 53 seconds
    with a faster one, with the vast majority of the time spent polling the
    keyboard.
    
    To solve this problem, this patch adds a 20ms delay between consecutive
    calls to `usb_kbd_poll_for_event`. This is sufficient to reduce the
    total loading time to under half a second for both keyboards, and does
    not impact the perceived keystroke latency.
    
    Signed-off-by: default avatarThomas Watson <twatson52@icloud.com>
    96991e65
    History
    console: usb: kbd: Limit poll frequency to improve performance
    Thomas Watson authored
    
    Using the XHCI driver, the function `usb_kbd_poll_for_event` takes
    30-40ms to run. The exact time is dependent on the polling interval the
    keyboard requests in its descriptor, and likely cannot be significantly
    reduced without major rework to the XHCI driver.
    
    The U-Boot EFI console service sets a timer to poll the keyboard every 5
    microseconds, and this timer is checked every time a block is read off
    disk. The net effect is that, on my system, loading a ~40MiB kernel and
    initrd takes about 62 seconds with a slower keyboard and 53 seconds
    with a faster one, with the vast majority of the time spent polling the
    keyboard.
    
    To solve this problem, this patch adds a 20ms delay between consecutive
    calls to `usb_kbd_poll_for_event`. This is sufficient to reduce the
    total loading time to under half a second for both keyboards, and does
    not impact the perceived keystroke latency.
    
    Signed-off-by: default avatarThomas Watson <twatson52@icloud.com>