Age | Commit message (Collapse) | Author | Files | Lines |
|
Mel Gorman suggested LKP to cover a case where sparsefiles are removed
sequentially so add a case based on case-truncate, which did the remove
concurrently.
In the meantime, this script will also report faultin time.
Note the example script provided by Mel in the below link has a 'sync'
after reading of the sparsefile and before removing of it. I failed to
understand the intent of the 'sync' so I omitted.
LINK: https://lore.kernel.org/linux-mm/20220217093113.GU3366@techsingularity.net/
Suggested-by: Mel Gorman <mgorman@techsingularity.net>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
The intent of "cp sparsefile /dev/null" is to fill page cache with
sparsefile's content, but since cp will recognize the src file
being sparse and skip doing any read of it but just writing zeros to
/dev/null, it kind of failed the purpose.
Fix this by using 'cat sparsefile > /dev/null'.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
The touch-alloc was updated to write memory in commit
3f9c6c227120db43873d1af20cea3f374eb99592.
This commit updates the usage of touch-alloc.
Signed-off-by: Hui Zhu <teawater@antfin.com>
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
|
|
When I use punch holes to setup a test page fragmentation environment, I
didn't know when the punch holes done. I can only get this information
through top or something else.
This commit add code to output a message after punch holes done to
handle this issue.
Signed-off-by: Hui Zhu <teawater@antfin.com>
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
|
|
Add code for touch-alloc.
And Change read memory to write memory to avoid use the zero-page for
reads in do_anonymous_page.
Signed-off-by: Hui Zhu <teawater@gmail.com>
|
|
Got following error when build usemem:
gcc -O -c -Wall -g usemem.c -o usemem.o
usemem.c:451:15: error: redefinition of ‘do_access’
unsigned long do_access(unsigned long *p, unsigned long idx, int read)
^~~~~~~~~
usemem.c:332:15: note: previous definition of ‘do_access’ was here
unsigned long do_access(unsigned long *p, unsigned long idx, int read)
^~~~~~~~~
make: *** [usemem.o] Error 1
Remove the duplicate do_access to fix this error.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
|
|
Some environment will not fault in memory even if MAP_POPULATE is set.
So add option touch-alloc to read memory after allocate it to make
sure the pages is fault in.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
|
|
Add a new option init-time to remove the initialization
time from the run time and show the initialization time.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
|
|
Change pagesize to "unsigned long" since it's used
in comparison with other unsigned long variables.
Signed-off-by: Fengguang Wu <wufengguang@huawei.com>
|
|
Hi Fengguang,
Thanks for your review. This is the new version that was updated
according to you comments.
This commit adds new option --punch-holes. usemem will free every
other page after allocation. Then it will generate size/2/pagesize
fragmented pages with this option.
Its implementation is to use madvise to release a page every other page.
For example:
usemem --punch-holes -s -1 400m
Ideally, this command will generate 200m fragmented pages in the system.
This command can help test anti-fragmentation function and other features
that are affected by fragmentation issues of the Linux kernel.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
Signed-off-by: Fengguang Wu <wufengguang@huawei.com>
|
|
Sometimes vm-scalability needs to work in an environment without an
libraries. Supporting static build is helpful.
This commit add static build option:
make STATIC=1
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
Signed-off-by: Fengguang Wu <wufengguang@huawei.com>
|
|
Got:
gcc -O -c -Wall -g usemem.c -o usemem.o
usemem.c: In function ‘output_statistics’:
usemem.c:638:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write(1, buf, len);
This commit fixes this warning.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
|
|
Fix the following compiler error:
----------------------------------------
usemem.c:711:17: error: too many arguments to function ‘do_rw_once’
rw_bytes += do_rw_once(ptrs[i], lens[i], &rand_data, 1, &rep, opt_repeat);
^~~~~~~~~~
...
usemem.c:763:16: error: too many arguments to function ‘do_rw_once’
unit_bytes = do_rw_once(buffer, opt_bytes, &rand_data, 1, NULL, 0);
^~~~~~~~~~
usemem.c:463:22: note: declared here
static unsigned long do_rw_once(unsigned long *p, unsigned long bytes,
^~~~~~~~~~
----------------------------------------
Fixes: 4b12da9("usemem: rename reps to opt_repeat")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Xiao Yang <xiaox.yang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
usemem will read memory again after access the memory with this option.
It can help test the speed that load page from swap to memory.
Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com>
|
|
This fixes the seemingly mlock() does not take effect issue.
- mlock() only takes effect for existing pages
- fork() will auto unlock them
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
This reverts commit fe0353b13482d879c48d3841d15457a0fd5eca2c.
|
|
This fixes blocked parent usemem when child is OOM killed.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
openat(AT_FDCWD, "/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 11
read(11, "0-3\n", 8192) = 4
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
mlock() tend to fail on large allocations.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
case-swap-w-seq tests for the string -rand in the testcase name to
enable usemem's --random option, but the test breaks when -rand doesn't
appear last, so case-swap-w-rand-mt isn't actually random.
Just change the way we search the testcase name, which keeps case-swap-*
deduplicated.
Fixes: f35dd1388bfb ("case-swap: add multithreaded test case for case-swap-w-seq/rand")
Cc: Aaron Lu <aaron.lu@intel.com>
Cc: Ying Huang <ying.huang@intel.com>
Suggested-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
|
|
This reverts commit 203658fb11d324e83c93550970fc6365a2ccc9d6.
Others prefer to keep the duplication down, and I'm all for that. Let's
fix it a different way.
Cc: Aaron Lu <aaron.lu@intel.com>
Cc: Ying Huang <ying.huang@intel.com>
Cc: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
|
|
case-swap-w-seq tests for the string -rand in the testcase name to
enable usemem's --random option, but the test breaks when -rand doesn't
appear last, so case-swap-w-rand-mt isn't actually random.
We could search for -rand inside the string, but let's just duplicate
testcase code to avoid similar breakage in the future as more test cases
are added.
Fixes: f35dd1388bfb ("case-swap: add multithreaded test case for case-swap-w-seq/rand")
Acked-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
|
|
usemem hardcodes 0 as the offset for mmap, so add an option to specify
this. Use bytes for consistency with what mmap accepts.
How to parse the offset? The POSIX standard is vague about off_t
("Signed integer type used for file sizes."), but in the absence of a
strtoofft, it seems reasonably safe to use strtol. On 64-bit Arch and
Oracle Linux systems, off_t is the same size as long when compiling in
both 32-bit and 64-bit modes.
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
|
|
gcc rightly complains,
usemem.c: In function ‘main’:
usemem.c:1183:18: warning: variable ‘ptr’ set but not used [-Wunused-but-set-variable]
unsigned char *ptr;
^
Simply remove ptr to silence the warning.
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
|
|
Headers from old versions of glibc don't have MAP_HUGE_SHIFT, which
leads to this:
usemem.c:60:32: error: 'MAP_HUGE_SHIFT' undeclared (first use in this function)
#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
With newer glibc's, MAP_HUGE_SHIFT is pulled in thusly:
usemem.c
sys/mman.h
bits/mman.h
bits/mman-linux.h
# define MAP_HUGE_SHIFT 26
As a workaround, define MAP_HUGE_SHIFT manually just as usemem does with
MAP_HUGE_2MB. While we're at it, remove the unused definition of
MAP_HUGE_1GB. Tested on arch, debian, and oracle linux with
./usemem -UO $((2**21)).
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
commit f11b2901356f("hw_vars: limit pagetable to half available memory")
has calculated the biggest possible ROTATE_BYTES value that will limit
page table consumption under 1/2 of MemAvail.
For multi-process test, each process will have its own page table
setup so we need to divide nr_task from ROTATE_BYTES.
Reported-by: Rong Chen <rongx.a.chen@intel.com>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
On Mon, Apr 02, 2018 at 12:37:36PM +0800, Fengguang Wu wrote:
> On Mon, Apr 02, 2018 at 12:26:47PM +0800, Aaron Lu wrote:
> > On Mon, 2018-04-02 at 12:19 +0800, Fengguang Wu wrote:
> > > > case-small-allocs | 20 +-------------------
> > > > case-small-allocs-common | 21 +++++++++++++++++++++
> > > > case-small-allocs-mt | 7 ++-----
> > >
> > > Applied. It may be better to rename the -common script
> > > so that case-* won't match it -- it's not a real test case,
> > > after all. Do you have a better file name in mind?
> >
> > What about removing the case prefix and name it as small-allocs-common?
>
> OK, I just renamed the file and deployed.
Turnes out there are other places need updating too to reflect the
file's name change.
From f3369cb9e8e594b55946ac54c5ab6a7efe703faf Mon Sep 17 00:00:00 2001
From: Aaron Lu <aaron.lu@intel.com>
Date: Thu, 24 May 2018 10:39:46 +0800
Subject: [PATCH] small-allocs-common: fix mis naming
I used to name the common file as case-small-allocs-common but
decided to use the name of small-allocs-common in the end after
talking to Fengguang. The file is renamed but other scripts that
call it didn't see the update so this patch fix it or an error:
stderr: ./case-small-allocs-mt: 3: .: Can't open ./case-small-allocs-common
would occur.
Reported-by: Hailin Gu <hailinx.gu@intel.com>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
To support MAP_HUGETLB.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
We used to use half memory to limit page table, this is OK for setup
that doesn't have other unreclaimable memory consumptions, but consider
if rootfs is hosted on ram and there is no swap, the rootfs consumed
memory is also unreclaimable and can be huge. That can cause some test
OOM.
Solve this by using MemAvailable from /proc/meminfo instead of the
previous MemTotal. This also impacts PTE_LIMIT.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
commit c079cd0e70ad("small-allocs: restrict vm_area_struct slab
memory usage") fixed the excessive slab size problem but didn't
handle -mt case. This commit fixes the same problem for -mt case.
We may want to tune the limited size in future, to avoid changing
two files, make the restrict_slab_size part a common file and
include it for both test cases.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Due to --prealloc, the main process will also consume one share of
memory so each process' test size should be unit_size/(nr_task+1)
or OOM could occur.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
For multi-threaded case, when it needs to exit, these threads will
need to free their memories. Due to the global mmap_sem, the free
has to be done one by one in serial mode. On large servers, due to
the high number of CPU, the free can take more than 1 hour.
To avoid this problem, limit the workingset by letting user to
specify the size. The non-mt case does not need this but it doesn't
hurt(the default size keeps the same as before if unit_size isn't
specified).
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Though this is a thread test, we will still fork once: the main process will
prealloc and prefault unit_size memory and then fork a child to create threads.
Then the child process will pthread_create() multiple threads and consume
another unit_size memory. So if unit_size is 1/2 mem, the main process and
its child process will consume all memory, which will easily cause OOM.
Fix this by reducing default unit_size to 1/4 memory.
Reported-by: Philip Li <philip.li@intel.com>
Reported-by: Li Zhijian <zhijianx.li@intel.com>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The process could be gone when we cat it, so ignore its error message or
we will have an useless stderr file:
==> /tmp/stderr <==
cat: /proc/10465/comm: No such file or directory
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The case-migrate test did not migrate back from the last node to the
first node. In addition, the counter of the migrations did not advance.
Acked-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Nadav Amit <namit@vmware.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
To measure lock contention during memory freeing.
Signed-off-by: Huang Ying <ying.huang@intel.com>
|
|
nr_thread may be zero, which makes tasks synchronization not work for
process running mode.
Signed-off-by: Huang Ying <ying.huang@intel.com>
|
|
There are several places for pagesize doing arithmetic operations and
due to its int type, the result could overflow and yielding strange
result like end is calculated with a smaller value than start, etc.
The subsequent file_remap_pages will then fail with -EINVAL.
I also changed the type of no_of_pages from int to unsigned long for
similar reasons(although it's not required for this fix).
https://jira01.devtools.intel.com/browse/OLT-1605
Reported-by: Philip Li <philip.li@intel.com>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
The start time is changed to after allocate memory and sync between
tasks.
Signed-off-by: Huang Ying <ying.huang@intel.com>
|
|
The original free memory size is incorrect, fixed via using unit size
and last unit size.
Signed-off-by: Huang Ying <ying.huang@intel.com>
|
|
To measure time taken to free memory.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The existing case-swap-seq can handle both process and thread modes but
we need to have the case file available.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Like commit 195e6559d20e ("case-anon-w-rand: use unit_size instead of
fixed $((mem / 2))"), this patch converts all anon write cases to respect
unit_size environment variable.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
As with commit 37f440c6eb71("case-anon-cow-seq-mt: remove the /N for
thread case"), we do not need to decide the size by nr_task since this
is a thread mode test.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The sparse file we created in this case does not have any -$index so
we shouldn't add that part when removing sparse files. Fix it.
/result/vm-scalability/300s-mremap-xread-rand-mt-performance/lkp-hsw-4ep1/debian-x86_64-2016-08-31.cgz/x86_64-rhel-7.2/gcc-6/v4.8/1
stderr: rm: cannot remove '/tmp/vm-scalability-tmp/vm-scalability/sparse-mremap-xread-rand-mt-*': No such file or directory
Buglink: https://jira01.devtools.intel.com/browse/OLT-1554
Reported-by: Philip Li <philip.li@intel.com>
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
To simulate CPU intensive work done between memory accessing. This is
useful for readahead testing.
Changelog:
v2:
- Keep accessing the page during delay to avoid the page be reclaimed
during delay.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
For some test cases, what we care about is the read/write operation
speed after allocation, so add a option to synchronize between tasks
after allocating memory to avoid timing issue between tasks because of
memory allocation.
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
I believe we should start nr_task thread number instead of
nr_task*nr_task thread number.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The random seed was previously based on process ID. This caused the
random multi-threaded benchmarks to mostly practice very strange
behavior, in which all threads access the same memory, in some
benchmarks in a lockstep behavior.
Changing the getpid to gettid to get the expected behavior, which is
also in line with the multi-process benchmarks.
Signed-off-by: Nadav Amit <namit@vmware.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
As suggested by Ying, a new switch is added to usemem:
-W|--write-signal-read
Let processes do read when received a signal after write.
usemem should be started as:
usemem -n $nr_task -W -d -p pidfile $memsize
-d to detach and -W to specify these detached processes need to do
read when received the SIGUSR1 signal after the normal write. -p to
specify where to save these detached process IDs so that they can
be signalled later.
With the above added switch, the swap in case can be done as:
1 start N processes to do write and then detach and wait for signal to
resume to do read;
2 start N processes to do write to push the memory occupided in 1) to
swap space. When done, send SIGUSR1 with kill to those detached
processes to resume them to do read(hence, causing swap in).
Note that for swap in case, the start time has to be set after the
detached processes got the resume signal SIGUSR1.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The code to output statistics is useful later so make a new function for
it. There should be no functional change.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The code to do RW for one rep is useful later so extract it to make a
new function named do_rw_once.
There should be no functionality change.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The param bytes in function do_units serves two purpose:
1 As the passed param to tell the function how many bytes need to be processed;
2 As a local variable that gets decremented each time a unit is processed
and break the loop once it gets zero.
Since do_units is always called with the global opt_bytes as its param,
the 1st purpose isn't much useful as we can always get the value from
the global opt_bytes. For purpose 2, we probably should be using a local
variable instead.
There should be no functionality change.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The variable bytes is defined as a global one, but some function also
use it as their param. It's difficult to tell if it is the global one
or the local one when one sees bytes. To avoid confusion, rename the
global bytes to opt_bytes.
There should be no functionality change.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
For this small allocs test, a lot of vma will be allocated. Each vma
will need a vm_area_struct slab object and these objects will fill up
all memory and then OOM.
These slabs are unreclaimable.
Restrict the memory consumption by this slab to 1/3 MemTotal.
Jira-link: https://jira01.devtools.intel.com/browse/OLT-1479
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
To be consistent with other test cases.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Cases that use ROTATE_BYTES as its unit_size use all the memory as
file backed read only memory and are easily reclaimed; but the memory
consumed by page table is not reclaimable and could cause OOM since
ROTATE_BYTES is pretty large.
Refine ROTATE_BYTES in hw_vars as is done in case-anon-r-rand so that
other test cases will also avoid the OOM issue.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
It could be a surprise for people to find their test cases that doesn't
specify runtime in cmdline to have their run stopped prematurely and
only find the runtime is set in hw_vars.
Tests that have a need to be stopped at 300s should set the runtime
environment variable, unconditionally timeout after 300s in hw_vars
doesn't seem appropriate.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
So that we can control the write size for vm-scalability run from the
LKP environment.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Since threads share the same VM, there will be no COW so no need to
divide the memory size by N.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Most of the descripton are reviewed last time with Fengguang and Ying
but I also added some more.
Please feel free to change the description if you see anything
inappropriate or incorrect, thanks.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The msync-mt case will preallocate and prefault a mmap space with a
sparse file as its backing store and then create N threads to write data
there. Since these threads share the same VM, we do not need /N for the
size of the preallocated space.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Since this is a preallocate and all threads will use the same memory,
there is no need to divide the memory size by N.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
We support setup disk/file system out of vm-scalability and specify that via SPARSE_ROOT environment variable.
If SPARSE_ROOT is empty, we use its original value in vm-scalability.
Signed-off-by: Yanbing Jiang <yanbing.jiang@intel.com>
|
|
User can specify a value in the job file. This is mostly useful to do
various testing, where the written size(pass_size) can play a role.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
|
Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
|
|
2015-11-09 09:56:42 truncate /tmp/vm-scalability-tmp/vm-scalability/sparse-remap-1 -s 514191360
2015-11-09 09:56:42 truncate /tmp/vm-scalability-tmp/vm-scalability/sparse-remap-2 -s 514191360
2015-11-09 09:56:42 truncate /tmp/vm-scalability-tmp/vm-scalability/sparse-remap-3 -s 514191360
2015-11-09 09:56:43 truncate /tmp/vm-scalability-tmp/vm-scalability/sparse-remap-4 -s 514191360
==> /tmp/stderr <==
remap failed with error Invalid argument
remap failed with error Invalid argument
remap failed with error Invalid argument
remap failed with error Invalid argument
Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
|
|
modify case-swap-w-seq for random write option.
Signed-off-by: Yanbing Jiang <yanbing.jiang@intel.com>
|
|
This is done via eating memory of size (MemAvailable + SwapTotal) * 3 / 4.
-n nr_processes is the number of multi-process
-t nr_threads is the number of multi-threads when eating memory
Their default value is nr_cpu.
v4: fix the error message.
Signed-off-by: Yanbing Jiang <yanbing.jiang@intel.com>
Reviewed-by: Huang, Ying < ying.huang@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The REAME is updated to describe the copyright and license information.
The COPYING file is for GNU GPL v2.
The copyright information for usemem_migrate.c is taken from the header
of migrate_pages.c of the numactl's test directory.
The copyright infromation for usemem.c is taken from Andrew's agreement
email replied to Fengguang.
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Huang, Ying <ying.huang@intel.com>
|
|
Because files under SPARSE_ROOT may be larger than 50% memory size
which is default for tmpfs mount. So use TMPFS_MNT instead, which is
100% memory size.
Signed-off-by: Huang, Ying <ying.huang@intel.com>
|
|
Do that via the command line as below:
sed -i s/nr_cpu/nr_task/g [^h]*
Then modify hw_vars manually.
Signed-off-by: Huang, Ying <ying.huang@intel.com>
|
|
./hw_vars: line 104: [: too many arguments
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
./case-migrate: 38: ./case-migrate: [[: not found
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
/lkp/lkp/src/tests/vm-scalability: 28: /lkp/lkp/src/tests/vm-scalability: Illegal number: 16466156*4096
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
mount: /tmp/vm-scalability.img: failed to setup loop device: No such file or directory
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
argv[2]="2253980245" (0x86590255), atoi() cast it to "18446744071668564565" (0xffffffff86590255), so mmap ENOMEM
Signed-off-by: wlin70 <wei.w.lin@intel.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
truncate: cannot open '/tmp/vm-scalability/sparse-/lkp/benchmarks/vm-scalability/case-lru-file-mmap-read-rand-4' for writing: No such file or directory
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Root caused and fixed by Wanlong:
2014-02-26 19:31:41.830115500 [lkp process-result-queue 36526] truncate: option requires an argument -- 's'
2014-02-26 19:31:41.830117500 Try 'truncate --help' for more information.
2014-02-26 19:31:41.844520500 [lkp process-result-queue 36526] moved bad result from
/lkp/result/brickland2/micro/vm-scalability/16G-shm-xread-rand-m
t/x86_64-lkp/4e61e14b4be48e4b7264a304b0306d0c49a8d521/0 to
/lkp/bad-result/brickland2/micro/vm-scalability/16G-shm-xread-rand-mt/x86_64-lkp/4e61e14b4
be48e4b7264a304b0306d0c49a8d521/0
[allen@G08FNSTD121251 ~]$ cd
/lkp/bad-result/brickland2/micro/vm-scalability/16G-shm-xread-rand-mt/x86_64-lkp/4e61e14b4be48e4b7264a304b0306d0c49a8d521/0/
[allen@G08FNSTD121251 0]$ cat reproduce.sh
2014-02-26 19:30:12 mount -t tmpfs -o size=100% vm-scalability-tmp /tmp/vm-scalability-tmp
2014-02-26 19:30:12 truncate -s 135079759872 /tmp/vm-scalability.img
2014-02-26 19:30:12 mkfs.xfs -q /tmp/vm-scalability.img
2014-02-26 19:30:12 mount -o loop /tmp/vm-scalability.img /tmp/vm-scalability
2014-02-26 19:30:12 ./case-shm-xread-rand-mt
2014-02-26 19:30:12 truncate /tmp/vm-scalability-tmp/sparse-shm-xread-rand-mt -s <====== ERROR
2014-02-26 19:30:12 ./usemem --runtime 300 -t 120 -f /tmp/vm-scalability-tmp/sparse-shm-xread-rand-mt --prealloc --readonly --random 0
2014-02-26 19:30:12 umount /tmp/vm-scalability-tmp
2014-02-26 19:30:12 umount /tmp/vm-scalability
2014-02-26 19:30:12 rm /tmp/vm-scalability.img
[allen@G08FNSTD121251 vm-scalability]$ cat case-shm-xread-rand-mt
source ./hw_vars
create_sparse_file $SHM_FILE $shm_size <======== ERROR
$USEMEM -t $nr_cpu -f $SHM_FILE --prealloc --readonly --random $((shm_size / 2))
rm $SHM_FILE
[allen@G08FNSTD121251 vm-scalability]$ cat hw_vars
...
mount_tmpfs()
{
if [[ -d $TMPFS_MNT ]]; then
mountpoint -q $TMPFS_MNT && umount $TMPFS_MNT
else
mkdir $TMPFS_MNT
fi
$CMD mount -t tmpfs -o size=100% vm-scalability-tmp $TMPFS_MNT
shm_size=$(/usr/bin/stat -f -c "%b*%S" $TMPFS_MNT)
shm_size=$((shm_size)) <=== Here is shm_size
}
...
create_sparse_file () {
name=$1
size=$2
# echo "$name is of size $size"
$CMD truncate $name -s $size
# dd if=/dev/zero of=$name bs=1k count=1 seek=$((size >> 10)) 2>/dev/null
# ls $SPARSE_ROOT
# ls /tmp/vm-scalability/*
}
...
So, we should export shm_size variable there since the test case cannot
get this variable.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The LKP+ script relies on non-zero shm mount size:
2014-02-12 18:27:52.587217500 [process-result-queue 16238] /lkp/lkp/src/tests/micro/vm-scalability: line 31: ((: repeat = size / unit_size
: division by 0 (error token is "unit_size ")
Reported-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
There should be 120 lines of output:
% g -c copied /lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v*/*/vm-scalability
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/0/vm-scalability:95
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/1/vm-scalability:99
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/2/vm-scalability:101
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/3/vm-scalability:101
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/4/vm-scalability:101
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/5/vm-scalability:98
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/6/vm-scalability:87
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc3/7/vm-scalability:91
/lkp/result/brickland2/micro/vm-scalability/300s-lru-file-readonce/x86_64-lkp/v3.12-rc4/0/vm-scalability:99
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
The random cases are rather unstable:
2013-10-03 10:16:50 truncate -s 134795628544 /tmp/vm-scalability.img
2013-10-03 10:16:50 mkfs.xfs -q /tmp/vm-scalability.img
2013-10-03 10:16:50 mount -o loop /tmp/vm-scalability.img /tmp/vm-scalability
2013-10-03 10:16:50 ./case-msync-mt
2013-10-03 10:16:50 truncate /tmp/vm-scalability/sparse-msync-mt -s 134795628544
2013-10-03 10:16:50 ./usemem --runtime 300 -S -t 120 -f /tmp/vm-scalability/sparse-msync-mt -F --prealloc --open-rw --random 561648452
631854504 bytes / 195900689 usecs = 3149 KB/s
631854504 bytes / 195900635 usecs = 3149 KB/s
631854504 bytes / 195900657 usecs = 3149 KB/s
631854504 bytes / 195900628 usecs = 3149 KB/s
631854504 bytes / 195900662 usecs = 3149 KB/s
...
2013-10-03 10:20:09 ./case-msync-mt
2013-10-03 10:20:09 truncate /tmp/vm-scalability/sparse-msync-mt -s 134795628544
2013-10-03 10:20:09 ./usemem --runtime 300 -S -t 120 -f /tmp/vm-scalability/sparse-msync-mt -F --prealloc --open-rw --random 561648452
71778928 bytes / 338933724 usecs = 206 KB/s
71778928 bytes / 338933715 usecs = 206 KB/s
71778928 bytes / 338933716 usecs = 206 KB/s
71778928 bytes / 338934282 usecs = 206 KB/s
71778928 bytes / 338933724 usecs = 206 KB/s
2013-10-03 10:25:49 ./case-msync-mt
2013-10-03 10:25:49 truncate /tmp/vm-scalability/sparse-msync-mt -s 134795628544
2013-10-03 10:25:49 ./usemem --runtime 300 -S -t 120 -f /tmp/vm-scalability/sparse-msync-mt -F --prealloc --open-rw --random 561648452
631854504 bytes / 177256505 usecs = 3481 KB/s
631854504 bytes / 177258225 usecs = 3481 KB/s
631854504 bytes / 177258227 usecs = 3481 KB/s
631854504 bytes / 177258243 usecs = 3481 KB/s
631854504 bytes / 177258254 usecs = 3481 KB/s
2013-10-03 10:28:47 ./case-msync-mt
2013-10-03 10:28:47 truncate /tmp/vm-scalability/sparse-msync-mt -s 134795628544
2013-10-03 10:28:47 ./usemem --runtime 300 -S -t 120 -f /tmp/vm-scalability/sparse-msync-mt -F --prealloc --open-rw --random 561648452
631854504 bytes / 61268015 usecs = 10071 KB/s
631854504 bytes / 61268083 usecs = 10071 KB/s
631854504 bytes / 61268107 usecs = 10071 KB/s
631854504 bytes / 61268113 usecs = 10071 KB/s
631854504 bytes / 61268126 usecs = 10071 KB/s
2013-10-03 10:29:49 umount /tmp/vm-scalability
2013-10-03 10:29:49 rm /tmp/vm-scalability.img
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
9163121194 bytes / 511443180 usecs = 17496 KB/s
9163121194 bytes / 535441190 usecs = 16712 KB/s
9163121194 bytes9167839786 bytes / 300795153 usecs = 29764 KB/s
9163121194 bytes / 301242067 usecs = 29704 KB/s
9167839786 bytes / 305479517 usecs = 29307 KB/s
9163121194 bytes / 303736171 usecs = 29460 KB/s
9167839786 bytes / 305661581 usecs = 29290 KB/s
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
7995680008 bytes / 5227954 usecs = 1493563 KBps
68 * 16880183296 bytes migrated, 5020493 usecs, 228633 MB/s
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
umount: /tmp/vm-scalability: device is busy.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
umount: /tmp/vm-scalability: device is busy.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
btrfs is blocking the tests..
[ 20.045392] btrfs: device fsid 782d8017-2133-4f93-8299-741848c28d71 devid 1 transid 5 /dev/loop0
[ 31.655038] BTRFS debug (device loop0): run_one_delayed_ref returned -28
[ 31.656279] ------------[ cut here ]------------
[ 31.657312] WARNING: CPU: 3 PID: 3084 at /c/kernel-tests/src/x86_64/fs/btrfs/super.c:255 __btrfs_abort_transaction+0x54/0x104()
[ 31.659413] btrfs: Transaction aborted (error -28)
[ 31.660418] Modules linked in:
[ 31.661220] CPU: 3 PID: 3084 Comm: btrfs-transacti Not tainted 3.12.0-rc2-00931-g4454b53 #532
[ 31.662884] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[ 31.663909] 0000000000000000 ffff88007f1abc28 ffffffff81a31094 ffff88007f1abc70
[ 31.665764] ffff88007f1abc60 ffffffff810c53aa ffffffff8140e4a1 00000000ffffffe4
[ 31.667567] ffff8803cdcd9000 ffff88022f884780 ffffffff81c99480 ffff88007f1abcc0
[ 31.669413] Call Trace:
[ 31.670081] [<ffffffff81a31094>] dump_stack+0x54/0x74
[ 31.671039] [<ffffffff810c53aa>] warn_slowpath_common+0x7f/0x98
[ 31.672137] [<ffffffff8140e4a1>] ? __btrfs_abort_transaction+0x54/0x104
[ 31.673283] [<ffffffff810c540f>] warn_slowpath_fmt+0x4c/0x4e
[ 31.674308] [<ffffffff81119802>] ? lock_release_holdtime.part.8+0xa3/0xa8
[ 31.675453] [<ffffffff81424a76>] ? btrfs_run_delayed_refs+0x323/0x46b
[ 31.676608] [<ffffffff8140e4a1>] __btrfs_abort_transaction+0x54/0x104
[ 31.677721] [<ffffffff81424a94>] btrfs_run_delayed_refs+0x341/0x46b
[ 31.678808] [<ffffffff81432931>] btrfs_commit_transaction+0x79/0x8b9
[ 31.679907] [<ffffffff8142b648>] transaction_kthread+0x108/0x1df
[ 31.681025] [<ffffffff8142b540>] ? free_fs_root+0xab/0xab
[ 31.682022] [<ffffffff810e37e3>] kthread+0xd8/0xe0
[ 31.682962] [<ffffffff810f3a47>] ? local_clock+0x41/0x5a
[ 31.683945] [<ffffffff810e370b>] ? kthread_create_on_node+0x124/0x124
[ 31.685109] [<ffffffff81a4427c>] ret_from_fork+0x7c/0xb0
[ 31.686091] [<ffffffff810e370b>] ? kthread_create_on_node+0x124/0x124
[ 31.687193] ---[ end trace d5fb7d116e45a63a ]---
[ 31.688143] BTRFS error (device loop0) in btrfs_run_delayed_refs:2715: errno=-28 No space left
[ 31.689812] BTRFS info (device loop0): forced readonly
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
btrfs consumes least memory for an empty filesystem:
For an 1GB image size:
# truncate /tmp/sparse.img -s $((1<<30))
# mkfs
# du -s /tmp/sparse.img
33M /tmp/sparse.img # ext4
11M /tmp/sparse.img # xfs
4.1M /tmp/sparse.img # btrfs
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
root@waimea /c/vm-scalability# ./run_cases case-msync-mt
Resetting all stats now.... Done!
executing case-msync-mtFilesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 999320 1284 929224 1% /tmp/vm-scalability
344981845 bytes / 8037718 usecs = 41914 KBps
344981845 bytes / 8038400 usecs = 41910 KBps
344981845 bytes / 8037979 usecs = 41913 KBps
344981845 bytes / 8038366 usecs = 41911 KBps
344981845 bytes / 8038480 usecs = 41910 KBps
344981845 bytes / 8038504 usecs = 41910 KBps
344981845 bytes / 8038516 usecs = 41910 KBps
344981845 bytes / 8037688 usecs = 41914 KBps
344981845 bytes / 8037861 usecs = 41913 KBps
344981845 bytes / 8038119 usecs = 41912 KBps
344981845 bytes / 8038641 usecs = 41909 KBps
344981845 bytes / 8038432 usecs = 41910 KBps
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 999320 338452 592056 37% /tmp/vm-scalability
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
truncate: failed to truncate '/tmp/vm-scalability/sparse-mremap-xread-rand-mt-8' at 8796093022208 bytes: File too large
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
wfg ~% truncate -s $((1<<43)) /tmp/x # succeed
wfg ~% truncate -s $((1<<44)) /tmp/x
truncate: failed to truncate ‘/tmp/x’ at 17592186044416 bytes: File too large
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
./hw_vars: line 61: =: command not found
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
|
|
|
|
|
|
|
|
|