Commit Graph

43 Commits

Author SHA1 Message Date
Xiaoming Gao 205fee4e55 clocksource: add kernel.clocksource_unstable_cnt to track tsc unstable
since we disable clocksource switch when tsc not stable, we need a
counter to track tsc unstable did happend.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-05-29 10:40:52 +08:00
Xiaoming Gao 7c59213786 clocksource: add debug information and disable tsc switch
output more information when clocksource got unstable,
and add kernel.clocksource_switch_unstable_cs to control
whether to switch off unstable clocksource.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-05-29 10:40:44 +08:00
chen xiaoguang 38eea51b40 sched/rt: optimize checking group rt scheduler constraints
from upstream commit b4fb015eeff7f3e5518a7dbe806

Signed-off-by: Chen Xiaoguang <xiaoggchen@tencent.com>
2020-05-29 10:40:35 +08:00
Kaixu Xia b0e23ef723 pagecachelimit: add the slab(dentry&inode) limit support
Add the support that controlling slab(dentry&inode) limit and the
corresponding sysctl interface.

Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
2020-05-29 10:40:24 +08:00
Xiaoming Gao 9de8b674e2 slub: add fast_slub_nr_free to track free objects
use lightweight track method to count free objects in
slub, remove heavy logic in spin_lock_irqsave.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-05-29 10:40:21 +08:00
chen xiaoguang 282df1f0e0 cpuacct/bt:fix bt_stat and usage compute error
cpuacct.stat and cpuacct.bt_stat show the same thing which
is wrong.

Signed-off-by: Chen Xiaoguang <xiaoggchen@tencent.com>
2020-05-29 10:40:14 +08:00
Qian Cai d199b0aab8 sched/fair: Fix -Wunused-but-set-variable warnings
Commit:

   de53fd7aedb1 ("sched/fair: Fix low cpu usage with high throttling by removing expiration of cpu-local slices")

introduced a few compilation warnings:

  kernel/sched/fair.c: In function '__refill_cfs_bandwidth_runtime':
  kernel/sched/fair.c:4365:6: warning: variable 'now' set but not used [-Wunused-but-set-variable]
  kernel/sched/fair.c: In function 'start_cfs_bandwidth':
  kernel/sched/fair.c:4992:6: warning: variable 'overrun' set but not used [-Wunused-but-set-variable]

Also, __refill_cfs_bandwidth_runtime() does no longer update the
expiration time, so fix the comments accordingly.

Signed-off-by: Qian Cai <cai@lca.pw>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Ben Segall <bsegall@google.com>
Reviewed-by: Dave Chiluk <chiluk+linux@indeed.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: pauld@redhat.com
Fixes: de53fd7aedb1 ("sched/fair: Fix low cpu usage with high throttling by removing expiration of cpu-local slices")
Link: https://lkml.kernel.org/r/1566326455-8038-1-git-send-email-cai@lca.pw
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2020-05-29 10:39:21 +08:00
Dave Chiluk 77d6fbc204 sched/fair: Fix low cpu usage with high throttling by removing expiration of cpu-local slices
It has been observed, that highly-threaded, non-cpu-bound applications
running under cpu.cfs_quota_us constraints can hit a high percentage of
periods throttled while simultaneously not consuming the allocated
amount of quota. This use case is typical of user-interactive non-cpu
bound applications, such as those running in kubernetes or mesos when
run on multiple cpu cores.

This has been root caused to cpu-local run queue being allocated per cpu
bandwidth slices, and then not fully using that slice within the period.
At which point the slice and quota expires. This expiration of unused
slice results in applications not being able to utilize the quota for
which they are allocated.

The non-expiration of per-cpu slices was recently fixed by
'commit 512ac999d275 ("sched/fair: Fix bandwidth timer clock drift
condition")'. Prior to that it appears that this had been broken since
at least 'commit 51f2176d74ac ("sched/fair: Fix unlocked reads of some
cfs_b->quota/period")' which was introduced in v3.16-rc1 in 2014. That
added the following conditional which resulted in slices never being
expired.

if (cfs_rq->runtime_expires != cfs_b->runtime_expires) {
	/* extend local deadline, drift is bounded above by 2 ticks */
	cfs_rq->runtime_expires += TICK_NSEC;

Because this was broken for nearly 5 years, and has recently been fixed
and is now being noticed by many users running kubernetes
(https://github.com/kubernetes/kubernetes/issues/67577) it is my opinion
that the mechanisms around expiring runtime should be removed
altogether.

This allows quota already allocated to per-cpu run-queues to live longer
than the period boundary. This allows threads on runqueues that do not
use much CPU to continue to use their remaining slice over a longer
period of time than cpu.cfs_period_us. However, this helps prevent the
above condition of hitting throttling while also not fully utilizing
your cpu quota.

This theoretically allows a machine to use slightly more than its
allotted quota in some periods. This overflow would be bounded by the
remaining quota left on each per-cpu runqueueu. This is typically no
more than min_cfs_rq_runtime=1ms per cpu. For CPU bound tasks this will
change nothing, as they should theoretically fully utilize all of their
quota in each period. For user-interactive tasks as described above this
provides a much better user/application experience as their cpu
utilization will more closely match the amount they requested when they
hit throttling. This means that cpu limits no longer strictly apply per
period for non-cpu bound applications, but that they are still accurate
over longer timeframes.

This greatly improves performance of high-thread-count, non-cpu bound
applications with low cfs_quota_us allocation on high-core-count
machines. In the case of an artificial testcase (10ms/100ms of quota on
80 CPU machine), this commit resulted in almost 30x performance
improvement, while still maintaining correct cpu quota restrictions.
That testcase is available at https://github.com/indeedeng/fibtest.

Fixes: 512ac999d275 ("sched/fair: Fix bandwidth timer clock drift condition")
Signed-off-by: Dave Chiluk <chiluk+linux@indeed.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Phil Auld <pauld@redhat.com>
Reviewed-by: Ben Segall <bsegall@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: John Hammond <jhammond@indeed.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kyle Anderson <kwa@yelp.com>
Cc: Gabriel Munos <gmunoz@netflix.com>
Cc: Peter Oskolkov <posk@posk.io>
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Brendan Gregg <bgregg@netflix.com>
Link: https://lkml.kernel.org/r/1563900266-19734-2-git-send-email-chiluk+linux@indeed.com
2020-05-29 10:39:18 +08:00
zgpeng f2ba303dbd vm: add max_map_count isolate switch
Add the max_map_count isolation switch kernel.isolate_max_map_count;
The isolation of max_map_count is turned on by default. If you want
to turn it off, set kernel.isolate_max_map_count to 0;

Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
2020-05-29 10:38:28 +08:00
He Chen f1ac9bd18b sched/bt: add latency factor for bt load
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Hua Liu <shookliu@tencent.com>
Signed-off-by: Xiaogguang Chen <xiaoggchen@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Bin Fan <tombinfan@tencent.com>
Signed-off-by: He Chen <heddchen@tencent.com>
2020-03-02 22:03:10 +08:00
He Chen 0b667819c3 sched/bt: BT schduler cgroup support
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Hua Liu <shookliu@tencent.com>
Signed-off-by: Xiaogguang Chen <xiaoggchen@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Bin Fan <tombinfan@tencent.com>
Signed-off-by: He Chen <heddchen@tencent.com>
2020-03-02 22:03:10 +08:00
He Chen 0dd9de2d2b sched/bt: BT scheduler load balance support
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Hua Liu <shookliu@tencent.com>
Signed-off-by: Xiaogguang Chen <xiaoggchen@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Bin Fan <tombinfan@tencent.com>
Signed-off-by: He Chen <heddchen@tencent.com>
2020-03-02 22:03:09 +08:00
He Chen e6c42e61db sched/bt: BT scheduler bandwidth limit support
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Hua Liu <shookliu@tencent.com>
Signed-off-by: Xiaogguang Chen <xiaoggchen@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Bin Fan <tombinfan@tencent.com>
Signed-off-by: He Chen <heddchen@tencent.com>
2020-03-02 22:03:09 +08:00
He Chen b48a63ef2c sched: add offline scheduler class
The offline scheduler named BT sched is based on the CFS scheduler. We
also use the rb-tree as the run queue to save the runnable tasks. And the
vruntime concept is also used in the offline scheduler. And the priority
of offline scheduler is from 140 to 179. So now the schedulers in the
kernel are as follows: stop, RT, CFS, BT and idle.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Hua Liu <shookliu@tencent.com>
Signed-off-by: Xiaogguang Chen <xiaoggchen@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Bin Fan <tombinfan@tencent.com>
Signed-off-by: He Chen <heddchen@tencent.com>
2020-03-02 22:03:09 +08:00
Xiaoming Gao f540f245de vm: fix isolate max_map_count, inherit the value of the parent namespace instead
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-21 12:05:14 +08:00
Xiaoming Gao 42c43458cb tools: add ttools module to support ptrace protect
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 15:12:03 +08:00
Fuhai Wang 9d289d8cff epoll: introduce min_wait_time
epoll hrtimer patch may increase loop times if timeout set to 1ms.
This patch add new sysctl control the minimal wait time, and default
to 1 jiffies.

Signed-off-by: Samuel Liao <samuelliao@tencent.com>
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Fuhai Wang <fuhaiwang@tencent.com>
2020-01-02 14:53:48 +08:00
Fuhai Wang b068df7b27 Revert "epoll: introduce min_wait_time" 2020-01-02 14:53:11 +08:00
Fan Bin f030ef831c build: Fix build issue introduced by kpatch
Signed-off-by: Fan Bin <tombinfan@tencent.com>
2020-01-02 14:51:55 +08:00
Liu Yu f39de73b07 sysctl: fix build issue if CONFIG_CPUSETS disabled
Signed-off-by: Liu Yu <allanyuliu@tencent.com>
2020-01-02 12:24:19 +08:00
Zhiguang Peng 0e74e9c6dd sched:fair: fix crash in list_add_leaf_cfs_rq due to bad tmp_alone_branch
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
2020-01-02 12:22:40 +08:00
Xiaoming Gao 46f4a8e68e irq: allow user manage irq affinity
add irq_force_manage to change disable it.

Signed-off-by: Lei Chen <lennychen@tencent.com>
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 12:22:25 +08:00
Zhiguang Peng d904783fd2 cpuset: add sysctl cpuset_cpuinfo_show_realinfo to switch whether show real cpuinfo or not
IEG need cpuinfo's processor field to start from 0 in docker, so add sysctl
cpuset_cpuinfo_show_realinfo to switch whether cpuinfo's processor
field start from 0 or not.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
2020-01-02 12:21:58 +08:00
Chen Xiaoguang 77a5c3262b cgroup/cpuset: fix idle compute bug in cpuset.stat
idle calculation error will lead to wrong cpu usage in top

Signed-off-by: Chen Xiaoguang <xiaoggchen@tencent.com>
2020-01-02 12:21:18 +08:00
brookxu f22307c4c8 cpuset: fixed cpuset.stat process field value exception
The value of the cpuset.stat process field will be abnormal in
some scenarios. The reason for this problem is that the sum of
process_counts may be negative for several cpus.

Signed-off-by: brookxu <brookxu@tencent.com>
2020-01-02 12:20:45 +08:00
Chunguang Xu fae2070952 cpuacct: get the uptime of container
add cpuacct.uptime interface to get uptime of container

Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-01-02 12:19:36 +08:00
Xiaoming Gao 86055c32bb kernel/panic: set crash_kexec_post_notifiers default to true
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 12:17:31 +08:00
Xiaoming Gao 772b473711 kpatch: add kpatch core files
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 12:17:21 +08:00
Fuhai Wang 017a907db8 sched: fix poor performace on kvm guest
Signed-off-by: Wang Fuhai <fuhaiwang@tencent.com>
2020-01-02 12:16:13 +08:00
Kaixu Xia d2290bb348 tkernel: add the kpatch kmod support
Add the kpatch and write relocations support.

Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
2020-01-02 12:15:37 +08:00
Kaixu Xia de046697ad arm64: implement ftrace with regs by using patchable-function-entry
Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
2020-01-02 12:14:57 +08:00
Liu Hua 91eeadb52d cpuset: Compatible with ARM arch
Signed-off-by: Liu Hua <shookliu@tencent.com>
2020-01-02 12:04:08 +08:00
Chunguang Xu e133d113ca pagecachelimit: page cache reclaim asynchronous
add /proc/sys/vm/vm_pagecache_limit_async interface which
allow page caches reclaimed in kpclimitd, it will not consume
work threads runtime, but oom may be occured. it's closed default.

Signed-off-by: Zhiping Du <zhipingdu@tencent.com>
Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-01-02 12:02:39 +08:00
Chunguang Xu 6711b34671 pagecachelimit: limit the pagecache ratio of totalram
limit the pagecache ratio of totalram

Signed-off-by: Zhiping Du <zhipingdu@tencent.com>
Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-01-02 12:01:22 +08:00
Chunguang Xu 36ac6e3ba3 expose taskstats to all netspace
iotop cannot run inside container for taskstats not supporting net
namespace, in order to fix it we set netnsok filed of taskstats object
to true.

Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-01-02 12:00:26 +08:00
Kaixu Xia 954836b8d1 mounts: add shield mountpoint in container support
Add shield mountpoint in container support
$ echo "set /dev/name /mnt/point" >/proc/tkernel/shield_mounts
to shield the mountpoint
$ echo "clear /dev/name /mnt/point" >/proc/tkernel/shield_mounts
to delete the mountpoint shielded

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Weiwei Li <nuonuoli@tencent.com>
Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
2020-01-02 11:55:00 +08:00
Liu Hua ec970f2dff vm:isolate max_map_count by pid namespace
Signed-off-by: Zhiguang Peng <zgpeng@tencent.com>
Signed-off-by: Liu Hua <shookliu@tencent.com>
2020-01-02 11:51:53 +08:00
Liu Hua a9ab22a3dd wathdog: add symbol info when panic by hard lockup
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Liu Hua <shookliu@tencent.com>
2020-01-02 11:50:31 +08:00
Liu Hua 5862067548 cpuset: add loadavg calc for each container
calc loadavg for each container using the same algorithm
with the global load.

Signed-off-by: Weiwei Li <nuonuoli@tencent.com>
Signed-off-by: Liu Hua <shookliu@tencent.com>
2020-01-02 11:47:48 +08:00
Liu Hua 8e8d690592 cpuset: add cpuinfo and stat show
We add cpuinfo and stat for each container which
used for docker to get cpu stat just for current
container.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
Signed-off-by: Weiwei Li <nuonuoli@tencent.com>
Signed-off-by: Liu Hua <shookliu@tencent.com>
2020-01-02 11:46:17 +08:00
Xiaoming Gao 34bbe3bcb8 signal: add print_fatal_signals_src_dst sysctl to switch dump fatal signals from sender side
the print_fatal_signals sysctl can only dump fatal signals from receiver's side,
cannot find who and why send these fatal signals, so add a new sysctl
print_fatal_signals_src_dst to switch dump fatal signals from sender side.

Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 11:44:57 +08:00
Lorin Liu 3dd54ca17c proc: add pid mapping between host and container
create a pid mapping data to parent processes in file  /proc/$PID/status
create a proc file (/proc/$PID/hostinfo), mapping pid data to host pid

Signed-off-by: Lorin Liu <lorinliu@tencent.com>
2020-01-02 11:44:36 +08:00
Xiaoming Gao 78a8c3c2c2 Init Repo base on 4.14.105 long term, and add base tlinux kernel interfaces
Signed-off-by: Xiaoming Gao <newtongao@tencent.com>
2020-01-02 10:51:04 +08:00