Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
397ac0fb
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
397ac0fb
编写于
6月 13, 2018
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Updated performance testing tool #1890
上级
37ffa4c9
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
243 addition
and
2 deletion
+243
-2
dbms/src/Common/ErrorCodes.cpp
dbms/src/Common/ErrorCodes.cpp
+1
-0
dbms/src/IO/MMapReadBufferFromFile.cpp
dbms/src/IO/MMapReadBufferFromFile.cpp
+72
-0
dbms/src/IO/MMapReadBufferFromFile.h
dbms/src/IO/MMapReadBufferFromFile.h
+37
-0
dbms/src/IO/MMapReadBufferFromFileDescriptor.cpp
dbms/src/IO/MMapReadBufferFromFileDescriptor.cpp
+90
-0
dbms/src/IO/MMapReadBufferFromFileDescriptor.h
dbms/src/IO/MMapReadBufferFromFileDescriptor.h
+39
-0
dbms/src/IO/ReadBufferFromFileBase.h
dbms/src/IO/ReadBufferFromFileBase.h
+1
-1
utils/compressor/decompress_perf.cpp
utils/compressor/decompress_perf.cpp
+3
-1
未找到文件。
dbms/src/Common/ErrorCodes.cpp
浏览文件 @
397ac0fb
...
...
@@ -374,6 +374,7 @@ namespace ErrorCodes
extern
const
int
QUERY_IS_NOT_SUPPORTED_IN_MATERIALIZED_VIEW
=
397
;
extern
const
int
UNKNOWN_MUTATION_COMMAND
=
398
;
extern
const
int
FORMAT_IS_NOT_SUITABLE_FOR_OUTPUT
=
399
;
extern
const
int
CANNOT_STAT
=
400
;
extern
const
int
KEEPER_EXCEPTION
=
999
;
...
...
dbms/src/IO/MMapReadBufferFromFile.cpp
0 → 100644
浏览文件 @
397ac0fb
#include <unistd.h>
#include <fcntl.h>
#include <Common/ProfileEvents.h>
#include <Common/formatReadable.h>
#include <IO/MMapReadBufferFromFile.h>
namespace
ProfileEvents
{
extern
const
Event
FileOpen
;
extern
const
Event
FileOpenFailed
;
}
namespace
DB
{
namespace
ErrorCodes
{
extern
const
int
FILE_DOESNT_EXIST
;
extern
const
int
CANNOT_OPEN_FILE
;
extern
const
int
CANNOT_CLOSE_FILE
;
}
void
MMapReadBufferFromFile
::
open
(
const
std
::
string
&
file_name
)
{
ProfileEvents
::
increment
(
ProfileEvents
::
FileOpen
);
fd
=
::
open
(
file_name
.
c_str
(),
O_RDONLY
);
if
(
-
1
==
fd
)
{
ProfileEvents
::
increment
(
ProfileEvents
::
FileOpenFailed
);
throwFromErrno
(
"Cannot open file "
+
file_name
,
errno
==
ENOENT
?
ErrorCodes
::
FILE_DOESNT_EXIST
:
ErrorCodes
::
CANNOT_OPEN_FILE
);
}
}
MMapReadBufferFromFile
::
MMapReadBufferFromFile
(
const
std
::
string
&
file_name
,
size_t
offset
,
size_t
length
)
{
open
(
file_name
);
init
(
fd
,
offset
,
length
);
}
MMapReadBufferFromFile
::
MMapReadBufferFromFile
(
const
std
::
string
&
file_name
,
size_t
offset
)
{
open
(
file_name
);
init
(
fd
,
offset
);
}
MMapReadBufferFromFile
::~
MMapReadBufferFromFile
()
{
if
(
fd
!=
-
1
)
close
();
/// Exceptions will lead to std::terminate and that's Ok.
}
void
MMapReadBufferFromFile
::
close
()
{
finish
();
if
(
0
!=
::
close
(
fd
))
throw
Exception
(
"Cannot close file"
,
ErrorCodes
::
CANNOT_CLOSE_FILE
);
fd
=
-
1
;
metric_increment
.
destroy
();
}
}
dbms/src/IO/MMapReadBufferFromFile.h
0 → 100644
浏览文件 @
397ac0fb
#pragma once
#include <Common/CurrentMetrics.h>
#include <IO/MMapReadBufferFromFileDescriptor.h>
namespace
CurrentMetrics
{
extern
const
Metric
OpenFileForRead
;
}
namespace
DB
{
class
MMapReadBufferFromFile
:
public
MMapReadBufferFromFileDescriptor
{
public:
MMapReadBufferFromFile
(
const
std
::
string
&
file_name
,
size_t
offset
,
size_t
length
);
/// Map till end of file.
MMapReadBufferFromFile
(
const
std
::
string
&
file_name
,
size_t
offset
);
~
MMapReadBufferFromFile
()
override
;
void
close
();
private:
int
fd
=
-
1
;
CurrentMetrics
::
Increment
metric_increment
{
CurrentMetrics
::
OpenFileForRead
};
void
open
(
const
std
::
string
&
file_name
);
};
}
dbms/src/IO/MMapReadBufferFromFileDescriptor.cpp
0 → 100644
浏览文件 @
397ac0fb
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <Common/ProfileEvents.h>
#include <Common/formatReadable.h>
#include <IO/MMapReadBufferFromFileDescriptor.h>
namespace
DB
{
namespace
ErrorCodes
{
extern
const
int
CANNOT_ALLOCATE_MEMORY
;
extern
const
int
CANNOT_MUNMAP
;
extern
const
int
CANNOT_STAT
;
extern
const
int
BAD_ARGUMENTS
;
extern
const
int
LOGICAL_ERROR
;
}
void
MMapReadBufferFromFileDescriptor
::
init
(
int
fd_
,
size_t
offset
,
size_t
length_
)
{
fd
=
fd_
;
length
=
length_
;
if
(
length
)
{
void
*
buf
=
mmap
(
nullptr
,
length
,
PROT_READ
,
MAP_PRIVATE
,
fd
,
offset
);
if
(
MAP_FAILED
==
buf
)
throwFromErrno
(
"MMapReadBufferFromFileDescriptor: Cannot mmap "
+
formatReadableSizeWithBinarySuffix
(
length
)
+
"."
,
ErrorCodes
::
CANNOT_ALLOCATE_MEMORY
);
BufferBase
::
set
(
static_cast
<
char
*>
(
buf
),
length
,
0
);
}
}
void
MMapReadBufferFromFileDescriptor
::
init
(
int
fd_
,
size_t
offset
)
{
fd
=
fd_
;
struct
stat
stat_res
{};
if
(
0
!=
fstat
(
fd
,
&
stat_res
))
throwFromErrno
(
"MMapReadBufferFromFileDescriptor: Cannot fstat."
,
ErrorCodes
::
CANNOT_STAT
);
off_t
file_size
=
stat_res
.
st_size
;
if
(
file_size
<
0
)
throw
Exception
(
"MMapReadBufferFromFileDescriptor: fstat returned negative file size"
,
ErrorCodes
::
LOGICAL_ERROR
);
if
(
offset
>
static_cast
<
size_t
>
(
file_size
))
throw
Exception
(
"MMapReadBufferFromFileDescriptor: requested offset is greater than file size"
,
ErrorCodes
::
BAD_ARGUMENTS
);
init
(
fd
,
offset
,
file_size
-
offset
);
}
MMapReadBufferFromFileDescriptor
::
MMapReadBufferFromFileDescriptor
(
int
fd
,
size_t
offset
,
size_t
length
)
:
MMapReadBufferFromFileDescriptor
()
{
init
(
fd
,
offset
,
length
);
}
MMapReadBufferFromFileDescriptor
::
MMapReadBufferFromFileDescriptor
(
int
fd
,
size_t
offset
)
:
MMapReadBufferFromFileDescriptor
()
{
init
(
fd
,
offset
);
}
MMapReadBufferFromFileDescriptor
::~
MMapReadBufferFromFileDescriptor
()
{
if
(
length
)
finish
();
/// Exceptions will lead to std::terminate and that's Ok.
}
void
MMapReadBufferFromFileDescriptor
::
finish
()
{
if
(
0
!=
munmap
(
internalBuffer
().
begin
(),
length
))
throwFromErrno
(
"MMapReadBufferFromFileDescriptor: Cannot munmap "
+
formatReadableSizeWithBinarySuffix
(
length
)
+
"."
,
ErrorCodes
::
CANNOT_MUNMAP
);
length
=
0
;
}
}
dbms/src/IO/MMapReadBufferFromFileDescriptor.h
0 → 100644
浏览文件 @
397ac0fb
#pragma once
#include <IO/ReadBuffer.h>
namespace
DB
{
/** MMap range in a file and represent it as a ReadBuffer.
* Please note that mmap is not always the optimal way to read file.
* Also you cannot control whether and how long actual IO take place,
* so this method is not manageable and not recommended for anything except benchmarks.
*/
class
MMapReadBufferFromFileDescriptor
:
public
ReadBuffer
{
protected:
MMapReadBufferFromFileDescriptor
()
:
ReadBuffer
(
nullptr
,
0
)
{};
void
init
(
int
fd_
,
size_t
offset
,
size_t
length_
);
void
init
(
int
fd_
,
size_t
offset
);
public:
MMapReadBufferFromFileDescriptor
(
int
fd
,
size_t
offset
,
size_t
length
);
/// Map till end of file.
MMapReadBufferFromFileDescriptor
(
int
fd
,
size_t
offset
);
~
MMapReadBufferFromFileDescriptor
()
override
;
/// unmap memory before call to destructor
void
finish
();
private:
size_t
length
=
0
;
int
fd
=
-
1
;
};
}
dbms/src/IO/ReadBufferFromFileBase.h
浏览文件 @
397ac0fb
...
...
@@ -19,7 +19,7 @@ class ReadBufferFromFileBase : public BufferWithOwnMemory<ReadBuffer>
public:
ReadBufferFromFileBase
(
size_t
buf_size
,
char
*
existing_memory
,
size_t
alignment
);
ReadBufferFromFileBase
(
ReadBufferFromFileBase
&&
)
=
default
;
virtual
~
ReadBufferFromFileBase
()
;
~
ReadBufferFromFileBase
()
override
;
off_t
seek
(
off_t
off
,
int
whence
=
SEEK_SET
);
virtual
off_t
getPositionInFile
()
=
0
;
virtual
std
::
string
getFileName
()
const
=
0
;
...
...
utils/compressor/decompress_perf.cpp
浏览文件 @
397ac0fb
...
...
@@ -7,6 +7,7 @@
#include <IO/ReadBuffer.h>
#include <IO/ReadBufferFromFileDescriptor.h>
#include <IO/WriteBufferFromFileDescriptor.h>
#include <IO/MMapReadBufferFromFileDescriptor.h>
#include <IO/HashingWriteBuffer.h>
#include <IO/BufferWithOwnMemory.h>
#include <IO/CompressedStream.h>
...
...
@@ -172,7 +173,8 @@ try
*/
ssize_t
variant
=
argc
<
2
?
-
1
:
parse
<
ssize_t
>
(
argv
[
1
]);
ReadBufferFromFileDescriptor
in
(
STDIN_FILENO
);
MMapReadBufferFromFileDescriptor
in
(
STDIN_FILENO
,
0
);
// ReadBufferFromFileDescriptor in(STDIN_FILENO);
FasterCompressedReadBuffer
decompressing_in
(
in
,
variant
);
// WriteBufferFromFileDescriptor out(STDOUT_FILENO);
// HashingWriteBuffer hashing_out(out);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录