README.kernel_config
1 ---------------------------------
2 Enable CODE COVERAGE for your Kernel:
3 ---------------------------------
4 1) Apply kernel-gcov patch(s) against the corresponding Kernel. They are available here:
5 http://ltp.cvs.sourceforge.net/viewvc/ltp/utils/analysis/gcov-kernel/linux-2.*.*-gcov.patch?view=log,
6 2) Also enable the following options in your .config file before building the kernel
7 CONFIG_GCOV_PROFILE=y
8 CONFIG_GCOV_ALL=y
9 CONFIG_GCOV_PROC=m
10 CONFIG_GCOV_HAMMER=y
11
12 ---------------------------------
13 Enabling Kernel Configuration to test Containers/Namespaces
14 ---------------------------------
15 CONFIG_NAMESPACES=y
16 CONFIG_UTS_NS=y
17 CONFIG_IPC_NS=y
18 CONFIG_USER_NS=y
19 CONFIG_PID_NS=y
20 CONFIG_NET_NS=y
21 CONFIG_VETH=y
22 CONFIG_MACVLAN=y
23
24 The IPC namespaces do not automatically enable IPC, so you may
25 also want to have:
26
27 CONFIG_SYSVIPC=y
28 CONFIG_SYSVIPC_SYSCTL=y
29 CONFIG_POSIX_MQUEUE=y
30
31 ---------------------------------
32 Enabling Kernel Configuration to test Controllers
33 ---------------------------------
34 CONFIG_CGROUPS=y
35 CONFIG_CGROUP_DEBUG=y
36 CONFIG_CGROUP_NS=y
37 CONFIG_GROUP_SCHED=y
38 CONFIG_FAIR_GROUP_SCHED=y
39 CONFIG_RT_GROUP_SCHED=y
40 CONFIG_CGROUP_SCHED=y
41 CONFIG_CGROUP_MEM_RES_CTLR=y
42 CONFIG_LOCKDEP=y
43 ---------------------------------
44 Enabling Kernel Configuration to test Power Management features
45 ---------------------------------
46 CONFIG_CPU_FREQ=y
47 CONFIG_CPU_FREQ_TABLE=y
48 CONFIG_CPU_FREQ_DEBUG=y
49 CONFIG_CPU_FREQ_STAT=y
50 CONFIG_CPU_FREQ_STAT_DETAILS=y
51 CONFIG_CPU_IDLE=y
52 CONFIG_CPU_IDLE_GOV_LADDER=y
53 CONFIG_CPU_IDLE_GOV_MENU=y
54 CONFIG_SCHED_MC=y
55 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
56 CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y
57 CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
58 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
59 CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
60 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
61 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
62 CONFIG_CPU_FREQ_GOV_USERSPACE=y
63 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
64 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
65 ---------------------------------
66 Enabling Kernel Configuration to test filecaps security feature
67 ---------------------------------
68 CONFIG_SECURITY_FILE_CAPABILITIES=y
69 ---------------------------------
70 Enabling Kernel Configuration to test SELinux security feature
71 ---------------------------------
72 Your Kernel should have been built with the following options to
73 test SELinux:
74
75 CONFIG_SECURITY=y
76 CONFIG_SECURITY_NETWORK=y
77 CONFIG_SECURITY_NETWORK_XFRM=y
78
79 CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
80 This has to be set to a positive value if you want to test this check.
81 Fedora kernels set it to 65536.
82
83 CONFIG_SECURITY_SELINUX=y
84 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
85 CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
86 CONFIG_SECURITY_SELINUX_DEVELOP=y
87 CONFIG_SECURITY_SELINUX_AVC_STATS=y
88 CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
89 CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
90
91 CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX=y
92 You don't want this one unless you are running Fedora 3 or 4.
93 On anything newer, it will cause unnecessary policy expansion.
94
95 CONFIG_SECURITY_SMACK=y
96 CONFIG_SECURITY_SELINUX=y
97
98 By default, if you boot with multiple LSMs compiled into the kernel, the
99 kernel won't boot succesfully - there can be only one (aside from
100 explicit internal "stacking" e.g. as is done for combining SELinux or
101 Smack with capabilities). Unless you use the security= option to select
102 one at boot. SELinux and Smack will honor the security= option.
103 ---------------------------------
104 ---------------------------------
105 Enabling Kernel Configuration to test SMACK security feature
106 ---------------------------------
107 CONFIG_NETLABEL=y
108 CONFIG_SECURITY=y
109 CONFIG_SECURITY_NETWORK=y
110 CONFIG_SECURITY_SMACK=y
111 CONFIG_SECURITY_SELINUX should not be set
112
113 For more information to build/install/run these tests, look through:
114 ltp/testcases/kernel/security/smack/README
115 ---------------------------------
116 ---------------------------------
117 Enablement for Enhancement to kexec/kdump for implementing the following features:
118 - Backup/restore memory used by the original kernel before/after kexec.
119 - Save/restore CPU state before/after kexec.
120 Now, only the i386 architecture is supported. More from the following git logs:
121 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3ab83521378268044a448113c6aa9a9e245f4d2f,
122 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=89081d17f7bb81d89fa1aa9b70f821c5cf4d39e9,
123 ---------------------------------
124 CONFIG_X86_32=y
125 CONFIG_RELOCATABLE=y
126 CONFIG_KEXEC=y
127 CONFIG_CRASH_DUMP=y
128 CONFIG_PM=y
129 CONFIG_HIBERNATION=y
130 CONFIG_KEXEC_JUMP=y
131 ---------------------------------
132 Enabling HOTPLUG for your Kernels
133 ---------------------------------
134 CONFIG_HOTPLUG=y
135 CONFIG_HOTPLUG_CPU=y
136 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
137 CONFIG_ACPI_HOTPLUG_CPU=y
138 CONFIG_HOTPLUG_PCI_PCIE=y
139 CONFIG_HOTPLUG_PCI=y
140 CONFIG_HOTPLUG_PCI_FAKE=y
141 CONFIG_HOTPLUG_PCI_COMPAQ=y
142 CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
143 CONFIG_HOTPLUG_PCI_IBM=y
144 CONFIG_HOTPLUG_PCI_ACPI=y
145 CONFIG_HOTPLUG_PCI_ACPI_IBM=y
146 CONFIG_HOTPLUG_PCI_CPCI=y
147 CONFIG_HOTPLUG_PCI_CPCI_ZT5550=y
148 CONFIG_HOTPLUG_PCI_CPCI_GENERIC=y
149 CONFIG_HOTPLUG_PCI_SHPC=y
150 ---------------------------------
151 Video For Linux Two API testing Requirements:
152 You need to have a video device (i.e. webcam, tuner card, etc.) connected to your system and available under /dev/video0. If you don't have any hardware device available, you can still test the "Virtual Video Driver". To compile this you need to compile your kernel with CONFIG_VIDEO_VIVI=m under:
153 -> Device Drivers
154 -> Multimedia devices
155 -> Video For Linux
156 -> Video capture adapters
157 -> Virtual Video Driver
158
159 The tests also require CUnit Framework to be installed before compiling the tests. Download & Install the same from:
160 http://sourceforge.net/projects/cunit/
161 ---------------------------------
162 ---------------------------------
163 Native language support (nls) testsuite requirements
164 ----------------------------------------------------
165 CONFIG_NLS=m
166 CONFIG_BLOCK=y
167 ---------------------------------
168 Enabling Controller area network (CAN) protocol support for your Kernels
169 ---------------------------------
170 CONFIG_NET=y
171 CONFIG_CAN=m
172 CONFIG_CAN_RAW=m
173 CONFIG_CAN_BCM=m
174 # CAN Device Drivers
175 CONFIG_CAN_VCAN=m
176 ---------------------------------
177 Enabling Fault Injection Support for your kernel (version 2.6.29).
178 Please check with the original kernel for the fault injection
179 types it supports. Following supports will be available:
180
181 /sys/kernel/debug/fail_io_timeout/interval
182 /sys/kernel/debug/fail_io_timeout/probability
183 /sys/kernel/debug/fail_io_timeout/reject-end
184 /sys/kernel/debug/fail_io_timeout/reject-start
185 /sys/kernel/debug/fail_io_timeout/require-end
186 /sys/kernel/debug/fail_io_timeout/require-start
187 /sys/kernel/debug/fail_io_timeout/space
188 /sys/kernel/debug/fail_io_timeout/stacktrace-depth
189 /sys/kernel/debug/fail_io_timeout/task-filter
190 /sys/kernel/debug/fail_io_timeout/times
191 /sys/kernel/debug/fail_io_timeout/verbose
192
193 /sys/kernel/debug/fail_make_request/interval
194 /sys/kernel/debug/fail_make_request/probability
195 /sys/kernel/debug/fail_make_request/reject-end
196 /sys/kernel/debug/fail_make_request/reject-start
197 /sys/kernel/debug/fail_make_request/require-end
198 /sys/kernel/debug/fail_make_request/require-start
199 /sys/kernel/debug/fail_make_request/space
200 /sys/kernel/debug/fail_make_request/stacktrace-depth
201 /sys/kernel/debug/fail_make_request/task-filter
202 /sys/kernel/debug/fail_make_request/times
203 /sys/kernel/debug/fail_make_request/verbose
204
205 /sys/kernel/debug/fail_page_alloc/ignore-gfp-highmem
206 /sys/kernel/debug/fail_page_alloc/ignore-gfp-wait
207 /sys/kernel/debug/fail_page_alloc/interval
208 /sys/kernel/debug/fail_page_alloc/min-order
209 /sys/kernel/debug/fail_page_alloc/probability
210 /sys/kernel/debug/fail_page_alloc/reject-end
211 /sys/kernel/debug/fail_page_alloc/reject-start
212 /sys/kernel/debug/fail_page_alloc/require-end
213 /sys/kernel/debug/fail_page_alloc/require-start
214 /sys/kernel/debug/fail_page_alloc/space
215 /sys/kernel/debug/fail_page_alloc/stacktrace-depth
216 /sys/kernel/debug/fail_page_alloc/task-filter
217 /sys/kernel/debug/fail_page_alloc/times
218 /sys/kernel/debug/fail_page_alloc/verbose
219
220 /sys/kernel/debug/failslab/ignore-gfp-wait
221 /sys/kernel/debug/failslab/interval
222 /sys/kernel/debug/failslab/probability
223 /sys/kernel/debug/failslab/reject-end
224 /sys/kernel/debug/failslab/reject-start
225 /sys/kernel/debug/failslab/require-end
226 /sys/kernel/debug/failslab/require-start
227 /sys/kernel/debug/failslab/space
228 /sys/kernel/debug/failslab/stacktrace-depth
229 /sys/kernel/debug/failslab/task-filter
230 /sys/kernel/debug/failslab/times
231 /sys/kernel/debug/failslab/verbose
232
233 when the below kernel config options are set:
234
235 CONFIG_FAULT_INJECTION=y
236 CONFIG_DEBUG_KERNEL=y
237 CONFIG_FAILSLAB=y (Fault-injection capability for kmalloc)
238 (CONFIG_SLAB=y || CONFIG_SLUB=y) if CONFIG_FAILSLAB=y
239 CONFIG_FAIL_PAGE_ALLOC=y (Fault-injection capabilitiy for alloc_pages())
240 CONFIG_FAIL_MAKE_REQUEST=y (Fault-injection capability for disk IO)
241 CONFIG_BLOCK=y if CONFIG_FAIL_MAKE_REQUEST=y
242 CONFIG_FAIL_IO_TIMEOUT=y (Faul-injection capability for faking disk interrupts)
243 CONFIG_BLOCK=y if CONFIG_FAIL_IO_TIMEOUT=y
244 CONFIG_FAULT_INJECTION_DEBUG_FS=y (Debugfs entries for fault-injection capabilities)
245 (CONFIG_SYSFS=y && CONFIG_DEBUG_FS=y) if CONFIG_FAULT_INJECTION_DEBUG_FS=y
246 CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y (stacktrace filter for fault-injection capabilities)
247 (CONFIG_FAULT_INJECTION_DEBUG_FS=y && CONFIG_STACKTRACE_SUPPORT=y && !CONFIG_X86_64) if
248 CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
249
250 For more information on Fault injection, please refer to:
251 linux-2.6/Documentation/fault-injection/fault-injection.txt,
252
253 You should also have made the following entries in your /etc/fstab file
254 once the kernel is booted with the above CONFIG options set:
255
256 debugfs /sys/kernel/debug/ debugfs
257
258 # How the Kernel Fault Injection works for LTP ?
259
260 1) Build Kernel with all the above possible kernel CONFIG Options,
261 2) Create the above entry in /etc/fstab file,
262 3) Reboot in the new kernel,
263 4) Goto LTPROOT. Build and Install LTP as per ltp/INSTALL file,
264 5) Choose your own test(or default) to run with fault injection as follows:
265 ./runltp -f <command_file> -F <LOOPS>,<FAULT_PROBABILITY>
266
267 The algorithm functions like:
268 loop (for each testcase)
269 begin
270 execute_testcase(inside_stable_kernel)
271 begin
272 insert_fault_into_kernel()
273 loop X Times
274 begin
275 execute_testcase(inside_fault_kernel)
276 end
277 restore_kernel_to_normal()
278 end
279 end
280
281 # External TODOs:
282 1) Add or modify testcases when relevant kernel functionality changes.
283 ---------------------------------
284
285 ---------------------------------
286 Enabling Kernel Configuration to test ext4 new features
287 ---------------------------------
288 CONFIG_EXT4_FS=y
289 CONFIG_EXT4DEV_COMPAT=y
290 CONFIG_EXT4_FS_XATTR=y
291 CONFIG_EXT4_FS_POSIX_ACL=y
292 CONFIG_EXT4_FS_SECURITY=y
293
294 Beside that, the following packages are necessary.
295 e2fsprogs
296 e2fsprogs-devel
297 e2fsprogs-libs
298 And the version of packages must be 1.41.4 or above.
299
300 For more information to build/install/run these tests, look through:
301 ltp/testcases/kernel/fs/ext4-new-features/README
302 ---------------------------------
303
README.md
1 Linux Test Project
2 ==================
3
4 Linux Test Project is a joint project started by SGI, OSDL and Bull developed
5 and maintained by IBM, Cisco, Fujitsu, SUSE, Red Hat, Oracle and others. The
6 project goal is to deliver tests to the open source community that validate the
7 reliability, robustness, and stability of Linux.
8
9 The LTP testsuite contains a collection of tools for testing the Linux kernel
10 and related features. Our goal is to improve the Linux kernel and system
11 libraries by bringing test automation to the testing effort. Interested open
12 source contributors are encouraged to join.
13
14 Project pages are located at: http://linux-test-project.github.io/
15
16 The latest image is always available at:
17 https://github.com/linux-test-project/ltp/releases
18
19 The discussion about the project happens at ltp mailing list:
20 http://lists.linux.it/listinfo/ltp
21
22 The git repository is located at GitHub at:
23 https://github.com/linux-test-project/ltp
24
25 The patchwork instance is at:
26 https://patchwork.ozlabs.org/project/ltp/list/
27
28 Warning!
29 ========
30
31 **Be careful with these tests!**
32
33 Don't run them on production systems. Growfiles, doio, and iogen in particular
34 stress the I/O capabilities of systems and while they should not cause problems
35 on properly functioning systems, they are intended to find (or cause) problems.
36
37 Quick guide to running the tests
38 ================================
39
40 If you have git, autoconf, automake, m4, the linux headers and the common
41 developer packages installed, the chances are the following will work.
42
43 ```
44 $ git clone https://github.com/linux-test-project/ltp.git
45 $ cd ltp
46 $ make autotools
47 $ ./configure
48 ```
49
50 Now you can continue either with compiling and running a single test or with
51 compiling and installing the whole testsuite.
52
53 Shortcut to running a single test
54 ---------------------------------
55
56 If you need to execute a single test you actually does not need to compile
57 whole LTP, if you want to run a syscall testcase following should work.
58
59 ```
60 $ cd testcases/kernel/syscalls/foo
61 $ make
62 $ PATH=$PATH:$PWD ./foo01
63 ```
64
65 Shell testcases are a bit more complicated since these need a path to a shell
66 library as well as to compiled binary helpers, but generally following should
67 work.
68
69 ```
70 $ cd testcases/lib
71 $ make
72 $ cd ../commands/foo
73 $ PATH=$PATH:$PWD:$PWD/../../lib/ ./foo01.sh
74 ```
75
76 Open Posix Testsuite has it's own build system which needs Makefiles to be
77 generated first, then compilation should work in subdirectories as well.
78
79 ```
80 $ cd testcases/open_posix_testsuite/
81 $ make generate-makefiles
82 $ cd conformance/interfaces/foo
83 $ make
84 $ ./foo_1-1.run-test
85 ```
86
87 Compiling and installing all testcases
88 --------------------------------------
89
90 ```
91 $ make
92 $ make install
93 ```
94
95 This will install LTP to `/opt/ltp`.
96 * If you have a problem see `doc/mini-howto-building-ltp-from-git.txt`.
97 * If you still have a problem see `INSTALL` and `./configure --help`.
98 * Failing that, ask for help on the mailing list or Github.
99
100 Some tests will be disabled if the configure script can not find their build
101 dependencies.
102
103 * If a test returns `TCONF` due to a missing component, check the `./configure`
104 output.
105 * If a tests fails due to a missing user or group, see the Quick Start section
106 of `INSTALL`.
107
108 To run all the test suites
109
110 ```
111 $ cd /opt/ltp
112 $ ./runltp
113 ```
114
115 Note that many test cases have to be executed as root.
116
117 To run a particular test suite
118
119 ```
120 $ ./runltp -f syscalls
121 ```
122
123 To run all tests with `madvise` in the name
124
125 ```
126 $ ./runltp -f syscalls -s madvise
127 ```
128 Also see
129
130 ```
131 $ ./runltp --help
132 ```
133
134 Test suites (e.g. syscalls) are defined in the runtest directory. Each file
135 contains a list of test cases in a simple format, see doc/ltp-run-files.txt.
136
137 Each test case has its own executable or script, these can be executed
138 directly
139
140 ```
141 $ testcases/bin/abort01
142 ```
143
144 Some have arguments
145
146 ```
147 $ testcases/bin/fork13 -i 37
148 ```
149
150 The vast majority of test cases accept the -h (help) switch
151
152 ```
153 $ testcases/bin/ioctl01 -h
154 ```
155
156 Many require certain environment variables to be set
157
158 ```
159 $ LTPROOT=/opt/ltp PATH="$PATH:$LTPROOT/testcases/bin" testcases/bin/wc01.sh
160 ```
161
162 Most commonly, the path variable needs to be set and also `LTPROOT`, but there
163 are a number of other variables, `runltp` usually sets these for you.
164
165 Note that all shell scripts need the `PATH` to be set. However this is not
166 limited to shell scripts, many C based tests need environment variables as
167 well.
168
169 Developers corner
170 =================
171
172 Before you start you should read following documents:
173
174 * `doc/test-writing-guidelines.txt`
175 * `doc/build-system-guide.txt`
176
177 There is also a step-by-step tutorial:
178
179 * `doc/c-test-tutorial-simple.txt`
180
181 If something is not covered there don't hesitate to ask on the LTP mailing
182 list. Also note that these documents are available online at:
183
184 * https://github.com/linux-test-project/ltp/wiki/Test-Writing-Guidelines
185 * https://github.com/linux-test-project/ltp/wiki/BuildSystem
186 * https://github.com/linux-test-project/ltp/wiki/C-Test-Case-Tutorial
187
188 Although we accept GitHub pull requests, the preferred way is sending patches to our mailing list.
189