Commit Graph

5 Commits

Author SHA1 Message Date
Chunguang Xu 0916c3f20e ext4: optimize the calculation of inode prealloc-list length
We have limited the length of the inode prealloc list, and here are
some optimizations for the calculation of the length of the list.

Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-09-11 14:22:55 +08:00
Chunguang Xu 13d46976f1 ext4: limit the length of per-inode prealloc list
In the scenario of writing sparse files, the Per-inode prealloc list may
be very long, resulting in high overhead for ext4_mb_use_preallocated().
To circumvent this problem, we limit the maximum length of per-inode
prealloc list to 512 and allow users to modify it.

Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-09-11 14:22:55 +08:00
brookxu b0009bfea9 writeback: eliminate work item allocation in bd_start_writeback()
commit <aac8d41cd438f25bf3110fc6b98f1d16d7dbc169>
commit <85009b4f5f0399669a44f07cb9a5622c0e71d419>

When someone calls wakeup_flusher_threads() or
wakeup_flusher_threads_bdi(), they schedule writeback of all dirty
pages in the system (or on that bdi). If we are tight on memory, we
can get tons of these queued from kswapd/vmscan. This causes (at
least) two problems:

1) We consume a ton of memory just allocating writeback work items.
   We've seen as much as 600 million of these writeback work items
   pending. That's a lot of memory to pointlessly hold hostage,
   while the box is under memory pressure.

2) We spend so much time processing these work items, that we
   introduce a softlockup in writeback processing. This is because
   each of the writeback work items don't end up doing any work (it's
   hard when you have millions of identical ones coming in to the
   flush machinery), so we just sit in a tight loop pulling work
   items and deleting/freeing them.

Fix this by adding a 'start_all' bit to the writeback structure, and
set that when someone attempts to flush all dirty pages. The bit is
cleared when we start writeback on that work item. If the bit is
already set when we attempt to queue !nr_pages writeback, then we
simply ignore it.

This provides us one full flush in flight, with one pending as well,
and makes for more efficient handling of this type of writeback.

Signed-off-by: Chunguang Xu <brookxu@tencent.com>
2020-05-29 10:40:18 +08:00
Hongbo Li c87ad92744 net: allow per netns sysctl_rmem and sysctl_wmem for protos
upstream commit: a3dcaf17ee54f1d01d22cc2b22cab0b4f60d78cf

As we want to gradually implement per netns sysctl_rmem and sysctl_wmem
on per protocol basis, add two new fields in struct proto,
and two new helpers : sk_get_wmem0() and sk_get_rmem0()

First user will be TCP. Then UDP and SCTP can be easily converted,
while DECNET probably wont get this support.

Signed-off-by: Hongbo Li <herberthbli@tencent.com>
2020-01-02 11:33:14 +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