Perform a bisect test to identify the kernel problem (by quqi99)

原创 2016年12月15日 21:19:35

*作者:张华 发表于:2016-12-15
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
( http://blog.csdn.net/quqi99 )*

例子

sriov在Xenial上不work, https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1633634

步骤

  1. 先测Xenial最新的Ubuntu Kernel 4.4.0.57.60 (sudo apt-cache policy linux-image-generic-lts-xenial)。如果它没有问题,说明Upstream Kernel中的fixed patch已经被backport到了Ubuntu Xenial Kernel;如果它也有问题,一般需要在Upstream Kernel里bisect
  2. 初略扫描代码
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
git log --since="2015-06-21 22:05:43" --before="2015-07-05 11:01:52" --oneline --no-merges |wc -l
#filter by commit's author date rather than commit date, commit date may change when merging branch
git log --since="2015-06-21 22:05:43" --before="2015-07-05 11:01:52" --format="%ad %h %s" --date=iso --no-merges > diff
#Unfortunately, 'git log b953c0d..d770e55' or 'git log tag1..tag2' is not guaranteed to work
#because those commits may be in different branches.
#'..' means all of the commits that are in the v4.2-rc1 branch, but aren’t in the v4.1 branch
#git log --no-merges --oneline v4.1..v4.2-rc1 > diff
  1. 在Upstream Kernel (http://kernel.ubuntu.com/~kernel-ppa/mainline/)中继续bisect确定问题出在4.1和4.2-rc1之间. 参考:https://wiki.ubuntu.com/KernelTeam/GitKernelBuild
git bisect start
git bisect bad v4.2-rc1
git bisect good v4.1

git checkout bisect/bad
#git bisect log > bisectlog
git bisect reset
#git bisect replay bisectlog

sudo apt-get install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache
cp /boot/config-`uname -r` .config   #or make menuconfig 
make localmodconfig                  #speed compiling time for test by just using existing module config
make clean
yes '' | make oldconfig              #bring the config file up to date.
make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-custom
#make drivers/usb/ehci.ko            #just build a module
  1. (optional) sriov test method
$ cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.1.36-040136-generic root=UUID=70f8e4d5-1773-4bb9-9dcc-f46ac966ebac ro pci-stub.ids=8086:10ca apparmor=0 intel_iommu=pt intel_iommu=on pci=assign-busses

ln -s /etc/apparmor.d/usr.sbin.libvirtd  /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper  /etc/apparmor.d/disable/
apparmor_parser -R  /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R  /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

sudo dmesg |grep -e DMAR -e IOMMU
sudo lspci |grep 82576
sudo virsh nodedev-list --tree 
find /sys/kernel/iommu_groups/ -type l

readlink -f /sys/bus/pci/devices/0000:07:10.2/iommu_group
echo 0000:07:10.2 > /sys/bus/pci/devices/0000:07:10.2/driver/unbind
echo 0000:07:10.2 > /sys/bus/pci/drivers/vfio-pci/bind
echo "8086 10ca" > /sys/bus/pci/drivers/vfio-pci/new_id

sudo tailf /var/log/libvirt/qemu/openstack.log
sudo virsh attach-device openstack /root/new-device.xml --live --config
$ sudo cat /root/new-device.xml
<hostdev mode='subsystem' type='pci' managed='yes'>
 <source>
   <address domain='0x0000' bus='0x07' slot='0x10' function='0x3'/>
 </source>
</hostdev>
  1. Fixed patch找到了的SRU问题,Upstream Kernel有LTS(https://www.kernel.org/category/releases.html), Ubuntu Kernel也有LTS(https://wiki.ubuntu.com/Kernel/LTSEnablementStack)。
    a) 如对于Xenial, Ubuntu Kernel是v4.4, 而v4.4也是Upstream LTS Kernel,所以需要将Fixed patch先backport到Upstream Kernel v4.4,而Ubuntu LTS Kernel会定期从Upstream LTS Kernel里拉,所以就不需要backport到Ubuntu kernel了。
    b) 如对于trusty, Ubuntu Kernel是3.13, 该版本不是Upstream LTS Kernel,故需直接backport到Ubuntu Kernel v3.13即可(https://wiki.ubuntu.com/KernelTeam/KernelUpdates

参考

[1] https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
[2] https://wiki.ubuntu.com/Kernel/Dev/KernelGitGuide
[3] https://wiki.edubuntu.org/Kernel/Dev/KernelBugFixing
[4] https://wiki.ubuntu.com/KernelTeam/KernelUpdates
[5] https://wiki.ubuntu.com/Kernel/Dev/StablePatchFormat
[6] https://wiki.ubuntu.com/KernelTeam/GitKernelBuild

版权声明:本文为博主原创文章,如需转载,请注明出处!

Test OpenStack SRIOV (by quqi99)

**作者:张华 发表于:2016-12-06 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ...
  • quqi99
  • quqi99
  • 2016年12月06日 16:10
  • 1338

How to debug QEMU (by quqi99)

**作者:张华 发表于:2016-08-11 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ...
  • quqi99
  • quqi99
  • 2016年08月11日 15:14
  • 1321

Test multipath feature by hand (by quqi99)

**作者:张华 发表于:2017-02-16 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ...
  • quqi99
  • quqi99
  • 2017年02月16日 19:07
  • 509

调研NFV编排工具(by quqi99)

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99)裸机配置工具 Cobbler, Dell开源的基于PX...
  • quqi99
  • quqi99
  • 2017年11月10日 22:31
  • 221

使用rsync同步数据(by quqi99)

作者:张华  发表于:2015-12-28版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )急需使用r...
  • quqi99
  • quqi99
  • 2015年12月28日 14:40
  • 2172

Neutron DVR实现multi-host特性打通东西南北流量提前看(by quqi99)

作者:张华  发表于:2014-03-07 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 )  ...
  • quqi99
  • quqi99
  • 2014年03月07日 15:17
  • 9391

三种方式使用vlan (by quqi99)

作者:张华  发表于:2016-04-22版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )Use O...
  • quqi99
  • quqi99
  • 2016年04月22日 11:53
  • 5659

定制你自己的Linux系统 ( by quqi99 )

定制你自己的Linux ( by quqi99 ) 作者:张华  发表于:2013-09-21 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http...
  • quqi99
  • quqi99
  • 2013年09月21日 09:26
  • 8681

为什么openstack中的oslo模块总喜欢发生代码冲突? (by quqi99)

作者:张华  发表于:2014-02-02版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99 )      ...
  • quqi99
  • quqi99
  • 2015年02月02日 14:50
  • 6016

使用免费的类似于花生壳的动态DNS服务访问家中内网机器(by quqi99)

家里的ip是内网地址,adsl路由器上的公网ip是变化的,所以有花生壳之类的程序来提供动态dns解析功能(它提供一个二级域名,同时硬件路由器在公网ip变动之后向它的dns解析器更新,同时硬件路由器应该...
  • quqi99
  • quqi99
  • 2014年05月05日 22:27
  • 7610
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Perform a bisect test to identify the kernel problem (by quqi99)
举报原因:
原因补充:

(最多只允许输入30个字)